這個問題整整困擾了我兩天,今天終於搞定了。記錄一下。php
背景是這樣的,我呢,在centos服務器上安裝了lamp環境,其中php是5.3.3,在用composer安裝yii2的時候,出現了某些yii2插件須要php7以上才支持。html
因而乎,糾結了一下,是改composer.json中的配置,適應低版本php仍是升級php呢?最後的決定是升級php到7。shell
在apache同一級目錄下新建了個php7文件夾,詳見前面這篇《升級lamp中php5.6到php7.0過程》。apache
安裝好以後,yii2順利部署調試好。json
而後開發了上傳banner圖的模塊。當測試上傳的時候遇到問題了,提示php fileinfo extension must be installed。centos
圍繞這個問題查了不少網絡上的資料,最後得出的結論就是php沒有加載fileinfo這個擴展,或者沒有安裝這個擴展,或者php.ini沒有開啓這個擴展。服務器
find / -name fileinfo.so 發現這個擴展是有的,而後就使用服務器上原有的fileinfo.so進行安裝,結果不行。yii2
後來查了資料說是要在安裝包文件ext/fileinfo底下進行編譯安裝。網絡
因而去嘗試,中間還使用了pecl安裝,這種方法貌似已經廢棄了。不可避免的經歷了安裝pecl的過程。爲了知足在安裝包底下安裝的需求,我從新下載了php7安裝包,記得好像是從香港那個鏡像服務器下載的,先下載到本地,而後上傳到服務器,新建tmp文件夾,解壓,進入ext/fileinfo文件夾。php7
最後回到大多數人提到的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
並且提示動態庫加載失敗,由於有一個變量未定義。其實仍是由於編譯安裝這個擴展中間出了錯致使的。所以保證編譯安裝絕對無誤,就不會存在任何問題。
文字寫的零碎,的確是由於初學,各類問題零零碎碎,沒法很好的總結,踩過的坑記下,另外回顧一下加深印象。