公升級php7 公升級Php 7 4帶來的兩個大坑

2021-10-14 18:23:25 字數 1747 閱讀 3415

每日17點準時技術乾貨分享

由於我機器用的滾動更新的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。

在php這種弱型別語言中這種語法一般是支援的,它會整體返回null,而在新版的php7.4中這個語法卻會報告為錯誤。

看來php也在一點點規範語言的特性,沒辦法,這個只能自己改**了。

(雖然我目前選擇了使用舊版本的php)

由於php7.4在也發布不久,估計還沒有大面積更新使用,各個應用的開發者可能也沒有針對php7.4進行過測試和相容修改。

PHP7 公升級指南(Windows)

php7 released了,號稱提速了2倍,支援函式引數 函式返回指定型別,媽呀,等你好久了,記得以前在php 5.4的公升級決議中就提到,最後被否了,始終還是要加回來吧!判斷php的變數型別,滿滿的都是淚啊!如果本地windows仍在使用xampp apache 之類的,請先按照以下操作 1.修...

Centos7 公升級php版本到php7

一 首先檢視是否有老版本 yum list installed grep php 二 如果安裝的有 yum remove php.x86 64 php cli.x86 64 php common.x86 64 php gd.x86 64 php ldap.x86 64 php mbstring.x8...

Centos7 公升級php版本到php7

一 首先檢視是否有老版本 yum list installed grep php 二 如果安裝的有 yum remove php.x86 64 php cli.x86 64 php common.x86 64 php gd.x86 64 php ldap.x86 64 php mbstring.x8...