注意:轉載請注明出處:http://www.programfish.com/blog/?p=85
在很多時候我們用linux裡搭建web服務器的時候會需要編譯安裝php套件,而在編譯安裝後可能又會需要添加一些編譯安裝時沒有指定要編譯進去的模塊,例如如下情況:
mysql.so 或mysqli.so 、mbstring.so zlib.so 等模塊。
這裡提示一下:
如果你有安裝過phpmyadmin而且在安裝配置好之後打開首頁是空白的,那麼很有可能就是你的php沒有mysql和mbstring這兩個模塊。
還有就是在線安裝wordpress插件時提示沒有zlib插件也是因為你的php環境裡沒有 zlib.so 這個模塊。
以上都是筆者經歷過的,希望可以對解決你的問題有些幫助。
好了,現在進入正題,動態編譯並添加php模塊:
注明一下,本博文只討論已經安裝了php的linux環境。
如果你不是想動態添加模塊而是想重新安裝php環境的請移步:
Linux下Php環境安裝:http://www.cnblogs.com/fly1988happy/archive/2011/12/14/2288096.html
此時你需要保存有以前編譯安裝php時候用的php源碼。如果沒有,你可以到http://cn2.php.net/downloads.php這裡下載與你已經安裝了的php版本一樣的源碼包(這裡版本最好一樣或者接近,版本不一樣可能會存在不適配)。
還有你需要知道你的php是安裝在哪裡的,因為等下要用到安裝目錄下/bin/phpize 這個工具。
如果你不知道你的php目錄安裝在哪裡,可以find命令來查找phpize 這個文件在哪裡。
lfly@linux-oj9e:~> sudo find / -name phpize
這裡我找到我的php就安裝在/php下。
好了,這裡我下載一個php-5.5.18.tar.gz這個源碼包。
下載好了以後用tar -zxvf 解壓。(只針對.tar.gz壓縮包)
lfly@linux-oj9e:~/temp> tar -zxvf php-5.5.18.tar.gz
解壓後得到一個php-5-5-18文件夾
然後cd 進去那個目錄裡面的ext 目錄:
lfly@linux-oj9e:~/temp> cd php-5.5.18/ext
用ls 命令列出文件後可以看到很多文件夾:
這些就是你要編譯的模塊的源碼目錄。這裡我假設要編譯的是mysql模塊,那們我們就cd 到mysql 這個目錄裡,如果你要編譯其它模塊,那麼就cd進對應那個模塊。
lfly@linux-oj9e:~/temp/php-5.5.18/ext/mysql> /php/bin/phpize
Cd 進去後我們調用上面提到的那個phpize腳本。
Phpize腳本是什麼?
這裡提及一下:
Phpize可以理解為偵察環境的作用。phpize工具會根據你已經安裝的php的配置情況生成對應的configure文件。
執行這個命令後可能會提示沒有安裝 autoconf這個程序,如果這樣你就要安裝好這個軟件再來運行這個命令。
我這裡是沒有問題的:
Phpize 運行沒有問題後就用 ./configure –with-php-config=/php/bin/php-config
這裡/php/bin/php-config要換成你的Php安裝目錄。比如是/usr/local/aaa那麼你就搭成/usr/local/aaa/bin/php-config
執行這步後如果沒有報錯就執行make 命令。
如果執行make 命令也沒有報錯,那麼接著執行make install 命令。
我這裡make install 發現報錯,因為普通用戶沒有權限把編譯好的模塊安裝到php的安裝目錄下。
此時可以用sudo執行make install 命令或者直接切換到root用戶下執行,執行時需要輸入你的密碼。
Make install安裝成功後還要干兩件事:
其一是: 在php.ini的配置文件裡加上一句:
extension=mysql.so
這裡假設是編譯mysql模塊,如果是其它就其它模塊名.
比如:
如果你不知道你剛編譯的模塊是什麼名稱,你可以到php的模塊目錄下查看下:
我這裡已經編譯安裝了4個模塊。
注意:轉載請注明出處:http://www.programfish.com/blog/?p=85
第二件事就是重啟下你的apache。(如果你安裝的是apache提供web服務的)