章 52. 安裝常見問題本章內含了安裝 PHP 的常見問題。PHP 可以用於幾乎任何動作系統(可能除了 OS X 之前的 MacOS 之外),以及幾乎任何 web 伺服器。 要安裝 PHP,請按照發行包中 INSTALL 檔案的說明進行。Windows 會員同樣還要閱讀 install.txt 檔案。對於 Windows 會員還有一些有用的提示在 Windows 系統下的安裝一章。
PHP 是粘合劑。它將幾十種第三方的庫粘合到一起來建立很酷的 web 套用,並通過很直觀且易於學習的語系介面使其看上去好像一個整體。PHP 的靈活與強大依賴於底層平台的穩定與耐用。起碼需要將一個可運作的動作系統,一個可運作的 web 伺服器以及可運作的第三方庫粘合起來。其中任何一方不運作了,PHP 都需要有方法來識別出問題並且快速解決。若果沒有完全獨立的執行執行緒,完全獨立的記憶體單元和穩定的空間對付每個請求,那底層架構就太複雜以至於不穩定因素更容易進入到 PHP 系統中。 若果必須要用執行緒化的 MPM,看看 FastCGI 配置,使 PHP 運行於自己獨立的記憶體空間中。 最後需要指出,不使用執行緒化 MPM 的警示在 Windows 系統中沒那麼強烈,因為 Windows 中的大多數庫都理應在多執行緒下安全運行。 UNIX 中預設在 /usr/local/lib 目錄中,也就是 <install-path>/lib。很多人會在編譯時通過 --with-config-file-path 旗標來改變路徑。例如可以將路徑設為:
Windows 中 php.ini 檔案的預設路徑在 Windows 目錄下。若果使用的是 Apache 伺服器,則會首先在 Apache 的安裝目錄中尋找 php.ini,例如 C:\Program Files\Apache Group\Apache。這樣同一台機器上不同版本的 Apache 就可以有不同的 php.ini 檔案。 參見配置檔。 這可能意味著 PHP 發生了某類錯誤而導致了 core dump。檢視伺服器的錯誤日誌看看是不是這樣,再用一個小的測試例子試著重現此問題。若果你會用「gdb」的話,那麼在 bug 報告中提供回溯追蹤很有助於幫開發人員查明問題。若果你用 Apache 的模組模式使用 PHP,試著這麼做:
若果你的腳本使用了正則表達式函數(ereg() 等),應該確認在編譯 PHP 和 Apache 時使用了同一個正則表達式包。在 PHP 和 Apache 1.3.x 中應該自動就是這樣。 假定你的 Apache 和 PHP 都是從 RPM 包中安裝的,你需要在 httpd.conf 檔案中取消以下部分或所有行的注解,或是把它們新增到該檔案中:
由於 PHP 3 構造的原因,不容易編譯出一個完全靈活的 PHP RPM 包來。這個問題在 PHP 4 中解決了。對於 PHP 3 來說,我們目前建議你用 PHP 發行包中 INSTALL.REDHAT 檔案中所描述的機制。若果你堅持要用 PHP 3 的 RPM 版本,請接著往下看。 為了簡化安裝以及由於 RPMS 使用了 /usr/ 而不是標準的 /usr/local/ 目錄來存放檔案,製作 RPM 包的人設定 RPMS 不安裝任何資料庫支援。你需要告訴 RPM 說明檔案,你想要支援哪個資料庫以及你的資料庫伺服器最高層路徑。 下面的例子解說了如何在用模組安裝下的 Apache 中加入流行的 MySQL 資料庫伺服器支援的過程。 當然這些訊息可以調整用於任何 PHP 支援的資料庫伺服器。本例中我們也假定你從 RPMS 中完整安裝了 MySQL 和 Apache。
6. Unix:我給 Apache 加上了 FrontPage extensions 修改更新,結果 PHP 突然不工作了。PHP 和 Apache FrontPage extensions 相容嗎? 相容的。PHP 可以和 FrontPage extensions 一起工作,問題是 FrontPage 修改更新修改了幾個 PHP 依賴的 Apache 構造。在 FrontPage 修改更新安裝之後之後重新編譯 PHP(用「make clean ; make」)可以解決此問題。 用瀏覽器中的「檢視源檔案」,你可能會發現能看到 PHP 腳本的源程式。這意味著 web 伺服器沒有把腳本傳送給 PHP 解釋。伺服器配置在某處有問題,請對照 PHP 安裝說明仔細檢查伺服器配置。 當伺服器嘗試運行 PHP 時出了錯。要想看到有意義的錯誤訊息,在指令行中轉到 PHP 可執行程式(Windows 中是 php.exe)所在目錄下並運行 php -i。若果 PHP 運行有任何問題,那麼會顯示相應的錯誤訊息,這將給你下一步要做什麼的線索。若果你得到滿螢幕 HTML 代碼(phpinfo() 函數的輸出)的話說明 PHP 本身工作標準,你的問題可能和你的伺服器配置有關,要仔細檢查。 9. 某些動作系統:我已經在不出錯的情況下安裝了 PHP,但當我試著啟動 Apache 時得到了一個未定義符號錯誤:
這實際上和 PHP 沒有關係,而和 MySQL 的用戶端庫有關。有的需要 --with-zlib,有的不需要。這個問題也內含在 MySQL 的 FAQ 中。 10. Windows:我已經安裝了 PHP,但當我試著通過瀏覽器訪問 PHP 腳本時,得到如下錯誤:
這個錯誤訊息意味著 PHP 根本就不能產生任何輸出。要想看到有意義的錯誤訊息,在指令行中轉到 PHP 可執行程式(Windows 中是 php.exe)所在目錄下並運行 php -i。若果 PHP 運行有任何問題,那麼會顯示相應的錯誤訊息,這將給你下一步要做什麼的線索。若果你得到滿螢幕 HTML 代碼(phpinfo() 函數的輸出)的話說明 PHP 本身工作標準。 一旦 PHP 在指令行中工作標準,試著通過瀏覽器再次訪問腳本。若果還失敗的話那可能是如下原因之一:
確認需要運行 PHP 腳本的任何會員有權限運行 php.exe!IIS 使用了一個在安裝 IIS 時增加的匿名會員,這個會員需要有訪問 php.exe 的權限。同樣任何認證會員也需要執行 php.exe 的權限。在 IIS4 中你還需要告訴它 PHP 是一個腳本引擎。此外,你可能還需要閱讀此常見問題。 12. 當在 IIS,PWS,OmniHTTPD 或是 Xitami 中以 CGI 模式運行 PHP 時,出現如下錯誤:Security Alert! PHP CGI cannot be accessed directly.. 必須將 cgi.force_redirect 選項設為 0。 預設值為 1,因此要確認此選項沒有被注解掉(用 ;)。和其它選項一樣,是在 php.ini 中設定的。 因為預設值是 1,因此你必須百分之百確認使用了正確的 php.ini 檔案。詳細訊息請閱讀此常見問題。 要確認你的 php.ini 被 PHP 使用了,呼叫 phpinfo(),在接近開頭的位置有一項叫做 Configuration File (php.ini)。這裡將告訴你 PHP 在哪裡找到了 php.ini 並且是否使用了。若果只顯示一個目錄則 沒有使用任何 php.ini 檔案,你應將你的 php.ini 檔案放到該目錄中。若果 php.ini 內含在該路徑中則它已被套用了。 若果 php.ini 被使用了並且你是以模組模式運行 PHP 的,確保在修改了 php.ini 之後重新啟動你的 web server。 在 Windows NT,2000,XP 和 2003 下:
在 Windows 98/Me 中需要編輯 autoexec.bat 檔案:
PHP 手冊過去提倡把檔案複製到 Windows 系統目錄中去,這是因為該目錄(C:\Windows,C:\WINNT,等等)預設就在系統路徑中。但是把檔案複製到 Windows 系統目錄中這一模式早已不被提倡,還可能造成問題。 有幾種方法。若果使用 Apache,閱讀專門的安裝指示(Apache 1,Apache 2),否則就必須設定 PHPRC 環境變量: 在 Windows NT,2000,XP 和 2003 種:
在 Windows 98/Me 中需要編輯 autoexec.bat 檔案:
若果到 PHP 檔案的連線包括副檔名,一切都運行完美。本解答只針對到 PHP 檔案的連線不包括副檔名時,而希望通過 content negotiation 來永遠不包括副檔名的 URL 來選取 PHP 檔案的情況。在此種情況下,將 AddType application/x-httpd-php .php 置換為:
不是,PHP 有可能處理任何請求方法,例如 CONNECT。適當的回應狀態可以用 header() 傳送。若果僅需要處理 GET 和 POST 方法,可以通過如下的 Apache 配置實現:
| |||||||||||||||||