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) 浏览(7625)

基于php实现多进制转换与兑换码生成的探索

2018-1-15 杜世伟 Php

最近要做一个兑换码生成的功能,之前有做过32位唯一码生成器,但是在业务需求中,32位的兑换码有些过长了,用户在应用内填写的时候会比较麻烦,不是很友好,倒是可以做成二维码的形式扫一下就行了,但是业务中还是存在输入兑换码的行为,所以本篇主要是关于以尽量短的字符来生成兑换码,同时要保证唯一性以及生成机制复用性(也就是利用这套机制可以生成不同种类的兑换码)的探索

以下示例代码均基于TPRCMS编写

探索一: 进制转换

生成的32位唯一码是16进制的哈希字符串,我就在想是不是可以通过提高进制来缩短字符串长度,所以有了如下的代码

代码地址: 多进制转换器ConvertLogic
其中关于10进制与62进制互转的部分,参考了《PHP 10进制与62进制互转,可用于生成短网址》

实例代码

$uuid = "cd5fd2cfeb40aafe060f4d9597348be7";
$str = ConvertLogic::convert( $uuid, 16, 62); 

输出

string(32) "cd5fd2cfeb40aafe060f4d9597348be7"
string(22) "6fxdxREtzxq6qNdSghGm7t" 

阅读全文>>

标签: redis uniqid 进制转换 兑换码

评论(0) 浏览(14412)

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) 浏览(9883)

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) 浏览(14187)

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) 浏览(9357)

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

2016-4-10 杜世伟 Php

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

阅读全文>>

标签: PHP urlencode rawurldecode

评论(0) 浏览(12953)

PHP 实现多服务器共享 SESSION 数据

2016-4-3 杜世伟 Php

PHP 实现多服务器共享 SESSION 数据
稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块等,各个服务器通过统一接口对用户数据进行访问即可。由于Session存储默认是files即文件存储(即本机生成的session会以文件的方式存储),这时候就出现了各个服务器之间 SESSION 共享数据的问题。 
实现session共享方式有如下三种:
1)通过Redis实现Session共享:
实现方式,在php.ini中添加安装redis扩展,然后修改配置文件中的session存储方式!

阅读全文>>

标签: session redis.memcached.php

评论(0) 浏览(9554)

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) 浏览(11854)

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) 浏览(16614)

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) 浏览(16585)

Powered by emlog 沪ICP备2023034538号-1