用PHP开发程序时,如果服务器出现500的时候,如果无法知道究竟是什么原因,就无法进行调试。
要让PHP显示错误信息,可以从PHP配置文件 (php.ini)或PHP程序文件入手,另外,如果与IIS整合的时候,还必须考虑web.config文件。
1.如果是与IIS整合的方式,则需要修改web.config文件,对<system.webServer>项添加<httpErros>条目:
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"></httpErrors>
</system.webServer>
2.php.ini涉及的修改为:
error_reporting = E_ALL 设置错误记录的级别,E_ALL为报告所有 PHP 错误,通常在调试错误的时候设置为此。非调试时一般为E_ALL加排除形式。注意修改完后需要重启APACHE或IIS。
其它常见的值为:E_WARNING,E_NOTICE,E_DEPRECATED,这些通常作为排除形式,在非调试情况下与E_ALL搭配使用,比如:
E_ALL ^ E_DEPRECATED : 报告所有错误但不报告过期(或即将过期)的提示,通常用于旧程序上使用了即将过期方法产生错误时,比如使用了mysql_connect导致过期错误500.
log_errors = On On开启设置错误日志,将相应级别的错误记录到文件,与error_log项相搭配使用。
error_log = c:\phperror.log 配置错误日志文件位置,方便在浏览器不显示错误时可以将错误记录到文件。
display_errors = On 如果有相应级别的错误,将错误显示到浏览器上。注意,受到error_reporting的限制,如果error_reporting为0(即不记录任何错误)时,则不显示任何错误,如果error_reporting为排除了某些形式时,则不显示某些形式的错误。
3. PHP程序文件涉及的修改为:
程序文件中的修改项与PHP.INI文件大概一致,优化级高于PHP.INI。相应条项如:
error_reporting(E_ALL);
ini_set('log_errors','On');
ini_set('error_log','./log.txt');
ini_set('display_errors','On');
对于不想修改PHP.INI然后重启APACHE或IIS的情况下,可以使用这种方式,如果不行,再修改PHP.INI。
注意点:
当要进行“不显示PHP错误信息”时,display_errors除了受error_reporting的限制,还受log_errors及error_log限制,如果log_erros为On并且error_log有设置且有权限,才不会显示错误信息,如果文件没有权限(不能写入),则即使设置display_errors为Off,仍然会输出错误。