在PHP5.4.4中启用严格的错误报告
我在本地主机上工作。我有PHP5.4.4。我刚刚在php.net上读到,从5.4版开始,E_STRICT就成为E_ALL的一部分 因此,我在php.ini文件中看到了这一点在PHP5.4.4中启用严格的错误报告,php,session,Php,Session,我在本地主机上工作。我有PHP5.4.4。我刚刚在php.net上读到,从5.4版开始,E_STRICT就成为E_ALL的一部分 因此,我在php.ini文件中看到了这一点 error_reporting = E_ALL 因此,我认为这是最严格的错误报告模式。所以,我故意犯了一个错误,看看这是否有效 我将$\u会话密钥设置为以代码中的数值开头。未报告任何错误。程序运行不正确 我还设置了:display\u errors=On 因此,我假设在运行脚本时,任何错误都将在我的浏览器中报告。但是,什么
error_reporting = E_ALL
因此,我认为这是最严格的错误报告模式。所以,我故意犯了一个错误,看看这是否有效
我将$\u会话密钥设置为以代码中的数值开头。未报告任何错误。程序运行不正确
我还设置了:display\u errors=On
因此,我假设在运行脚本时,任何错误都将在我的浏览器中报告。但是,什么也没发生
其中一位同事Stackoverflow.com的成员在检查我的代码时发现了错误,因为他的浏览器报告了错误。但是,在我的PHP中什么也没有发生。您可能已经将PHP配置为不向屏幕输出错误,而是将错误记录到日志文件中 也就是说,您已经设置为
false
,并设置为true
这是生产网站的常见配置,不会将错误回显到屏幕(这可能会向攻击者显示重要信息),而是将其写入web服务器日志。我建议您安装一个全局错误处理程序,并在那里进行一些格式化,以获得良好的结果:
set_error_handler( 'error_handler' );
function error_handler( $errno, $errmsg, $filename, $linenum, $vars )
{
// error was suppressed with the @-operator
if ( 0 === error_reporting() )
return false;
printf( "Unrecoverable error in `%s' line %s: %s\n\n", $filename, $linenum, $errmsg );
exit( $errno );
}
这个问题有点难以追踪。如果要查看带有显示错误的实际错误消息,必须记住以下几点: 只有当有一些显示器可以输出时,它才能工作 通常,当脚本已经完成并且不再有与之关联的输出时,会话会保存在磁盘上 因此,您无法使用该设置使以下通知可见: 注意:未知:跳过第0行未知中的数字键0 第0行的in Unknown表示这不是正常的PHP代码。就在PHP引擎关闭并保存会话数据时 因此,除非:
- 您可以跟踪错误日志或使用CLI环境,该环境在关机阶段(STDOUT)仍有输出
- 您可以使用
在脚本仍在运行时编写会话:session\u write\u close()
希望这有助于并完全澄清问题。无论解决了什么问题(您本来应该使用数组作为值,但那是另一回事),给出的参数都是错误的。基于错误的信息,你在测试错误的东西,然后问错误的问题;)不管你在互联网上读到什么,都不要相信它。问题是,当我切换到以字母表开头的会话键时,我的问题就解决了。其次,我想要报告的错误没有显示为
error\u reporting(-1)代码>也是。@Rohittripati:我现在可以完全重现这个问题,并为您添加一个解释。这应该给你一个解释。会话键不能只是数字(事实上它们可以,我已经看到了,但当前的PHP似乎阻止了它),但它们仍然可以以数字开头,后面是一些非数字字符。是我的错,我不知道如何重现它。