本章包括了安裝 PHP 的常見(jiàn)問(wèn)題。PHP 可以用于幾乎任何操作系統(可能除了 OS X 之前的 MacOS 之外),以及幾乎任何 web 服務(wù)器。
要安裝 PHP,請按照 安裝與配置一章中的指示進(jìn)行。
PHP 是粘合劑。它將幾十種第三方的庫粘合到一起來(lái)創(chuàng )建很酷的 web 應用,并通過(guò)很直觀(guān)且易于學(xué)習的語(yǔ)言界面使其看上去好像一個(gè)整體。PHP 的靈活與強大依賴(lài)于底層平臺的穩定與耐用。起碼需要將一個(gè)可運作的操作系統,一個(gè)可運作的 web 服務(wù)器以及可運作的第三方庫粘合起來(lái)。其中任何一方不運作了,PHP 都需要有方法來(lái)識別出問(wèn)題并且快速解決。如果沒(méi)有完全獨立的執行線(xiàn)程,完全獨立的內存單元和穩定的空間對付每個(gè)請求,那底層架構就太復雜以至于不穩定因素更容易進(jìn)入到 PHP 系統中。
如果必須要用線(xiàn)程化的 MPM,看看 FastCGI 配置,使 PHP 運行于自己獨立的內存空間中。
最后需要指出,不使用線(xiàn)程化 MPM 的警告在 Windows 系統中沒(méi)那么強烈,因為 Windows 中的大多數庫都理應在多線(xiàn)程下安全運行。
UNIX 中默認在 /usr/local/lib目錄中,也就是 <install-path>/lib。很多人會(huì )在編譯時(shí)通過(guò) --with-config-file-path標記來(lái)改變路徑。例如可以將路徑設為:
--with-config-file-path=/etc
--with-config-file-scan-dir=PATH
Windows 中 php.ini 文件的默認路徑在 Windows 目錄下。如果使用的是 Apache 服務(wù)器,則會(huì )首先在 Apache 的安裝目錄中尋找 php.ini,例如 C:\Program Files\Apache Group\Apache。這樣同一臺機器上不同版本的 Apache 就可以有不同的 php.ini 文件。
參見(jiàn) 配置文件。
這可能意味著(zhù) PHP 發(fā)生了某類(lèi)錯誤而導致了 core dump。查看服務(wù)器的錯誤日志看看是不是這樣,再用一個(gè)小的測試例子試著(zhù)重現此問(wèn)題。如果你會(huì )用“gdb”的話(huà),那么在 bug 報告中提供回溯跟蹤很有助于幫開(kāi)發(fā)人員查明問(wèn)題。如果你用 Apache 的模塊方式使用 PHP,試著(zhù)這么做:
停止 httpd 進(jìn)程
gdb httpd
停止 httpd 進(jìn)程
> run -X -f /path/to/httpd.conf
然后在你的瀏覽器中訪(fǎng)問(wèn)導致錯誤的 URL
> run -X -f /path/to/httpd.conf
如果你遇到 core dump,gdb 此時(shí)就會(huì )通知你
輸入:bt
你應該在 bug 報告中包括回溯追蹤記錄。應該提交到 ? https://github.com/php/php-src/issues
如果你的腳本使用了正則表達式函數( ereg()等),應該確認在編譯 PHP 和 Apache 時(shí)使用了同一個(gè)正則表達式包。在 PHP 和 Apache 1.3.x 中應該自動(dòng)就是這樣。
假定你的 Apache 和 PHP 都是從 RPM 包中安裝的,你需要在 httpd.conf 文件中取消以下部分或所有行的注釋?zhuān)蛘甙阉鼈兲砑拥皆撐募校?
# Extra Modules AddModule mod_php.c AddModule mod_perl.c # Extra Modules LoadModule php_module modules/mod_php.so LoadModule php5_module modules/libphp5.so LoadModule perl_module modules/libperl.so
AddType application/x-httpd-php .php
兼容的。PHP 可以和 FrontPage extensions 一起工作,問(wèn)題是 FrontPage 補丁修改了幾個(gè) PHP 依賴(lài)的 Apache 構造。在 FrontPage 補丁安裝之后之后重新編譯 PHP(用“make clean ; make”)可以解決此問(wèn)題。
用瀏覽器中的“查看源文件”,你可能會(huì )發(fā)現能看到 PHP 腳本的源程序。這意味著(zhù) web 服務(wù)器沒(méi)有把腳本發(fā)送給 PHP 解釋。服務(wù)器配置在某處有問(wèn)題,請對照 PHP 安裝說(shuō)明仔細檢查服務(wù)器配置。
當服務(wù)器嘗試運行 PHP 時(shí)出了錯。要想看到有意義的錯誤信息,在命令行中轉到 PHP 可執行程序(Windows 中是 php.exe)所在目錄下并運行 php -i。如果 PHP 運行有任何問(wèn)題,那么會(huì )顯示相應的錯誤信息,這將給你下一步要做什么的線(xiàn)索。如果你得到滿(mǎn)屏幕 HTML 代碼( phpinfo()函數的輸出)的話(huà)說(shuō)明 PHP 本身工作正常,你的問(wèn)題可能和你的服務(wù)器配置有關(guān),要仔細檢查。
[mybox:user /src/php4] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress
這實(shí)際上和 PHP 沒(méi)有關(guān)系,而和 MySQL 的客戶(hù)端庫有關(guān)。有的需要 --with-zlib,有的不需要。這個(gè)問(wèn)題也包括在 MySQL 的 FAQ 中。
這個(gè)錯誤信息意味著(zhù) PHP 根本就不能產(chǎn)生任何輸出。要想看到有意義的錯誤信息,在命令行中轉到 PHP 可執行程序(Windows 中是 php.exe)所在目錄下并運行 php -i。如果 PHP 運行有任何問(wèn)題,那么會(huì )顯示相應的錯誤信息,這將給你下一步要做什么的線(xiàn)索。如果你得到滿(mǎn)屏幕 HTML 代碼( phpinfo()函數的輸出)的話(huà)說(shuō)明 PHP 本身工作正常。
一旦 PHP 在命令行中工作正常,試著(zhù)通過(guò)瀏覽器再次訪(fǎng)問(wèn)腳本。如果還失敗的話(huà)那可能是如下原因之一:
ISUR_<machinename>
無(wú)權訪(fǎng)問(wèn)的。
確認需要運行 PHP 腳本的任何用戶(hù)有權限運行 php.exe!IIS 使用了一個(gè)在安裝 IIS 時(shí)添加的匿名用戶(hù),這個(gè)用戶(hù)需要有訪(fǎng)問(wèn) php.exe的權限。同樣任何認證用戶(hù)也需要執行 php.exe的權限。在 IIS4 中你還需要告訴它 PHP 是一個(gè)腳本引擎。此外,你可能還需要閱讀 此常見(jiàn)問(wèn)題。
Security Alert! PHP CGI cannot be accessed directly.
.
必須將
cgi.force_redirect選項設為
0
。 默認值為
1
,因此要確認此選項沒(méi)有被注釋掉(用
;
)。和其它選項一樣,是在 php.ini 中設定的。
因為默認值是
1
,因此你必須百分之百確認使用了正確的 php.ini 文件。詳細信息請閱讀
此常見(jiàn)問(wèn)題。
要確認你的 php.ini 被 PHP 使用了,調用
phpinfo(),在接近開(kāi)頭的位置有一項叫做
Configuration File (php.ini)
。這里將告訴你 PHP 在哪里找到了 php.ini 并且是否使用了。如果只顯示一個(gè)目錄則 沒(méi)有使用任何 php.ini 文件,你應將你的 php.ini 文件放到該目錄中。如果 php.ini 包括在該路徑中則它已被應用了。
如果 php.ini 被使用了并且你是以模塊方式運行 PHP 的,確保在修改了 php.ini 之后重新啟動(dòng)你的 web server。
在 Windows NT,2000,XP 和 2003 下:
進(jìn)入控制面板并打開(kāi)“系統”圖標(開(kāi)始 -> 設置 -> 控制面板 -> 系統,Windows XP/2003 中是:開(kāi)始 -> 控制面板 -> 系統)
選擇“高級”標簽頁(yè)
點(diǎn)擊“環(huán)境變量”按鈕
在“系統變量”欄中
找到 Path 這一項(可能需要向下滾動(dòng)才能找到)
鼠標雙擊 Path 這一項
在最后加入你的 PHP 目錄,包括前面的“;”(例如:
;C:\php
)
點(diǎn)擊“確定”并重新啟動(dòng)電腦
在 Windows 98/Me 中需要編輯 autoexec.bat文件:
打開(kāi)記事本(開(kāi)始 -> 運行,然后輸入 notepad 并點(diǎn)確定)
打開(kāi) C:\autoexec.bat文件
找到這么一行:PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... 并在最后加上
;C:\php
保存文件并重新啟動(dòng)電腦
注意: 記住在上述修改之后重新啟動(dòng),以確保對 PATH的改變生效。
PHP 手冊過(guò)去提倡把文件拷貝到 Windows 系統目錄中去,這是因為該目錄( C:\Windows, C:\WINNT,等等)默認就在系統路徑中。但是把文件拷貝到 Windows 系統目錄中這一方式早已不被提倡,還可能造成問(wèn)題。
有幾種方法可以做到這一點(diǎn)。如果您使用的是 Apache, 請參閱 Apache 文檔,否則 您必須設置PHPRC環(huán)境變量。
如果到 PHP 文件的連接包含擴展名,一切都運行完美。本解答只針對到 PHP 文件的連接不包含擴展名時(shí),而希望通過(guò) content negotiation 來(lái)從不包含擴展名的 URL 來(lái)選擇 PHP 文件的情況。在此種情況下,將
AddType application/x-httpd-php .php
替換為:
# PHP 4 AddHandler php-script php AddType text/html php # PHP 5 AddHandler php5-script php AddType text/html php
php-script
。
不是,PHP 有可能處理任何請求方法,例如 CONNECT。適當的回應狀態(tài)可以用 header()發(fā)送。如果僅需要處理 GET 和 POST 方法,可以通過(guò)如下的 Apache 配置實(shí)現:
<LimitExcept GET POST> Deny from all </LimitExcept>