apache服務器yii2報The fileinfo PHP extension is not installed解決思路


這個問題整整困擾了我兩天,今天終於搞定了。記錄一下。

背景是這樣的,我呢,在centos服務器上安裝了lamp環境,其中php是5.3.3,在用composer安裝yii2的時候,出現了某些yii2插件需要php7以上才支持。

於是乎,糾結了一下,是改composer.json中的配置,適應低版本php還是升級php呢?最后的決定是升級php到7。

在apache同一級目錄下新建了個php7文件夾,詳見前面這篇《升級lamp中php5.6到php7.0過程》。

安裝好之后,yii2順利部署調試好。

然后開發了上傳banner圖的模塊。當測試上傳的時候遇到問題了,提示php fileinfo extension must be installed。

圍繞這個問題查了很多網絡上的資料,最后得出的結論就是php沒有加載fileinfo這個擴展,或者沒有安裝這個擴展,或者php.ini沒有開啟這個擴展

find / -name fileinfo.so 發現這個擴展是有的,然后就使用服務器上原有的fileinfo.so進行安裝,結果不行。

后來查了資料說是要在安裝包文件ext/fileinfo底下進行編譯安裝。

於是去嘗試,中間還使用了pecl安裝,這種方法貌似已經廢棄了。不可避免的經歷了安裝pecl的過程。為了滿足在安裝包底下安裝的需求,我重新下載了php7安裝包,記得好像是從香港那個鏡像服務器下載的,先下載到本地,然后上傳到服務器,新建tmp文件夾,解壓,進入ext/fileinfo文件夾。

最后回到大多數人提到的phpize安裝方法,步驟簡單。

過程如下,

phpize,由於服務器存在兩個php,一個5.3.3,一個7.0.2的,因此在運行phpize命令的時候,顯示的是2009版,版本低,因此在重新編譯安裝php7之后,添加了一個別名alias php=/usr/local/php7/bin/phpize,此時顯示的是2015了,這一步ok了。

在ext/phpize文件夾下運行phpize。

然后運行./configure --with-php-config=/usr/local/php7/bin/php-config --enable-fileinfo(這個是看有些人加了,因為懷疑可能是被禁用所以也給加上了)。

運行完畢,這中間是一個配置的shell腳本。有可能出錯,如果出錯不被發現繼續下一步,編譯安裝不成功,還是無法正常運行的。

運行完畢,運行make & make install,如果前面有過make的經歷,還需要make clean一下,不然還是不能成功。如此完畢,正常的話,最后一步make test就可以使用了。

在這一步從phpize到最后,嘗試了不下十遍,最終通過php -m查的擴展總是沒增加,而且通過php -i | grep php.ini,當然在php.ini中要加入extension=fileinfo.so,另外中間還提示system以及另外一個函數被禁用,在php.ini當中把禁用函數刪掉即可。

disable_functions = exec,chroot,chgrp,chown,proc_get_status,ini_alter,ini_alter,ini_restore

而且提示動態庫加載失敗,因為有一個變量未定義。其實還是因為編譯安裝這個擴展中間出了錯導致的。因此保證編譯安裝絕對無誤,就不會存在任何問題。

 

文字寫的零碎,的確是因為初學,各種問題零零碎碎,無法很好的總結,踩過的坑記下,另外回顧一下加深印象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM