php serialize_precision 介绍
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
基于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"
linux php 安装xdebug扩展
# 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性能优化工具--vld
vld介绍
- vld是一个在Zend引擎中,以挂钩的方式实现的用于输出PHP脚本生成的中间代码(执行单元)的扩展。 它可以在一定程序上查看Zend引擎内部的一些实现原理,是我们学习PHP源码的必备良器。
- 现在最新版本是 0.14.0(2016-12-18),它的作用是:显示转储PHP脚本(opcode)的内部表示(来自PECL的vld简介)。简单来说,可以查看PHP程序的opcode。
- pagelist:http://pecl.php.net/package/vld
wget http://pecl.php.net/get/vld-0.14.0.tgz #download vldtar zxvf vld-0.14.0.tgz #Decompression packagecd vld-0.14.0 #change dirphpize #Expanded php extension modulelocate php-config #use locate find php-config path如果提示not found locate command,使用以下命令安装:
标签: PHP configure yum vld locate phpize
Centos卸载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
还是会看到有版本信息的。。。。。
Form表单传递参数的编码问题
工作中遇到后端接收前端数据,解析不正常通过分析原因如下:如果前端在form表单提交的时候没有设置enctype属性,传递参数的时候最终以 application/x-www-form-urlencoded方式提交数据,这样传递的参数都进行了urlencode转码。正常情况下后端接收到的参数其实需要urldecode进行解码。由于前端传递参数的过程中没有对任何参数做过特殊处理,但是后端在接收有些参数是使用rawurldecode进行解码的(urldecode和rawurldecode对空空格号的处理方式不一样)。这个原因导致了后端数据解析失败
标签: PHP urlencode rawurldecode
PHP 实现多服务器共享 SESSION 数据
PHP 实现多服务器共享 SESSION 数据稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块等,各个服务器通过统一接口对用户数据进行访问即可。由于Session存储默认是files即文件存储(即本机生成的session会以文件的方式存储),这时候就出现了各个服务器之间 SESSION 共享数据的问题。
实现session共享方式有如下三种:
1)通过Redis实现Session共享:
实现方式,在php.ini中添加安装redis扩展,然后修改配置文件中的session存储方式!
标签: session redis.memcached.php
10个你应该学习使用的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
php-fpm:No pool defined
# service php-fpm startStarting 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
phpize Cannot find autoconf
Centos下执行phpize提示“Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this scrIPt.”原因:缺少autoconf
解决方法:
yum install autoconf
热门日志
分类
- Django(4)
- ssdb(1)
- Mac(7)
- C(1)
- memcache(1)
- Python(32)
- Vim(8)
- sed(2)
- ansible(3)
- awk(4)
- shell(3)
- about(1)
- git(9)
- bat(4)
- svn(0)
- docker(1)
- Tornado(1)
- go(2)
- 架构(18)
- Vue(1)
- game(2)
- Html(6)
- Java(8)
- Mysql(37)
- Ajax(2)
- Jsp(1)
- Struts(8)
- Linux(73)
- JavaScript(39)
- Staruml(0)
- Mouth(1)
- Php(102)
- Windows(8)
- Message(48)
- Lua(10)
- Compute(1)
- Redis(7)
- Nginx(12)
- Jquery(1)
- Apache(1)
- cocos2d-x(8)
最新日志
- DHCP(Dynamic Host Configuration Protocol) 动态主机配置协议
- 从技术专家到战略领袖:成就技术总监的路径与思维
- python 如何读取超大的文件
- python requests 模块
- 如何给自己充电?
- 告别2024,迎接2025:深耕梦想,向前而行
- linux 的 dns 缓存,NSCD 服务
- The following untracked working tree files would be overwritten by checkout
- insecure connection not allowed,产生原因及如何解决
- 逆境乐观,顺境警醒:生活的智慧与力量