将我的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。
答案 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.phpif (!defined('E_ALL')) {
define('E_ALL', 8192);
}
文件夹(root)cake \ libs
中的debugger.phperror_reporting(E_ALL ^ ~E_STRICT ^ ~E_DEPRECATED);