关于错误处理:在PHP 5.4中禁用严格标准

Disabling Strict Standards in PHP 5.4

我目前正在php 5.4上运行一个站点,在此之前我在5.3.8上运行了我的站点。 不幸的是,php 5.4结合了E_ALLE_STRICT,这意味着我以前对error_reporting的设置现在不起作用。 我以前的值是E_ALL & ~E_NOTICE & ~E_STRICT我应该一次只启用一个值吗?

我有太多错误,文件包含太多代码供我修复。


正如评论者所说,最好的选择是修复错误,但时间或知识有限,这并非总是可能的。在您的php.ini中更改

1
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

如果您无权访问php.ini,则可以将其放在.htaccess文件中:

1
php_value error_reporting 30711

这是E_ALL值(32767)并除去E_STRICT(2048)和E_NOTICE(8)值。

如果您无权访问.htaccess文件或未启用该文件,则可能需要将此文件放在通过浏览器调用加载的所有脚本的PHP部分的顶部:

1
error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

其中之一应该可以帮助您使用该软件。声明和严格的内容是指示问题或潜在问题的指示器,并且您可能会发现某些代码在PHP 5.4中无法正常工作。

希望这可以帮助。


只有将PHP Server API用作Web服务器Apache的模块时,.htaccess php_value才有效。
使用IfModule语法:

1
2
3
4
# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

如果您使用PHP Server API CGI / FastCGI,请使用

1
ini_set('error_reporting', 30711);

要么

1
error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

在您的PHP代码中,
或PHP配置文件.user.ini | php.ini修改:

1
error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

在您的虚拟主机上,服务器级别。


如果还需要禁用E_DEPRACATED,请使用:

1
php_value error_reporting 22527

在我的情况下,CMS Made Simple抱怨"在错误报告中启用了E_STRICT"以及"已启用E_DEPRECATED"。在.htaccess中添加一行可以解决这两种错误配置。


当我同时在两个地方设置error_reporting时,它为我工作

PHP代码中的某处

1
ini_set('error_reporting', 30711);


和.htaccess文件中

1
php_value error_reporting 30711


抬起头来,您可能需要重新启动LAMP,Apache或任何其他使此生效的方法。在这个问题上,我们花了一段时间的精力,似乎没有任何影响,直到重新启动服务为止,大概是因为网站正在缓存。