提示:这是一篇技术博客,请普通玩家不必关注此文。
因为种种主观和客观原因,虽然我写的其他程序都是基于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']}
就可以了
之后还会有更多更新,敬请期待。
《将PHP版本从5.6升级到7.3中遇到的坑汇总贴[不定时更新]》上有1条评论