升级Php 7.4带来的两个大坑-PHP7

资源魔 47 0
因为我机械用的滚动更新的Archlinux,人不知;鬼不觉Php曾经晋级到7.4了,没想到此次更新带来了极年夜的费事。起首是Php-fpm的新选项ProtectHome会招致经典的File not found谬误,再是Php诠释器会对null类型的下标拜访间接报错Trying to access array offset on value of type null。

比来正在帮一个冤家筹措一个网站,于是把线上代码拉回内陆做镜像进行测试。由于web使用有些希奇的依赖,为了避免净化本机的环境,我就把它部署正在Docker中进行测试。Docker的根底镜像抉择了保守的Archlinux,搭配上个月尾才出炉的Php7.4。于是花了整整一个下战书栽正在Debug年夜坑中…

起首是一把梭配好了环境后,一跑,报了Php-fpm最经典也是最坑的谬误之一:File not found。配过Php-fpm的都晓得呈现这个谬误普通是文件权限不合错误或许文件门路不合错误,而这两个谬误都是比拟难找的。于是我又双叒叕体验了一把年夜眼瞪小眼的门路反省,没成绩。文件权限反省,e妹妹m也没成绩呀?又前往去反省门路,仍是没成绩!搞到最初气的chmod 777一把梭居然也没能处理成绩,有点嫌疑人生…

网上搜寻Php-fpm的File not found谬误,尽管后果不少,可缘由都只有这两个。而这两个缘由也都被逐个扫除了,事件忽然向神秘的角度倒退起来了...

没有知过了多久之后我才想到多是跟Php版本无关(由于我本机也跑了其它Php使用,以是一开端其实不感觉Php有成绩)。于是我去搜了一下新版Php7.4及Php-fpm7.4的改动,一下就发现了祸首罪魁:

Php7.4 Co妹妹it

(https://github.com/php/php-src/co妹妹it/40c4d7f1820df1872a71ab07fd26da45a203e37f#diff-c0605c0e7e1db864472acf66a9812d33R22)

这个提交中增加了一个选项:ProtectHome。望文生义,开启了之后php没有会去执行正在家目次中的文件——而这个新选项的默许值恰恰是开启的。应用systemctl edit php-fpm.service增加一个选项笼罩,重启效劳后,终于所有失常,并迎来第二个年夜坑谬误:

Php中常常应用inlcude,require等来蕴含其它文件。而调试发如今某个include之后,php间接中止执行并报错Trying to access array offset on value of type null。然而正在线上的代码跑起来却一点成绩也不,这就很希奇了,跟到include的文件中之后发现是有个中央正在拜访数组元素,而数组自身倒是null。正在Php这类弱类型言语中这类语法普通是支持的,它会全体前往null,而正在新版的Php7.4中这个语法却会陈诉为谬误。看来Php也正在一点点标准言语的特点,没方法,这个只能本人改代码了。(尽管我今朝抉择了应用旧版本的Php)

因为Php7.4正在也公布没有久,预计尚未年夜面积更新应用,各个使用的开发者可能也不针对Php7.4进行过测试以及兼容修正。也恰是因而,正在网上搜寻这些信息时,找没有到甚么有代价的倡议,这篇文章除了了记载下被这个新特点坑了一下战书以外,也算给其它人留一个处理相似成绩的思绪吧。

以上就是晋级Php 7.4带来的两个年夜坑的具体内容,更多请存眷资源魔其它相干文章!

标签: php7开发教程 php7开发资料 php7开发自学 Php 7.4

抱歉,评论功能暂时关闭!