在 Unix 平台下安裝 PHP 有幾種方法:使用配置和編譯過程,或是使用各種預編譯的包。本文主要針對配置和編譯
PHP 的過程。很多 Unix 類系統都有包安裝系統,可以用它來設定一個有著標準配置的
PHP。但是若需要與標準配置不同的功能(例如一個安全伺服器,或是不同的資料庫驅動增加模組),可能需要編譯
PHP 和/或 web 伺服器。若果不熟悉編譯軟體,可以考慮搜尋一下是否有人已經編譯了包括所需要功能的預編譯包。
本節內含在 Unix 平台的 Apache 下安裝 PHP 的說明和提示。我們在另外的頁面也有
Apache 2 的安裝和說明。
可以從核心配置選項清單以及位於手冊對應部分的特定增加配置選項中選取參數並在安裝步驟第
10 步將它們新增到 configure
指令中。版本號在這裡被省略了以保證此說明的正確性。需要將這裡的「xxx」置換為自己使用的檔案的正確值。
例子 4-1.
PHP 的 Apache 共享模組版本安裝說明
1. gunzip apache_xxx.tar.gz
2. tar -xvf apache_xxx.tar
3. gunzip php-xxx.tar.gz
4. tar -xvf php-xxx.tar
5. cd apache_xxx
6. ./configure --prefix=/www --enable-module=so
7. make
8. make install
9. cd ../php-xxx
10. 現在,配置 PHP。這是定制 PHP 的不同選項的時候,例如要加載哪些增加庫。使用
./configure --help
來列出可用的選項。在下面的示例中只是簡單地配置 Apache 1 和 MySQL 支援。
會員的 apxs 的路徑可能和此示例中的不同。
./configure --with-mysql --with-apxs=/www/bin/apxs
11. make
12. make install
若果在安裝之後決定修改配置選項,那麼只需重複以上最後三步。只須重新啟動
Apache 就可以使新模組生效。不需要重新編譯 Apache。注意除非特別指出,
「make install」總是會安裝 PEAR,各種 PHP 工具例如 phpize,PHP CLI 以及其它。
13. 建立 php.ini 檔案。
cp php.ini-dist /usr/local/lib/php.ini
可以編輯 php.ini 來設定 PHP 選項。若果想把 php.ini 放在其它目錄,在第
10 步加上以下選項:
--with-config-file-path=/path
若果選取了 php.ini-recommended,確保閱讀一下其中的變更說明,因為這些會
影響到 PHP 的行為。
14. 編輯 httpd.conf 來加載 PHP 模組。在 LoadModule 語句右邊的路徑必須指向系統中
PHP 模組所在的路徑。上面的 make install 步驟可能已經增加了,但還是檢查確認一下。
對 PHP 4:
LoadModule php4_module libexec/libphp4.so
對 PHP 5:
LoadModule php5_module libexec/libphp5.so
15. 在 httpd.conf 中加入 AddModule 部分,在 ClearModuleList 下面的某處,加上這一句:
對 PHP 4:
AddModule mod_php4.c
對 PHP 5:
AddModule mod_php5.c
16. 告訴 Apache 將哪些副檔名作為 PHP 解析。例如,讓 Apache 把 .php 副檔名的檔案解析為
PHP。可以將任何副檔名的檔案解析為 PHP,只要在以下語句中加入並用空格分開。這裡以
增加一個 .phtml 來示例。
AddType application/x-httpd-php .php .phtml
為了將 .phps 作為 PHP 的源檔案進行語法高亮顯示,還可以加上:
AddType application/x-httpd-php-source .phps
17. 用通常的過程啟動 Apache(必須完全停止 Apache 再重新啟動,而不是用 HUP 或是
USR1 信號使 Apache 重新加載)。 |
|
也可以將 PHP 作為靜態物件來安裝:
例子 4-2.
PHP 的 Apache 靜態模組版本安裝說明
1. gunzip -c apache_1.3.x.tar.gz | tar xf -
2. cd apache_1.3.x
3. ./configure
4. cd ..
5. gunzip -c php-4.x.y.tar.gz | tar xf -
6. cd php-4.x.y
7. ./configure --with-mysql --with-apache=../apache_1.3.x
8. make
9. make install
10. cd ../apache_1.3.x
11. ./configure --prefix=/www --activate-module=src/modules/php4/libphp4.a
(上面一行是正確的!是的,我們知道 libphp4.a 在目前不存在。它是不應該存在的,
它將被建立。)
12. make
(現在應該有一個 httpd 二進位檔案,可以將它複製到 Apache bin 目錄。若果這是
第一次安裝,還要「make install」。)
13. cd ../php-4.x.y
14. cp php.ini-dist /usr/local/lib/php.ini
15. 可以編輯 /usr/local/lib/php.ini 檔案以設定 PHP 選項。編輯 httpd.conf 或
srm.conf 檔案,增加:
AddType application/x-httpd-php .php |
|
注:
在 PHP 5 中,把 php-4 換成
php-5,把 php4
換成 php5。
根據 Unix 系統和 Apache 安裝方法的不同,有很多方法停止和重啟動
Apache。以下是一些不同的 Apache/UNIX 下重啟動 Apache 的典型指令。需要把
/path/to/ 置換成自己系統上的確切路徑。
例子 4-3. 重啟動 Apache 的示例指令 1. 在一些 Linux 和 SysV 的變種下:
/etc/rc.d/init.d/httpd restart
2. 使用 apachectl 腳本:
/path/to/apachectl stop
/path/to/apachectl start
3. httpdctl 和 httpsdctl(使用了 OpenSSL),類似 apachectl:
/path/to/httpsdctl stop
/path/to/httpsdctl start
4. 使用了 mod_ssl,或其他 SSL 伺服器,可能需要手動重啟動:
/path/to/apachectl stop
/path/to/apachectl startssl |
|
apachectl 和 http(s)dctl 程式所在的路徑在不同系統中通常不一樣。若果系統中有
locate 或是 whereis 或是
which 指令,那麼可以說明找到這些控制程式。
編譯 PHP 和 Apache 的不同例子還有:
此配置將建立在 Apache 的 httpd.conf 檔案中用 LoadModule
加載的 libphp4.so 共享庫。而 PostgreSQL
支援將內嵌到 libphp4.so 庫中。
此配置將建立 Apache 的 libphp4.so
共享庫,並且還建立 pgsql.so 共享庫,可以在
php.ini 檔案中用 extension 指令加載,或是在 PHP 腳本中用
dl() 函數明確地加載。
此配置將建立 libmodphp4.a 庫,mod_php4.c
和一些關聯的檔案並且複製到 Apache 源程式目錄中的 src/modules/php4
目錄下。然後用 --activate-module=src/modules/php4/libphp4.a
編譯 Apache,Apache 編譯系統會建立 libphp4.a
並且將其靜態地連線到 httpd 程式中。(在 PHP 5 中把
php4 置換成 php5。)PostgreSQL
支援也直接內含在這個 httpd
程式中了,因此最終結果是單一的一個內含了所有 Apache 和 PHP
支援的 httpd 可執行檔案。
此配置和上面一樣--除了沒有在最後的 httpd
可執行檔案中內含 PostgreSQL 的支援以及建立了一個
pgsql.so 共享庫以外。該共享庫可以在
php.ini 檔案中或是用 dl() 函數加載。
當選取不同的方法編譯 PHP 時,需要考慮每種方法的優勢和缺點。用共享物件模式編譯
PHP 意味著可以單獨編譯 Apache,並且不用在增加或修改了 PHP
的時候重新編譯所有程式。用內建方法編譯 PHP(靜態模式)意味著 PHP
可以加載和運行得更快。更多訊息見 Apache 的
DSO 支援頁面。
注:
Apache 預設的 httpd.conf 檔案中目前內含類似如下的內容:
除非把它修改成「Group nogroup」或是其它類似的(「Group
daemon」也很通用),PHP 將不能開啟檔案。
注:
確認在使用 --with-apxs=/path/to/apxs
時指向 Apache 安裝後的目錄中的 apxs。絕對不能用 Apache 源程式中的
apxs 而要用安裝後的 apxs。