简体   繁体   中英

How to eliminate php5 Strict standards errors?

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.

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.

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,
...

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.

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);

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);

Make sure you've updated the correct php.ini file - if you create a php file in your root directory with the following code

<?php

phpinfo();

?>

and load it in your web browser it will tell you which ini file is being used, in case you missed one.

It's also possible that an htaccess file is setting that value via the php_flag error_reporting value, which can also be set per directory.

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM