如何消除php5严格的标准错误?

时间:2012-09-01 15:39:14

标签: php cakephp cakephp-1.3

将我的PHP升级到5.4.3(WAMP服务器2.2)之后,我在CakePHP 1.3中创建的Web应用程序在我的索引中显示以下错误:

  

严格标准:重新定义已定义的类构造函数   C中的对象:第63行的... \ cake \ cake \ libs \ object.php

     

严格的标准:非静态方法Configure :: getInstance()应该   不能在C中静态调用:... \ cake \ cake \ bootstrap.php第49行

我发现有些人通过将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中,但没有成功。

有谁知道如何解决这个问题?由于火鸟,我无法升级我的CakePHP。

7 个答案:

答案 0 :(得分:23)

php 5.4中的一个变化是E_STRICT现在是E_ALL的一部分

因此,在/cake/bootstrap.php中,您可以从错误报告中删除E_STRICT:

error_reporting(E_ALL ^ E_STRICT);

并在5.4版本之前再次兼容。

答案 1 :(得分:13)

而不是修改蛋糕核心文件,如果你想更新你的蛋糕版本很糟糕,请进入你的Config / core.php文件并查找错误处理程序配置:

Configure::write('Error', array(
    'handler' => 'ErrorHandler::handleError',
    'level' => E_ALL & ~E_DEPRECATED,
    'trace' => true
));

并将'level'替换为:

...
'level' => E_ALL & ~E_STRICT & ~E_DEPRECATED,
...

答案 2 :(得分:9)

请替换

error_reporting = E_ALL 

php.ini 中,

error_reporting = E_ALL & ~E_STRICT

对我来说

error_reporting(E_ALL ^ E_STRICT);

在此问题的接受答案中显示不起作用,并为我的Joomla网站提供了在JError中检测到的无限循环错误。

答案 3 :(得分:4)

您正在使用较新的php版本。在PHP 5.4中,E_STRICT是E_ALL的一部分

在cake 1.3中,打开文件/cake/bootstrap.php并像这样更改error_reporting

error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);

答案 4 :(得分:1)

如果您正在使用蛋糕控制台输出中的PHP严格警告,请查看您的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);

答案 5 :(得分:0)

确保您已更新正确的php.ini文件 - 如果您使用以下代码在根目录中创建一个php文件

<?php

phpinfo();

?>

并将其加载到您的网络浏览器中,它会告诉您正在使用哪个ini文件,以防错过。

htaccess文件也可能通过php_flag error_reporting值设置该值,也可以按目录设置。

答案 6 :(得分:0)

文件夹(root)cake

中的bootstrap.php
if (!defined('E_ALL')) {
    define('E_ALL', 8192);
}

文件夹(root)cake \ libs

中的debugger.php
error_reporting(E_ALL ^ ~E_STRICT ^ ~E_DEPRECATED);