如何消除 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 &amp; ~E_STRICT &amp; ~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 &amp; ~E_STRICT &amp; ~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 中的严格标准错误

如何修复 PHP Strict 错误“从空值创建默认对象”?

php 5.6.1 构建配置错误。

php error_reporting E_STRICT

离差标准化

linux中报错“把输出追加到nohup.out”啥意思?