日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php升级的痛苦,升级 PHP 7.4 带来的两个大坑

發布時間:2025/3/21 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php升级的痛苦,升级 PHP 7.4 带来的两个大坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于我機器用的滾動更新的 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 的都知道出現這個錯誤一般是文件權限不對或者文件路徑不對,而這兩個錯誤都是比較難找的。于是我又雙叒叕體驗了一把大眼瞪小眼的路徑檢查,沒問題。文件權限檢查,emmm也沒問題呀?又返回去檢查路徑,還是沒問題!搞到最后氣的 chmod 777一把梭竟然也沒能解決問題,有點懷疑人生…

網上搜索 php-fpm 的 File not found 錯誤,雖然結果很多,可原因都只有這兩個。而這兩個原因也都被一一排除了,事情突然向神奇的角度發展起來了...

不知過了多久之后我才想到可能是跟 php 版本有關(因為我本機也跑了其它 php 應用,所以一開始并不覺得 php 有問題)。于是我去搜了一下新版 php7.4 及 php-fpm7.4 的改動,一下就發現了罪魁禍首:php7.4 Commit

這個提交中添加了一個選項: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升级的痛苦,升级 PHP 7.4 带来的两个大坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。