- 在
Linux下編譯安裝php是常有的事情,當(dāng)然,目前為止個人依然推薦二進制安裝,rpm或者deb安裝等等。經(jīng)常會出現(xiàn)我們需要ext中的一些功能,這
些功能在編譯過程中并沒有加載進來,一個常用的辦法就是使用phpize這個php的工具來編譯擴展模塊(結(jié)果會生成一個so文件,比如
mbstring.so, tidy.so,功能類似于windows下的dll文件),然后再在配置文件中進行適當(dāng)設(shè)定就OK了。
- 整個過程和動態(tài)編譯apache的模塊非常相似,只不過apache使用的程序叫做apxs,而php里叫做phpize。
- 下面的報錯是一個典型的例子,在提醒你需要動態(tài)加載一個模塊了。
Fatal error: Call to undefined function curl_init() in /var/www/boss.yfang.cn/htdocs/yahooboss.class.php on line 48
# 稍微查一下就知道這是php的curl模塊中的一個函數(shù) 準(zhǔn)備工作- 首先,我們需要php的源代碼(其實我們只需要特定的擴展模塊這部分代碼)。假設(shè)我們吧源代碼放在/usr/local/src/php-version/ 這里
- 同時,我們需要知道已經(jīng)安裝好的php的安裝位置,假設(shè)在/usr/local/php/目錄下
- 我們還需要了解php.ini 這個配置文件的位置,后面我們需要修改這個文件
實際操作- 1. 進入php源程序目錄中的ext目錄中,這里存放著各個擴展模塊的源代碼
cd /usr/local/src/php-version/ext /usr/local/php/bin/phpize # 有可能你用其他安裝方式已經(jīng)把phpize加到了PATH中,如果是這樣你可以直接執(zhí)行 "phpize" 就好了# 這時已經(jīng)生成了一些配置信息,接下來可以開始configure了 - 4. 像編譯其他典型程序一樣./configure
./configure --with-php-config=/usr/local/php/bin/php-config
# 這里如果直接執(zhí)行./configure很有可能會報錯# "configure: error: Cannot find php-config. Please use --with-php-config=PATH",# 你的配置文件位置可能不在這個目錄,這個文件通常是在php安裝目錄的bin目錄下的一個文件名叫做php-config或者php-config5的文件,實在找不到就find一下咯 - 在這一步中如果出錯了,通常是因為你的系統(tǒng)缺少相關(guān)的庫,按照提示去安裝吧
- 比
如,如果沒有裝libtidy的話,會在這一步收到"configure: error: Cannot find
libtidy"這樣的提示,安裝相應(yīng)的模塊即可,如果安裝模塊的目標(biāo)位置不是默認(rèn)的位置,可能需要添加部分參數(shù),比如 ./configure
--with-php-config=/usr/local/php/bin/php-config
--with-tidy=/usr/local/tidy ,具體參考Linux下安裝Tidy(zz)
- 5. 編譯安裝
make && make install
# 最后結(jié)果會輸出生成的so位置,比如 "Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/" - 6. 編輯php.ini
- 默認(rèn)的extension_dir一般為'./',我們需要做如下設(shè)定,才能找到正確的位置: extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
- 然后是激活模塊,很簡單,只需要在后面添加 extension=tidy.so 就好了,有幾個模塊就添加幾個
- 如果在Windows下,很有可能這個模塊已經(jīng)在配置文件里面寫了(只不過被注釋掉了),那么,你只要把前面的分號去掉即可
- 一般的默認(rèn)配置文件都是dll文件,所以這個在linux下不適用,自己添加一句就是了
- 7. 檢查新的php配置是否能夠正常工作
/usr/local/php/bin/php -v# 執(zhí)行這個命令時,php會去檢查配置文件是否正確,如果有配置錯誤,這里會報錯,可以根據(jù)錯誤信息去排查# 下面是一個典型的錯誤輸出,報告找不到配置文件中設(shè)定的so,原因就是沒有更改extension_dir
PHP Warning: PHP Startup: Unable to load dynamic library './curl.so' - ./curl.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library './tidy.so' - ./tidy.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP 5.2.6 (cli) (built: Aug 8 2008 16:08:19)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies - 8. 重啟apache,使你的php配置更新。
- 9. 這里說一個檢查模塊是否OK的方法,phpinfo頁面(<?php phpinfo(); ?>)打開,如果多了你剛剛添加的模塊,基本上就證明OK了。
Linux下獨立添加PHP擴展模塊服務(wù)器運行一段時間后,可能突然會需求添加某個擴展,如curl、pdo、xmlrpc等,這就需要在不重新編譯PHP的情況下獨立添加擴展。 下面以安裝curl為例,介紹具體安裝步驟。 1.安裝crul wget http://curl.haxx.se/download/curl-7.19.6.tar.gz tar -zxvf curl-7.19.6.tar.gz cd curl-7.19.6 ./configure --prefix=/usr/local/curl make make install 2.編譯生成擴展進入php源程序目錄中的ext目錄中,這里存放著各個擴展模塊的源代碼,選擇你需要的模塊,比如curl模塊: cd curl 執(zhí)行phpize生成編譯文件,phpize在PHP安裝目錄的bin目錄下 /usr/local/php5/bin/phpize 運
行時,可能會報錯:Cannot find autoconf. Please check your autoconf installation
and the $PHP_AUTOCONF environment variable is set correctly and then
rerun this script.“,需要安裝autoconf: yum install autoconf(RedHat或者CentOS)、apt-get install autoconf(Ubuntu Linux) 生成配置文件,并編譯生成模塊: /usr/local/php5/bin/phpize ./configure --with-curl=/usr/local/curl --with-php-config=/usr/local/php5/bin/php-config make make install 這樣,curl.so就被復(fù)制到PHP對應(yīng)目錄(如:/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/) 3.修改配置在php.ini里,設(shè)置擴展目錄: extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/" 并添加擴展模塊引用: extension = curl.so 4.檢查并重啟Apache /usr/local/php/bin/php -v 執(zhí)行這個命令時,php會去檢查配置文件是否正確,如果有配置錯誤,這里會報錯,可以根據(jù)錯誤信息去排查。 |