章 4. Unix 系統下的安裝

本節將指導如何在 Unix 系統下安裝和配置 PHP。在開始安裝之前,請務必研究自己使用的系統和 web 伺服器的關聯章節。

安裝前需要考慮的事項一節提到,在本節主要以 web 為中心介紹 PHP 的設定。不過本節也會覆蓋一些 PHP 指令行用法的設定方法。

在 Unix 平台下安裝 PHP 有幾種方法:使用配置和編譯過程,或是使用各種預編譯的包。本文主要針對配置和編譯 PHP 的過程。很多 Unix 類系統都有包安裝系統,可以用它來設定一個有著標準配置的 PHP。但是若需要與標準配置不同的功能(例如一個安全伺服器,或是不同的資料庫驅動增加模組),可能需要編譯 PHP 和/或 web 伺服器。若果不熟悉編譯軟體,可以考慮搜尋一下是否有人已經編譯了包括所需要功能的預編譯包。

編譯所需的知識和軟體:

  • 基礎的 Unix 技能(有能力動作「make」和一種 C 語系編譯器)

  • 一個 ANSI C 語系編譯器

  • flex:版本 2.5.4

  • bison:版本 1.28(推薦)、1.35 或 1.75

  • 一個 web 伺服器

  • 模組特別需要的元件(例如 gd、pdf 庫等)

PHP 起始的配置和安裝過程被 configure 腳本中一系列指令行選項控制。可以通過 ./configure --help 指令瞭解 PHP 所有可用的編譯選項及簡短解釋。本手冊是分開對這些選項編寫文件的。可在附錄中找到核心配置選項,而增加模組特定的配置選項分別在其函數參考頁面中描述。

配置好 PHP 後,便可以開始編譯模組和/或可執行檔案。make 指令用來做這一工作。若果該指令執行失敗而找不到原因,請參考安裝問題一節。

Unix 系統下的 Apache 1.3.x

本節內含在 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 的不同例子還有:

./configure --with-apxs --with-pgsql

此配置將建立在 Apache 的 httpd.conf 檔案中用 LoadModule 加載的 libphp4.so 共享庫。而 PostgreSQL 支援將內嵌到 libphp4.so 庫中。

./configure --with-apxs --with-pgsql=shared

此配置將建立 Apache 的 libphp4.so 共享庫,並且還建立 pgsql.so 共享庫,可以在 php.ini 檔案中用 extension 指令加載,或是在 PHP 腳本中用 dl() 函數明確地加載。

./configure --with-apache=/path/to/apache_source --with-pgsql

此配置將建立 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 可執行檔案。

./configure --with-apache=/path/to/apache_source --with-pgsql=shared

此配置和上面一樣--除了沒有在最後的 httpd 可執行檔案中內含 PostgreSQL 的支援以及建立了一個 pgsql.so 共享庫以外。該共享庫可以在 php.ini 檔案中或是用 dl() 函數加載。

當選取不同的方法編譯 PHP 時,需要考慮每種方法的優勢和缺點。用共享物件模式編譯 PHP 意味著可以單獨編譯 Apache,並且不用在增加或修改了 PHP 的時候重新編譯所有程式。用內建方法編譯 PHP(靜態模式)意味著 PHP 可以加載和運行得更快。更多訊息見 Apache 的 DSO 支援頁面

注: Apache 預設的 httpd.conf 檔案中目前內含類似如下的內容:

User nobody
Group "#-1"

除非把它修改成「Group nogroup」或是其它類似的(「Group daemon」也很通用),PHP 將不能開啟檔案。

注: 確認在使用 --with-apxs=/path/to/apxs 時指向 Apache 安裝後的目錄中的 apxs。絕對不能用 Apache 源程式中的 apxs 而要用安裝後的 apxs。