将 php 更新到版本 5.4 后出现以下错误
Strict Standards: Non-static method Debugger::invoke() should not be called statically, assuming $this from incompatible context in /usr/share/php/cake/libs/debugger.php on line 575
Strict Standards: Non-static method Debugger::getInstance() should not be called statically, assuming $this from incompatible context in /usr/share/php/cake/libs/debugger.php on line 575
我已经尝试过以下解决方案
Cakephp 在安装 php5-curl 包后无法工作(无法找到“Cake”文件夹,因为我已经烘焙了我的项目)
https://stackoverflow.com/questions/11799085/turn-off-php-strict-standards?lq=1(无法关闭错误)
每次更改后清除蛋糕缓存、网络浏览器缓存、cookie 并重新启动服务器。甚至在隐私浏览和 chrome、firefox、ie 中也尝试过。
我相信这是因为这个应用程序是基于旧版本的 CakePHP 构建的,它可能使用了一些已弃用的函数。 如果您(或其他人)可以将 Cake 升级到新的稳定分支,那就太棒了。 截至目前,在 core.php 中尝试此操作,您可以从错误报告中删除 E_STRICT:
即去 app/Config/core.php 查找
Configure::write('Error', array(
'handler' => 'ErrorHandler::handleError',
'level' => E_ALL & ~E_DEPRECATED,
'trace' => true
));
将其替换为
Configure::write('Error', array(
'handler' => 'ErrorHandler::handleError',
'level' => E_ALL & ~E_STRICT & ~E_DEPRECATED,
'trace' => true
));
更改 error_reporting 函数确实可以解决此问题。然而,cakephp 似乎在几个地方设置了这些标志,这就是为什么该解决方案可能对你不起作用(我经历过同样的事情)
在源代码范围内搜索“error_reporting”,您会发现它在多个文件中使用。尽可能添加标志“~E_STRICT”。例如:
error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);
你会在 /cake/bootstrap.php、/cake/libs/configure.php、/cake/console/cake.php 等地方看到它。我只是将它们全部更改为排除 E_STRICT,问题就解决了。
最好的选择是将 CakePHP 更新到最新版本,该问题已在 PHP 8 中修复。但如果这是不可能的,您必须将
static
添加到所有使用双冒号调用的函数 ::
static function invoke(&$debugger) {
set_error_handler(array(&$debugger, 'handleError'));
}
}