php serialize_precision 介绍

2023-6-3 杜世伟 Php

serialize_precision 是 PHP 中的一个配置选项,它决定了在序列化浮点数时使用的精度。该选项对于确保浮点数在序列化和反序列化过程中不丢失精度非常重要。

serialize_precision 的详细介绍

含义和作用

serialize_precision 设置在使用 serialize() 函数时,PHP 对浮点数序列化的精度。序列化是将数据结构(如数组和对象)转换为字符串的过程,以便存储或传输。反序列化是相反的过程,将字符串转换回原始数据结构。

默认值

在 PHP 7.1 之前,serialize_precision 的默认值是 17。这意味着在序列化浮点数时,最多使用 17 位精度。

从 PHP 7.1 开始,默认值变为 -1。这意味着 PHP 会使用足够的精度来确保浮点数在序列化和反序列化后保持其值。

配置方法

你可以在 php.ini 文件中设置 serialize_precision,也可以在运行时使用 ini_set() 函数设置。

在 php.ini 中设置

serialize_precision = -1

在运行时设置

ini_set('serialize_precision', -1);

示例

// 设置 serialize_precision 为 14
ini_set('serialize_precision', 14);

$data = 0.12345678901234;
$serialized_data = serialize($data);
echo $serialized_data;
// 输出: d:0.12345678901234;

$data = 0.12345678901234567890;
$serialized_data = serialize($data);
echo $serialized_data;
// 输出: d:0.12345678901235; (由于精度限制被舍入)

// 使用默认值 (-1)
ini_set('serialize_precision', -1);

$serialized_data = serialize($data);
echo $serialized_data;
// 输出: d:0.12345678901234568;

重要性

设置 serialize_precision 为 -1 可以确保 PHP 在序列化浮点数时使用最大的精度,从而避免由于浮点数精度丢失导致的问题。这在涉及金融计算或科学计算等需要高精度的场景中尤其重要。

总结
serialize_precision:决定浮点数序列化时的精度。
默认值:PHP 7.1 及以后版本为 -1,之前版本为 17。

重要性:在需要高精度的场景中,设置 serialize_precision 为 -1 以确保浮点数精度不会丢失。

通过正确配置 serialize_precision,可以确保浮点数在序列化和反序列化过程中保持精度,避免潜在的计算错误和数据损失。

标签: PHP

评论(0) 浏览(7569)

Mac 启动自带PHP php-fpm问题

2018-1-9 杜世伟 Mac

Mac启动自带PHP php-fpm问题
Mac 自带 php-fpm,在终端执行 php-fpm,会报如下错误:
ERROR: failed to open configuration file '/private/etc/php-fpm.conf': No such file or directory (2)
ERROR: failed to load configuration file '/private/etc/php-fpm.conf'
ERROR: FPM initialization failed

错误信息显示,不能打开配置文件,cd /private/etc,发现没有 php-fpm.conf 文件,但是有 php-fpm.conf.default 文件。这个文件是默认配置,我们可以复制一份,改名为 php-fpm.conf,然后再根据需要改动配置。

cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf
执行 php-fpm,再次报错:

ERROR: failed to open error_log (/usr/var/log/php-fpm.log): No such file or directory (2)
ERROR: failed to post process the configuration

阅读全文>>

标签: PHP php-fpm Mac

评论(0) 浏览(12961)

linux php 安装xdebug扩展

2017-9-6 杜世伟 Php

# 1. Xdebug 简介
# Xdebug 是一个开放源代码的 PHP 程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。当前最新版本为 Xdebug 2.6.0。

# 2. Xdebug 相关资料
# 官网:https://xdebug.org
# 官网文档:https://xdebug.org/docs
通过pecl安装xdebug扩展
php环境:PHP 7.0.24
系统环境:CentOS Linux release 7.4.1708 (Core) 
#install xdebug 以下使用pecl安装php扩展,pecl安装传送门
pecl install xdebug

Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249

阅读全文>>

标签: PHP linux pecl xdebug

评论(0) 浏览(9877)

PHP性能优化工具--vld

2016-12-25 杜世伟 Php

PHP性能优化工具--vld
vld介绍
  1. vld是一个在Zend引擎中,以挂钩的方式实现的用于输出PHP脚本生成的中间代码(执行单元)的扩展。 它可以在一定程序上查看Zend引擎内部的一些实现原理,是我们学习PHP源码的必备良器。
  2. 现在最新版本是 0.14.0(2016-12-18),它的作用是:显示转储PHP脚本(opcode)的内部表示(来自PECL的vld简介)。简单来说,可以查看PHP程序的opcode。
  3. pagelist:http://pecl.php.net/package/vld
vld扩展安装:
wget http://pecl.php.net/get/vld-0.14.0.tgz #download vld
tar zxvf vld-0.14.0.tgz #Decompression package
cd vld-0.14.0 #change dir
phpize #Expanded php extension module
locate php-config #use locate find php-config path
如果提示not found locate command,使用以下命令安装:

阅读全文>>

标签: PHP configure yum vld locate phpize

评论(0) 浏览(14168)

Centos卸载Php的安装环境

2016-8-12 杜世伟 Php

当我安装Php7.0版本的时候提示:
Error: php70w-common conflicts with php-common-5.4.16-42.el7.x86_64

于是决定卸载Centos上Php的安装环境
查看php版本命令:
#php -v
PHP 5.4.16 (cli) (built: Aug 11 2016 21:24:59)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
这个命令是删除不干净的
#yum remove php
因为使用这个命令以后再用
#php -v
还是会看到有版本信息的。。。。。

阅读全文>>

标签: PHP linux rpm centos

评论(0) 浏览(9344)

Form表单传递参数的编码问题

2016-4-10 杜世伟 Php

工作中遇到后端接收前端数据,解析不正常通过分析原因如下:
如果前端在form表单提交的时候没有设置enctype属性,传递参数的时候最终以 application/x-www-form-urlencoded方式提交数据,这样传递的参数都进行了urlencode转码。正常情况下后端接收到的参数其实需要urldecode进行解码。由于前端传递参数的过程中没有对任何参数做过特殊处理,但是后端在接收有些参数是使用rawurldecode进行解码的(urldecode和rawurldecode对空空格号的处理方式不一样)。这个原因导致了后端数据解析失败

阅读全文>>

标签: PHP urlencode rawurldecode

评论(0) 浏览(12950)

Mac 下更新自带的PHP版本5.3到7.0

2016-3-16 杜世伟 Mac

下载和安装PHP 7.0

打开终端并运行如下的命令:

curl -s http://php-osx.liip.ch/install.sh | bash -s 7.0
回车后,你会看到一个EI Capitan下的警告:

Detected OS X El Capitan 10.11. As this is quite new, there may be issues still. Your mileage may vary.
不用管这个警告,等待下载安装完毕即可。

配置路径

安装完毕如果在终端里运行PHP -v命令,还是会显示mac自带的旧版本。因此,我们还需要配置一下路径。

阅读全文>>

标签: PHP curl install Mac

评论(0) 浏览(17760)

10个你应该学习使用的PHP特性

2016-1-25 杜世伟 Php

本文主要总结了10个PHP特性,这些PHP特性对于PHP开发者来说都是应该学习和使用的,译文如下:

1)标量类型声明(PHP7)

PHP是一种松散类型的编程语言,因此没有提供任何指定输入参数类型和返回值类型的方法。 PHP7通过以下语法改变了这个现象:

function add(int $x, int $y) : int
{
    return $x + $y;
}

echo add(1, 2);
有效类型为:类/接口名称,self,array(数组),callable(回调类型),bool(布尔型),float(浮点型),int(整型)和string(字符串)。

2)?? — 空接合操作符(PHP7)

空接合操作符虽然小,但非常好用,是PHP7中新增加的。?? — 只要操作符的左边存在且不为空,就返回左边,否则就返回操作符的右边:

阅读全文>>

标签: PHP json_encode php7

评论(0) 浏览(11816)

php-fpm:No pool defined

2015-11-28 杜世伟 Php

# service php-fpm start
Starting php-fpm [28-Nov-2015 17:13:23] WARNING: Nothing matches the include pattern ‘/etc/php-fpm.d/*.conf’ from /etc/php-fpm.conf at line 125.
[28-Nov-2015 17:13:23] ERROR: No pool defined. at least one pool section must be specified in config file
[28-Nov-2015 17:13:23] ERROR: failed to post process the configuration
[28-Nov-2015 17:13:23] ERROR: FPM initialization failed

解决方法:

进入PHP安装目录/etc/php-fpm.d

cp www.conf.default www.conf

#service php-fpm start

## netstat -ntlp | grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      32664/php-fpm: mast

标签: PHP linux php-fpm

评论(0) 浏览(16602)

phpize Cannot find autoconf

2015-5-10 杜世伟 Php

Centos下执行phpize提示“Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this scrIPt.”
原因:缺少autoconf
解决方法:
yum install autoconf

标签: PHP phpize autoconf

评论(0) 浏览(16572)

Powered by emlog 沪ICP备2023034538号-1