更新到 php 5.4.9 后出现静态标准错误

问题描述 投票:0回答:3

将 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 中禁用错误报告时出错

Cakephp 在安装 php5-curl 包后无法工作(无法找到“Cake”文件夹,因为我已经烘焙了我的项目)

Wampserver cakephp 1.3 严格标准错误

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

PHP 5 禁用严格标准错误

https://stackoverflow.com/questions/11799085/turn-off-php-strict-standards?lq=1(无法关闭错误)

每次更改后清除蛋糕缓存、网络浏览器缓存、cookie 并重新启动服务器。甚至在隐私浏览和 chrome、firefox、ie 中也尝试过。

php cakephp strict
3个回答
8
投票

我相信这是因为这个应用程序是基于旧版本的 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
));

4
投票

更改 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,问题就解决了。


0
投票

最好的选择是将 CakePHP 更新到最新版本,该问题已在 PHP 8 中修复。但如果这是不可能的,您必须将

static
添加到所有使用双冒号调用的函数
::

static function invoke(&$debugger) {
        set_error_handler(array(&$debugger, 'handleError'));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.