将PHP版本从5.6升级到7.3中遇到的坑汇总贴[不定时更新]

提示:这是一篇技术博客,请普通玩家不必关注此文。

因为种种主观和客观原因,虽然我写的其他程序都是基于PHP7的了,但 Linodas 因为历史遗留太多,一直没有升级到最新的PHP版本,一直保持在5.6版本。

不过由于最近的一些神秘计划,因此在最近就正好将PHP更新到了CentOS 6.8支持的最高的7.3版。搬迁之后马上就遇到了一大堆问题。

因此,下面就是一份维修记录,除了作为技术留底,也方便了今后有人在网上搜索同类问题的时候能看到此文。

安装完php7之后记得装其他组件。

比如GD库,Redis等等。否则会报错找不到class

PHP7不再支持传统的 mysql_ 开头的库,需要用mysqli_ 开头的替换

注意不能直接复制粘贴替换,否则会死的很惨。
可以先用 http://www.seabreezecomputers.com/mysql2mysqli/ 这个工具转换旧的代码,注意也不要直接转换完了就替换,也会死得很惨。
请务必要针对自己的mysql库的实际情况(OO化的还是过程化的),具体调整代码才可以工作。

=& new classname 不能用

直接删掉&即可

一般个人不会用这种写法,我是改一个第三方库里面的

PHP7不支持 preg_replace 中使用 /e 修饰符,需要用 preg_replace_callback 替换

这里一定要小心的修复,我在这里遇到的问题是模板引擎太老,导致所有模板生成全是空白,查阅error_log没有报错,所以花了许多时间解决这个问题。

现在一般大家写的时候都不会用/e修饰符了,所以问题不大。

NaN和False的关系

用一张图可以说明此问题

对于有多个PHP版本情况,记得要修改crontab中的CLI方式执行的PHP文件

例如在cron中如果有类似
/usr/bin/php /www/domain/123.php
这样的内容,需要修改为类似
/usr/bin/php73 /www/domain/123.php
这样。

类似 $aaa->$bbb[‘ccc’]的格式的解析顺序变化

这个一般很多迁移指南里面都写为第一条,我当时感觉“啊好像我游没有用到这个写法啊”就没管。

结果还是中招了,不过只有一个很小的地方遇到了,问题不大,改了就好。

可以用下列正则快速的找出问题代码
\$[A-Za-z0-9]+\-\>\$[A-Za-z0-9]+\[
修改办法也很简单,改为
$aaa->{$bbb['ccc']}
就可以了

之后还会有更多更新,敬请期待。