#沒有不會犯錯的開發者,PHP的錯誤回報功能將協助您確認和定位這些錯誤。可以PHP提供的這些詳細描述也可能被惡意攻擊者看到,這就不妙了。使大眾看不到報錯訊息,這一點很重要。做到這一點很容易,只要關閉display_errors,當然如果您希望得到出錯訊息,可以打開log_errors選項,並在error_log選項中設定出錯日誌檔案的保存路徑。
由於出錯報告的等級設定可以導致有些錯誤無法發現,您至少需要把error_reporting設為E_ALL(E_ALL | E_STRICT 是最高的設定, 提供向下相容的建議, 如不建議使用的提示).
所有的出錯報告等級可以在任何層級進行修改,所以您如果使用的是共享的主機,沒有權限對php.ini, httpd.conf, 或 .htaccess等設定檔進行變更時,您可以在程式中執行出錯報告層級設定語句:
CODE:
<?php ini_set('error_reporting', E_ALL | E_STRICT); ini_set('display_errors', 'Off'); ini_set('log_errors', 'On'); ini_set('error_log', '/usr/local/apache/logs/error_log'); ?>
#小提示
http://www.php.cn/ 對php.ini的選項配置作了詳盡的說明。
PHP也讓您透過 set_error_handler( ) 函數指定您自已的錯誤處理函數:
CODE:
<?php set_error_handler('my_error_handler'); ?>
上面程式指定了您自已的錯誤處理函數my_error_handler( );
以下是一個實際使用的範例:
CODE:
<?php function my_error_handler($number, $string, $file, $line, $context) { $error = "= == == == ==\nPHP ERROR\n= == == == ==\n"; $error .= "Number: [$number]\n"; $error .= "String: [$string]\n"; $error .= "File: [$file]\n"; $error .= "Line: [$line]\n"; $error .= "Context:\n" . print_r($context, TRUE) . "\n\n"; error_log($error, 3, '/usr/local/apache/logs/error_log'); } ?>
<?php set_error_handler('my_warning_handler', E_WARNING); ?>