PHP 5 disable strict standards error
我需要在顶部设置PHP脚本以禁用严格标准的错误报告。
有人可以帮忙吗?
-
@ 451F:我认为这里的关键词是"严格标准"。 我不知道以前的版本,但是对于PHP 5.4.0,建议您将错误报告设置为E_ALL & ~E_DEPRECATED & ~E_STRICT以进行生产。 请注意,他们建议您禁用严格的标准。
-
还要找到您的php.ini文件并将其复制到/ usr / local / php5 / lib /
您要禁用错误报告,还是只是阻止用户查看错误报告?即使在生产站点上,记录错误也通常是个好主意。
1 2 3
| # in your PHP code:
ini_set('display_errors', '0'); # don't show any errors...
error_reporting(E_ALL | E_STRICT); # ...but do log them |
它们将被记录到您的标准系统日志中,或使用error_log指令来指定您希望错误出现的确切位置。
-
只是为了明确说明显而易见的内容:当然,您也可以在php.ini文件中设置这些内容,例如如果您不能修改PHP代码。
-
但是,记录生产中的严格错误也是一个坏习惯。由于您会在日志中填充可能无关紧要的通知,从而导致以下一个或两个问题:serverAdmin将丢失/忽略错误,并且日志目录有时会占用所有服务器空间。
-
这对我不起作用-必须使用来自以下答案的Fake Code Monkey Rashid的E_ALL和?E_STRICT评论
-
如何与我在php.ini中找到的以下内容一起工作log_errors = On Vs ini_set(display_errors,0);是最后一组获胜吗?
-
@nate当您发布一些代码时,请告诉我们我们可以在哪里粘贴它。我不知道将它放在哪里:php.ini或.htaccess或我的PHP代码中的某个地方。
-
@Grawl:这在您的PHP代码中。
-
通常,通过向用户隐藏"严格标准"错误或将其转储到日志中来忽略"严格标准"错误是否安全?还是至关重要/需要尽快修复?
没有错误。
error_reporting(0);
还是不严格
error_reporting(E_ALL ^ E_STRICT);
如果您想再次显示所有错误,请使用
error_reporting(-1);
-
对我不起作用
-
+1:我相信^仅适用于省略一种错误。如果要关闭其他类型,则应使用E_ALL & ~E_DEPRECATED & ~E_STRICT格式。或(E_ALL & ~(E_DEPRECATED | E_STRICT))格式。
-
注意:自php 5.4起,E_STRICT只是E_ALL的一部分
-
@FakeCodeMonkeyRashid我想知道为什么吗?可能是因为那时的撤离顺序很重要吗?
-
在PHP <5.4 ini_set(error_reporting, E_ALL&~E_STRICT);中禁止报告STRICT错误在PHP> = 5.4 ini_set(error_reporting, E_ALL^E_STRICT);中禁止报告STRICT错误
-
我想指出,使用^(" xor")而不是& ~(" and not")是一个坏主意! ^取决于以下假设: E_STRICT是E_ALL的一部分,并将始终是E_ALL的一部分。这很糟糕,因为E_ALL过去确实发生过更改(E_STRICT过去不是,但是现在是PHP 5.4之后)。如果假设有一天失败,则^不仅会中断,而且实际上会做与预期相反的事情:由于XOR(^)的工作原理,它将启用E_STRICT。但是,无论E_ALL的当前值如何,& ~都将始终禁用E_STRICT。因此,应使用& ~。
-
同样,"并且,如果您想再次显示所有错误,请使用",并传递-1时,假定所有错误均已启用,事实并非如此,实际上很少如此。这就是为什么您可以首先检索和存储预设值并在以后正确还原它的原因(请参阅下面的答案)
以上所有解决方案都是正确的。但是,当我们谈论普通的PHP应用程序时,必须将其包含在所需的每个页面中。解决此问题的一种方法是通过根文件夹中的.htaccess。
只是为了掩盖错误。 [将以下行之一放入文件中]
1
| php_flag display_errors off |
要么
1
| php_value display_errors 0 |
接下来,设置错误报告
如果您想知道30719的值是怎么来的,则E_ALL(32767),E_STRICT(2048)实际上是常量,它们保存数值和(32767 - 2048 = 30719)
-
非常感谢-这在PHP 5.4.7中完成了技巧(.htaccess解决方案)-没什么别的-甚至修改.ini都在完成技巧。
-
应该是-2048对吧?不是-2028。
-
我使用php_admin_value error_reporting使其工作(在vhost配置中)。
-
@Seza,正确修复它。
-
它与页面无关,因此首选此方法,因为大多数E_STRICT错误是编译时的,并且无法在运行时覆盖
-
嗨,为了让您轻松一点,对于那些正在使用wamp的用户,可以通过单击php> php settings >> display errors禁用错误。如果已选中,则取消选中它。
如果未在php.ini中设置,则error_reporting标志的默认值为E_ALL和?E_NOTICE。
但是在某些安装中(尤其是针对开发环境的安装)具有E_ALL | E_STRICT设置为该标志的值(这是开发期间的建议值)。在某些情况下,特别是当您要运行一些开源项目时,这些项目是在PHP 5.3时代之前开发的,并且尚未使用PHP 5.3定义的最佳实践进行更新,因此在开发环境中,您可能会遇到一些麻烦。您收到的消息。应对这种情况的最佳方法是在php.ini或代码中(可能在web根目录中的index.php之类的前控制器中)仅将E_ALL设置为error_reporting标志的值。
在php.ini中设置:
WordPress的
如果您在Wordpress环境中工作,Wordpress会在函数wp_debug_mode()中的wp-includes / load.php文件中设置错误级别。因此,您必须在调用此函数后更改级别(在未检入git的文件中,仅用于开发),或者直接修改error_reporting()调用
-
这真的很有用,我在一次Wordpress安装中启用了调试模式,但没有意识到这样做了。谢谢提供信息!
我没有一个干净的答案,不适合生产就绪的软件,所以就这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| /*
* Get current error_reporting value,
* so that we don't lose preferences set in php.ini and .htaccess
* and accidently reenable message types disabled in those.
*
* If you want to disable e.g. E_STRICT on a global level,
* use php.ini (or .htaccess for folder-level)
*/
$old_error_reporting = error_reporting();
/*
* Disable E_STRICT on top of current error_reporting.
*
* Note: do NOT use ^ for disabling error message types,
* as ^ will re-ENABLE the message type if it happens to be disabled already!
*/
error_reporting($old_error_reporting & ~ E_STRICT);
// code that should not emit E_STRICT messages goes here
/*
* Optional, depending on if/what code comes after.
* Restore old settings.
*/
error_reporting($old_error_reporting); |