用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 配置错误日志文件位置,方便在浏览器不显示错误时可以将错误记录到文件。当log_errors为On且配置的日志文件没有权限时,错误信息不写入日志文件而是直接输出到浏览器 (这一点在“不想显示错误信息”时要特别注意)
display_errors = On On时如果有相应级别的错误,将错误显示到浏览器上。注意,受到error_reporting的限制,如果error_reporting为0(即不记录任何错误)时,则不显示任何错误,如果error_reporting为排除了某些形式时,则不显示某些形式的错误。对于“想要显示错误信息”时,log_errors和error_log不配置也行,直接配置display_errors为On
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。