如何消除 php5 Strict 标准错误?
Posted
技术标签:
【中文标题】如何消除 php5 Strict 标准错误?【英文标题】:How to eliminate php5 Strict standards errors? 【发布时间】:2012-08-27 02:01:24 【问题描述】:将我的 php 升级到 5.4.3(WAMP 服务器 2.2)后,我在 CakePHP 1.3 中制作的网络应用程序在我的索引中显示以下错误:
严格标准:为类重新定义已定义的构造函数 C:...\cake\cake\libs\object.php 中的对象在第 63 行
严格的标准:非静态方法 Configure::getInstance() 应该 不能在第 49 行的 C:...\cake\cake\bootstrap.php 中静态调用
我发现有些人通过将php.ini中的error_reporting
设置为E_ALL & ~E_STRICT
来解决这个问题。
我在我的计算机上的两个 php.ini 文件(C:\wamp\bin\php\php5.4.3 和 C:\wamp\bin\apache\apache2.4.2\bin)中都这样做了,但它没有解决问题。
我也尝试将php_value error_reporting 6143
放入 C:...\cake.htaccess 但没有成功。
有人知道我该如何解决这个问题吗?由于 firebird,我无法升级我的 CakePHP。
【问题讨论】:
那你是不是也重启了apache?也 - 通常对于 WAMP,您可以通过单击图标并选择 PHP=>php.ini 导航到正确的 php.ini 你<?php phpinfo(); ?>
看有没有修改在右边php.ini
?
在我的情况下,这些问题的解决方案是升级 CakePHP,因为 CakePHP 2.x 不支持 firebird,所以我不能这样做。我打印了 phpinfo(),它显示我的 php.ini 文件位于 C:\wamp\bin\apache\apache2.4.2\bin。我确实重新启动了apache。不,在 wamp 菜单中打开的 php.ini 文件不是正确的。
在 IIS Win10 上运行 PHP 7 仅用于开发修改 php.ini 文件为我解决它。 error_reporting = E_ALL & ~E_STRICT & ~E_DEPRECATED
【参考方案1】:
确保您已更新正确的 php.ini 文件 - 如果您使用以下代码在根目录中创建 php 文件
<?php
phpinfo();
?>
并将其加载到您的网络浏览器中,它会告诉您正在使用哪个 ini 文件,以防您错过了。
也有可能是 htaccess 文件通过 php_flag error_reporting
值设置该值,也可以按目录设置。
【讨论】:
感谢您的回答,phpinfo() 表明我正在更改正确的 php.ini 文件。我不明白您对 htaccess 的评论...我应该尝试一下吗?【参考方案2】:php 5.4 的变化之一是 E_STRICT 现在是 E_ALL 的一部分
因此,在您的 /cake/bootstrap.php 中,您可以从错误报告中删除 E_STRICT:
error_reporting(E_ALL ^ E_STRICT);
并再次与 5.4 之前的版本兼容。
【讨论】:
谢谢!!我把“error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);”在我的 C:\...\cake\cake\bootstrap.php 文件中,解决了问题。 在使用了这个error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);
my views 之后...有什么帮助吗?
我在 bootstrap.php 中应用了同样的东西,但在 Strict Standard 中没有变化。
这是因为它被您的 core.php
文件 (Configure::write('Error'...)
) 覆盖。再往下看答案。【参考方案3】:
请更换
error_reporting = E_ALL
在你的 php.ini 中,用
error_reporting = E_ALL & ~E_STRICT
对我来说
error_reporting(E_ALL ^ E_STRICT);
在该问题的已接受答案中显示无效,并为我的 Joomla 网站提供了 Infinite loop detected in JError 错误。
【讨论】:
正如我在正确答案的评论中所说,为了解决我的问题,我使用了error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);
,现在我不记得为什么了..【参考方案4】:
不要修改蛋糕核心文件,如果你想更新你的蛋糕版本,这很糟糕,进入你的 Config/core.php 文件并查找错误处理程序配置:
Configure::write('Error', array(
'handler' => 'ErrorHandler::handleError',
'level' => E_ALL & ~E_DEPRECATED,
'trace' => true
));
并将“级别”替换为:
...
'level' => E_ALL & ~E_STRICT & ~E_DEPRECATED,
...
【讨论】:
这是最好的选择 - 我在bootstrap.php
中的 error_reporting
无论如何都被这些设置覆盖了。
对于 CakePHP 的用户来说,这是正确的解决方案。更改 PHP.INI 文件没有任何效果,因为它在此处被覆盖。【参考方案5】:
您使用的是较新的 php 版本。在 php 5.4 中,E_STRICT 是 E_ALL 的一部分
在 cake 1.3 中,打开文件 /cake/bootstrap.php 并像这样更改 error_reporting
error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);
【讨论】:
【参考方案6】:如果您在蛋糕控制台输出中遇到 PHP Strict 警告,请查看您的 app/config/core.php
。
在 CakePhp 1.3 中,error_reporting(...)
被 'log'
选项覆盖,因此请确保在此处排除 E_STRICT
:
/**
* CakePHP Log Level:
*
* In case of Production Mode CakePHP gives you the possibility to continue logging errors.
*
* The following parameters can be used:
* Boolean: Set true/false to activate/deactivate logging
* Configure::write('log', true);
*
* Integer: Use built-in PHP constants to set the error level (see error_reporting)
* Configure::write('log', E_ERROR | E_WARNING);
* Configure::write('log', E_ALL ^ E_NOTICE);
*/
Configure::write('log', E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
【讨论】:
【参考方案7】:从文件夹(根)cake 文件 bootstrap.php
if (!defined('E_ALL'))
define('E_ALL', 8192);
文件 debugger.php 从文件夹 (根)cake\libs
error_reporting(E_ALL ^ ~E_STRICT ^ ~E_DEPRECATED);
【讨论】:
以上是关于如何消除 php5 Strict 标准错误?的主要内容,如果未能解决你的问题,请参考以下文章
使用 PHP 5.4 禁用 WordPress 3.7 中的严格标准错误