最近在開發過程中,我遇到了一個讓我十分頭疼的問題:在使用PHP編寫HTTP服務器過程中,出現了一系列報錯。
舉一個例子,當我使用Apache HTTP Server和PHP作為后臺,同時開啟了Gzip壓縮和腳本運行緩存時,隨即在Apache和PHP的錯誤日志中出現了如下報錯信息:
PHP Warning: Cannot modify header information - headers already sent by (output started at /path/to/file/script.php:10) in /path/to/file/script.php on line 12, referer: http://localhost/這種報錯常見于Web應用程序的開發中,因為HTTP請求和響應都是基于文本協議,HTTP頭部的格式和順序是非常嚴格的,如果在HTTP頭部輸出之后輸出了數據,就會導致錯誤。 而解決方法也非常簡單,只需要在輸出HTTP頭部之前輸出任何內容即可,例如:
header("Content-Type: text/plain"); echo "Hello, World!";在PHP中,可以使用ob_start()函數緩沖輸出,在所有輸出之前執行header()函數輸出HTTP頭部。
ob_start(); header("Content-Type: text/plain"); echo "Hello, World!"; ob_end_flush();還有一些報錯信息比較奇怪,例如:
PHP Fatal error: Call to undefined function curl_init() in /path/to/file/script.php on line 9, referer: http://localhost/這種錯誤一般是由于PHP沒有安裝相關的擴展所導致,比如上述錯誤是由于沒有安裝curl擴展導致的,只需要在服務器上安裝即可。 遇到這種錯誤可以通過phpinfo()函數查看PHP的配置信息,里面包含了所有已經安裝的擴展列表。還有一些錯誤常常出現于文件上傳和下載等操作中,例如:
PHP Warning: POST Content-Length of 8968294 bytes exceeds the limit of 8388608 bytes in Unknown on line 0, referer: http://localhost/這種錯誤是由于POST請求提交的數據過大,超過了服務器限制的最大值,可以通過在php.ini或.htaccess文件中修改下列參數來解決:
post_max_size = 10M upload_max_filesize = 10M總之,在使用PHP編寫HTTP服務器過程中,經常會遇到各種各樣的報錯,但是只要耐心查看錯誤日志,并根據實際情況解決問題,就可以讓你的Web應用程序更加穩定和可靠。