Sun Solaris 上的 Sun、iPlanet 和 Netscape 伺服器

本節包括了在 Sun Solaris 平台的 Sun Java System web Server、Sun ONE web Server、iPlanet 和 Netscape 下安裝 PHP 的說明和提示。

從 PHP 4.3.3 起,可以使用基於 NSAPI 模組 PHP 腳本來建立自訂目錄清單和錯誤頁面。更多與 Apache 相容的功能也可以使用。要瞭解如何在現用的的 web 伺服器中支援此功能,請閱讀關於子請求(subrequests)的注解

可以在下面的連結中瞭解更多關於在 Netscape Enterprise Server(NES)中設定 PHP 的訊息:http://benoit.noss.free.fr/php/install-php4.html

要在 Sun JSWS/Sun ONE WS/iPlanet/Netscape web 伺服器中編譯 PHP,請為 --with-nsapi=[DIR] 輸入合適的安裝目錄。預設的目錄通常是 /opt/netscape/suitespot/。還可以閱讀 /php-xxx-version/sapi/nsapi/nsapi-readme.txt

  1. http://www.sunfreeware.com/ 或其它下載站台安裝下面的軟體包:

    autoconf-2.13
    automake-1.4
    bison-1_25-sol26-sparc-local
    flex-2_5_4a-sol26-sparc-local
    gcc-2_95_2-sol26-sparc-local
    gzip-1.2.4-sol26-sparc-local
    m4-1_4-sol26-sparc-local
    make-3_76_1-sol26-sparc-local
    mysql-3.23.24-beta(若果想要 mysql 支援)
    perl-5_005_03-sol26-sparc-local
    tar-1.13 (GNU tar)

  2. 請確認 PATH 變量包括適當的目錄 PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin,並使用 export PATH 指令將其匯出為環境變量。

  3. gunzip php-x.x.x.tar.gz(若果使用 .gz 版本,否則前往 4)

  4. tar xvf php-x.x.x.tar

  5. 進入 PHP 解壓縮後的目錄:cd ../php-x.x.x

  6. 在下面的步驟中,請確認 Netscape 伺服器安裝在 /opt/netscape/suitespot/ 目錄中。否則,將下面指令中的該路徑修改為正確的路徑並運行:
    ./configure --with-mysql=/usr/local/mysql \
    --with-nsapi=/opt/netscape/suitespot/ \
    --enable-libgcc

  7. 運行 make,然後運行 make install

在執行了基礎的安裝並閱讀相應的 Readme 檔案後,還需要執行一些額外的配置步驟。

Sun/iPlanet/Netscape 的配置說明. 首先需要為 LD_LIBRARY_PATH 環境變量增加一些路徑,以便伺服器找到所需的共享庫。可以使用 web 伺服器的啟動腳本很好的完成這一工作。啟動腳本通常位於:/path/to/server/https-servername/start。或許需要編輯其配置檔,它位於:/path/to/server/https-servername/config/

  1. 增加下面一行到 mime.types(可以在管理伺服器中增加):
    type=magnus-internal/x-httpd-php exts=php

  2. 編輯 magnus.conf( 若伺服器 >= 6)或 obj.conf(若伺服器 < 6)並增加下述內容。shlib 的值根據系統的配置會有所不同。它可能類似於 /opt/netscape/suitespot/bin/libphp4.so。應該在 mime types init 後增加如下兩行內容:
    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/opt/netscape/suitespot/bin/libphp4.so"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_ini="/path/to/php.ini"]
    (PHP >= 4.3.3)php_ini 參數是可選的。但是若使用它,便可以將 php.ini 放到 web 伺服器的配置目錄中去。

  3. obj.conf 中配置預設物件(對於虛擬伺服器的類 [版本 6.0+] 是在 vserver.obj.conf 中):
    <Object name="default">
    .
    .
    .
    .#注意 下面一行增加在所有「ObjectType」之後,所有「AddLog」之前
    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    .
    .
    </Object>
    (PHP >= 4.3.3)作為附加的參數,可以在 php.ini 中增加一些特別的配置選項。例如可以設定 docroot="/path/to/docroot" 指向 php4_execute 被呼叫的上下文(context)。對於布爾 ini 鍵值,請使用 0/1 作為其值,而不是 "On"、"Off" 等(它們是無效的),例如,使用 zlib.output_compression=1,而不應使用 zlib.output_compression="On"

  4. 本步驟僅在需要配置一個由 PHP 腳本組成的目錄時由必要執行(類似於一個 cgi-bin 目錄):
    <Object name="x-httpd-php">
    ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
    Service fn=php4_execute [inikey=value inikey=value ...]
    </Object>
    之後,可以在管理伺服器中配置一個目錄,配置給它 x-httpd-php 風格(style)。這樣在該目錄中的所有檔案都會被當作 PHP 來執行。這樣就能很方便的將 PHP 檔案更名為 .html 以隱藏 PHP。

  5. 認證的設定:PHP 認證不能與其它任何類型的認證一起工作。所有認證被傳遞到 PHP 腳本。要為整個伺服器配置 PHP 認證,在預設物件中增加下面一行:
    <Object name="default">
    AuthTrans fn=php4_auth_trans
    .
    .
    .
    </Object>

  6. 要在單一目錄使用 PHP 認證,增加如下內容:
    <Object ppath="d:\path\to\authenticated\dir\*">
    AuthTrans fn=php4_auth_trans
    </Object>

注: PHP 使用的堆疊大小取決於 web 伺服器的配置。若果運行很大的 PHP 腳本時程式崩潰,推薦在 Admin Server(在「MAGNUS EDITOR」一節)中增大此項。

CGI 環境和對 php.ini 推薦的修改

當編寫 PHP 腳本時,應特別注意 Sun JSWS/Sun ONE WS/iPlanet/Netscape 是一個多執行緒 web 伺服器。因此,所有請求都運行在相同的程式空間(Web 伺服器自己的空間),該空間僅有一套環境變量。若果想獲得 CGI 變量,例如 PATH_INFOHTTP_HOST 等,使用原有的 PHP 3.x 的模式(getenv()),或使用類似的模式(註冊全局變量到環境變量, $_ENV),都是不可行的。只能獲得運行中的 web 伺服器的環境變量,而不能獲得任何有效的 CGI 變量!

注: 為什麼在環境中存在(無效的)CGI 變量?

答:這是因為從管理伺服器中啟動 web 伺服器程式時,運行了 web 伺服器的啟動腳本,它事實上是一個 CGI 腳本(管理伺服器中的一個 CGI 腳本!)。這便是為什麼啟動的 web 伺服器包括一些 CGI 變量。可以嘗試不從管理伺服器啟動 web 伺服器,用 root 會員登入使用指令行手動啟動它,會發現這些 CGI 形式的變量不復存在。

要在 PHP 4.x 中正確獲得 CGI 變量,僅需修改腳本使用超級全局變量 $_SERVER。若果老腳本中使用了 $HTTP_HOST 等變量,應該在 php.ini 中開啟 register_globals,並且要修改變量順序(注意:從中移除 "E",因為不需要這裡的環境變量):
variables_order = "GPCS"
register_globals = On

錯誤頁面及自造目錄清單的特別使用 (PHP >= 4.3.3)

可以使用 PHP 為 "404 Not Found" 或類似的錯誤代碼建立錯誤頁面。將下面幾行新增到 obj.conf 中以覆蓋預設的錯誤頁面:
Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
XXX 是 HTTP 錯誤代碼。請移除任何可能干擾 Error 設定的指令。若果想為所有可能存在的錯誤提供一個頁面,則將 code 參數移除。腳本可以通過 $_SERVER['ERROR_TYPE'] 獲得 HTTP 狀態代碼。

另一種可能是建立自造目錄清單。只要建立一個 PHP 腳本,來顯示目錄清單 並在 obj.conf 中為 type="magnus-internal/directory" 將相應的預設 Service 行置換為:
Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]
錯誤和目錄清單頁面中,原始的 URI 和翻譯的 URI 均被分別儲存在 $_SERVER['PATH_INFO']$_SERVER['PATH_TRANSLATED'] 變量中。

關於 nsapi_virtual() 和子請求的注意事項(PHP >= 4.3.3)

NSAPI 模組現在支援 nsapi_virtual() 函數(別名:virtual()),用來在 web 伺服器上建立子請求(subrequests)和在 web 頁面插入請求的結果。此函數使用了一些 NSAPI 中還沒有文件說明的函數。在 Unix 下,該模組自動尋找需要的函數,若它們存在則使用它們。若不存在,函數 nsapi_virtual() 被禁用。

注: 但是要注意,對 nsapi_virtual() 的支援是試驗性質的!