qxlab
qxlab

Reputation: 1536

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.

Upvotes: 26

Views: 77170

Answers (7)

KingRider
KingRider

Reputation: 2257

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

Upvotes: 0

Serge S.
Serge S.

Reputation: 4915

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

Upvotes: 1

GIPSSTAR
GIPSSTAR

Reputation: 2100

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

Upvotes: 4

JvdBerg
JvdBerg

Reputation: 21856

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.

Upvotes: 23

Claudio Bredfeldt
Claudio Bredfeldt

Reputation: 1422

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

Upvotes: 14

Ruut
Ruut

Reputation: 1161

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.

Upvotes: 9

cori
cori

Reputation: 8810

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.

Upvotes: 0

Related Questions