禁用PHP 5.4中的严格标准


95

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

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


11
建议...修复代码,否则错误将变得越来越好,并且更加难以调试
Baba 2012年

7
s /不幸/幸运的是
NikiC 2012年

96
感谢您的建议,但是我缺少重新编写整个jfusion phpbb3插件所需的知识。感谢您的屈尊。
icomrade

12
我同意我们的朋友的意见,您应该尝试修复错误,它们可能会咬住您的脚踝,并且掩盖所有错误使调试变得困难。但是我也认为,对于这个孤独的问题来判断发帖人是不公平的,如果您因为客户正在电话中折磨未出生的孩子而不必做一些令人毛骨悚然的工作,那么您还没有在IT部门工作过那么长时间
Jonathan dos Santos

7
这是一个完全合理的问题,是的@icomrade-您对这里的自尊心和嘲讽是正确的。这是StackOverflow吸引力较弱的特征之一。综上所述,我建议您至少解决一些收到的警告-即使您不能全部解决。
Halfer '04

Answers:


139

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

error_reporting = E_ALL

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

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

php_value error_reporting 30711

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

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

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

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


11
我使用的是PHP 5.4.5,但我尝试了上述所有方法,但我无法禁用严格的通知:(还有其他想法吗?
ro ko

2
您可以尝试将&〜E_DEPRECATED以及其他部分放入error_reporting()中。您看到什么讯息?
大卫·斯托克顿

4
@roko您的代码是否有可能在某个地方覆盖了此代码?在php.ini中禁用它后,我仍然看到严格的错误,然后我意识到这仅适用于某些网站,使用Drupal的网站在代码中设置了该值
andrewtweber 2013年

1
@AndrewSpear这很奇怪。从理论上讲,error_reporting设置应该影响显示在任何地方的错误。display_errors设置应影响是否在输出中(在PHP页面中)获得错误,并且error_log将影响将错误写入日志的位置。如果display_errors打开,则您应该在屏幕上看到与日志中相同的错误。
大卫·斯托克顿

4
+1可以用一个简单的答案回答一个简单的问题,而无需变成StackOverflow Smuglord™。
2014年

2

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

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

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

ini_set('error_reporting', 30711);

要么

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

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

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

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


1

当我

在PHP代码中的某个位置的两个位置同时设置error_reporting时,它为我工作

ini_set('error_reporting', 30711);


并在.htaccess文件中

php_value error_reporting 30711

唯一无法访问php.ini的对我有用的东西,上面的另一个不能单独工作,仅返回500错误。俩在一起宝贝!
Jamie Hutber

1

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

php_value error_reporting 22527

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


0

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


不。这是因为Apache需要重新加载PHP的设置。仅当服务启动时才完成AFAIK。
svin83
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.