How to eliminate php5 Strict standards errors?

2020-01-29 05:20发布

After upgrading my PHP to 5.4.3 (WAMP server 2.2), my web app made in CakePHP 1.3, is showing the following errors in my index:

Strict standards: Redefining already defined constructor for class Object in C:...\cake\cake\libs\object.php on line 63

Strict standards: Non-static method Configure::getInstance() should not be called statically in C:...\cake\cake\bootstrap.php on line 49

I've found that some people solve this problem by setting the error_reporting in php.ini to E_ALL & ~E_STRICT.

I did that in both php.ini files (C:\wamp\bin\php\php5.4.3 and C:\wamp\bin\apache\apache2.4.2\bin) present on my computer but it didn't solve the problem.

I also tried to put php_value error_reporting 6143 in C:...\cake.htaccess but without success.

Does anybody know how can I solve this? I can't upgrade my CakePHP because of firebird.

7条回答
干净又极端
2楼-- · 2020-01-29 05:33

Please replace

error_reporting = E_ALL 

in your php.ini, with

error_reporting = E_ALL & ~E_STRICT

For me

error_reporting(E_ALL ^ E_STRICT);

which is shown in the accepted answer to this question did not work and gave an Infinite loop detected in JError error for my Joomla website.

查看更多
老娘就宠你
3楼-- · 2020-01-29 05:36

Instead of modifying the cake core files, which sucks if you want to update your cake version, go into your Config/core.php file and look for the error handler configuration:

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

and replace 'level' with this:

...
'level' => E_ALL & ~E_STRICT & ~E_DEPRECATED,
...
查看更多
小情绪 Triste *
4楼-- · 2020-01-29 05:36

If you're fighting with PHP Strict warnings in cake console output, take a look into your app/config/core.php.

In CakePhp 1.3 error_reporting(...) is overwritten by the 'log' option, so ensure you exclude E_STRICT here:

/**
 * 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);
查看更多
▲ chillily
5楼-- · 2020-01-29 05:43

One of the changes in php 5.4 is that E_STRICT is now part of E_ALL

So, in your /cake/bootstrap.php you could remove the E_STRICT from your error reporting:

error_reporting(E_ALL ^ E_STRICT);

and be compatible again with before 5.4 versions.

查看更多
够拽才男人
6楼-- · 2020-01-29 05:47

File bootstrap.php from folder (root)cake

if (!defined('E_ALL')) {
    define('E_ALL', 8192);
}

File debugger.php from folder (root)cake\libs

error_reporting(E_ALL ^ ~E_STRICT ^ ~E_DEPRECATED);
查看更多
一夜七次
7楼-- · 2020-01-29 05:48

You are using newer php version. in php 5.4, E_STRICT is part of E_ALL

in cake 1.3, open file /cake/bootstrap.php and change the error_reporting like this

error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);
查看更多
登录 后发表回答