社区php7升级记录

社区服务器已经全部完成升级,这里记录一下社区升级php7所遇到的问题,可以分为四个类型

  1. 扩展支持的变化,导致需要修改配置甚至调整替换操作的类库
  2. php7语法检查比之前变得严格,部分之前能正常执行的写法,现在会有warning提示,甚至fatal error
  3. 部分函数的被弃用
  4. 我们的一处代码意外触发了php7本身的一处bug,已经在php官网提交并得到反馈

第一种情况:扩展的变化

1. 不支持mysql扩展,改用mysqli

  这个比较简单修改配置信息就好

2. 不支持memcache扩展,改用memcached

这里有比较大的坑,我们测试过memcache与memcached的哈希规则是不一致的,甚至存储写入时两个扩展设置的数据类型flag都是不一致的,导致memcache扩展写入
的数组,在memcached扩展读出来是原始的序列化字符串。
所以两者在集群甚至单点模式下都是无法兼容的.
之后我们尝试过在php5.6上也启用memcached,不过发现两个不同版本的memcached的哈希规则竟然都不一样。
最后我们的解决方案是php7使用新的集群,与旧有的隔离,同个判断php版本已经扩展是否存在来使用哪种扩展与配置

3. 不支持mongo扩展,改用mongodb扩展

扩展变化导致原先的mongodb操作的类库不可用,我们根据php版本来判断具体使用哪一种

参考:https://segmentfault.com/a/1190000007158136

也可以是用开源的mongo适配器实现兼容。

 composer require alcaeus/mongo-php-adapter

第二种情况:语法检查变化

php7某种情况自动类型转换会出问题

$pids = '';
$pids[] = array();

使用[]操作,出现Fatal error

PHP Fatal error:  Uncaught Error: [] operator not supported for strings

函数定义这里php7的参数校验和5.6有差异

function a($param1, $param2, $param1 = array()){}

这样的方式php5.6不会报错,7会报fatal error.

PHP Fatal error:  Redefinition of parameter $param1 in

以数组的形式给字符串赋值,会报错

PHP Warning:  Cannot assign an empty string to a string offset

第三种情况:部分函数被弃用或调用方式调整

正则匹配preg_replace 函数的 e 修饰符功能在php7被弃用(其他修饰符模式,正常使用),需要回调执行,则用preg_replace_callback来替代

  1. 例子:将__TABLE_NAME__这样的字符串替换成正规的表名,并且带上前缀
$joinStr = preg_replace("/__([A-Z_-]+)__/e",$prex.".strtolower('$1')",$joinStr);
//替换为
preg_replace_callback("/__([A-Z_-]+)__/",function($r) use (&$joinStr){
$joinStr = $prex.strtolower($r[]);
},$joinStr);

第四种情况:触发php7 bug

在将一台cgi服务器升级到php后,时不时会收到超时报警,定位后发现是某种特殊情况下触发了php7的bug 我们已经把bug提交到官网 https://bugs.php.net/bug.php?id=74431

注:PHP官方在第二天就修复了此BUG,最新的 7.1.5 就没问题了

原文链接

车轮升级PHP7踩过的一些坑的更多相关文章

  1. Spring Cloud 升级最新 Finchley 版本,踩了所有的坑!

    Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Boot 2.x 的 Finchley 版本,现在一起为项目做一次整体框架升级. 升级前 ...

  2. 安装python爬虫scrapy踩过的那些坑和编程外的思考

    这些天应朋友的要求抓取某个论坛帖子的信息,网上搜索了一下开源的爬虫资料,看了许多对于开源爬虫的比较发现开源爬虫scrapy比较好用.但是以前一直用的java和php,对python不熟悉,于是花一天时 ...

  3. 三分之一的程序猿之社交类app踩过的那些坑

    三分之一的程序猿之社交类app踩过的那些坑 万众创新,全民创业.哪怕去年陌生人社交不管融资与否都倒闭了不知道多少家,但是依然有很多陌生人社交应用层出不穷的冒出来.各种脑洞大开,让人拍案叫起. 下面我们 ...

  4. 【Fine原创】JMeter分布式测试中踩过的那些坑

    最近因为项目需要,研究了性能测试的相关内容,并且最终选用了jmeter这一轻量级开源工具.因为一直使用jmeter的GUI模式进行脚本设计,到测试执行阶段工具本身对资源的过量消耗给性能测试带来了瓶颈, ...

  5. 与webview打交道中踩过的那些坑

    随着HTML5被越来越多的用到web APP的开发当中,webview这一个神器便日渐凸显出重要地位.简要的说,webview能够在移动应用中开辟出一个窗口,在里面显示html页面,css以及js代码 ...

  6. 美团在Redis上踩过的一些坑-目录(本人非美团)(转)

    来自:http://carlosfu.iteye.com/blog/2254154 分为5个部分:    一.周期性出现connect timeout    二.redis bgrewriteaof问 ...

  7. [原创]阿里云RocketMQ踩过的哪些坑

    由于公司的最近开始使用RocketMQ来做支付业务处理, 便开启了学习阿里云RocketMQ的学习与实践之路, 其中踩了不少的坑, 大部份是由于没有仔细查看阿里云的技术文档而踩的坑. 但是有一个非常大 ...

  8. Redis上踩过的一些坑

    来自: http://blog.csdn.net//chenleixing/article/details/50530419 上上周和同事(龙哥)参加了360组织的互联网技术训练营第三期,美团网的DB ...

  9. CentOS 7下升级MySQL5.7.23的一个坑

    发现CentOS 7下升级MySQL5.7.23的一个坑,以前面升级到MySQL 5.7.23的一个集群为例 在我们环境下打开文件描述符个数的参数open_files_limit在MySQL 5.6. ...

随机推荐

  1. Python中元组相关知识

    下面给大家介绍以下元组的相关知识: ·元组可以看成是一个不可更改的list 1.元组的创建 # 创建空元祖 t = () print(type(t)) # 创建只有一个值的元组 # 观察可知元组中如果 ...

  2. numpy库的常用方法

    np.abs() 计算数组各元素的绝对值1 a= [0,1,2,3,4,-5,9,-3,12,-4] np.abs(a)out: array([ 0, 1, 2, 3, 4, 5, 9, 3, 12, ...

  3. Maven 环境搭建及使用(win10)

    最近由于公司项目需要,学习了一下Maven 环境的配置.这里把配置步骤和简单的操作做一个汇总. 一.Maven环境的搭建 1.配置java环境(这里不详述过程,可参考:http://www.cnblo ...

  4. Git 恢复本地误删的文件

    通过git进行代码管理的项目,如果在本地编辑的过程中误删了某些文件或者文件夹,可以通过git操作来复原. Step 1: git status 查看本地对改动的暂存记录.如下图所示,本人误删了文件夹“ ...

  5. Sqlautocode使用过程的一些坑

    Sqlautocode是SQLAlchemy一个数据库映射工具,可以将数据库文件映射为python代码,直接在程序中移植使用.最近在使用过程中遇到了一些坑,通过用代码编辑工具pycharm阅读源码和多 ...

  6. C# Aspose.Cells方式导入Excel文件

    读取Excel 类 我返回的是DataTable 类型 也可以返回DataSet类型 public class XlsFileHelper { public DataTable ImportExcel ...

  7. oracle数据库用户基本操作

    每个数据库都有一系列的用户,为了访问数据库,用户必须使用用户名等信息先连接上数据库实例,oracle数据库提供了多种方式来管理用户安全.创建用户的时候,可以通过授权等操作来限制用户能访问的资源以及一些 ...

  8. 建立标准编码规则(三)-CodeFixProvider 给代码分析器增加修复建议

    给代码分析器增加修复建议 既然代码分析器,向代码编写者提出了错误或警告,那么有没有可能向代码编写者提交有效的改进建议? 相对于 DiagnosticAnalyzer,代码修复继承与 CodeFixPr ...

  9. Html body的滚动条禁止与启用

    在写一个在页面中,经验证用户没有登录或session失效时候弹出登录框禁止页面滚动用到今天搞了一个功能,上下左右居中,模仿QQ空间里的样式,把横向和纵向滚动条禁止掉代码如下:<script ty ...

  10. DP E - Cheapest Palindrome

    Keeping track of all the cows can be a tricky task so Farmer John has installed a system to automate ...