26

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.

qxlab
  • 1,506
  • 4
  • 20
  • 48
  • 1
    did you also restart apache then? also - usually for WAMP you can navigate to the right php.ini by clicking the icon and selecting PHP=>php.ini – mark Sep 01 '12 at 15:40
  • 1
    did you `` to see if you modified in the right `php.ini` ? – Mihai Iorga Sep 01 '12 at 15:41
  • In my case the solution for these problems is to upgrade CakePHP which I can't do since CakePHP 2.x do not support firebird. I've printed the phpinfo() and it show that my php.ini file is located at C:\wamp\bin\apache\apache2.4.2\bin. I did restart apache. And no, the php.ini file opened in the wamp menu is not the correct one. – qxlab Sep 01 '12 at 16:26
  • Running PHP 7 on IIS Win10 for development only Modifying the php.ini file solve it for me. error_reporting = E_ALL & ~E_STRICT & ~E_DEPRECATED – Nick Feb 03 '18 at 20:24

7 Answers7

23

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.

Jpsy
  • 20,077
  • 7
  • 118
  • 115
JvdBerg
  • 21,777
  • 8
  • 38
  • 55
14

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,
...
Claudio Bredfeldt
  • 1,423
  • 16
  • 27
  • 1
    This is the best option - my `error_reporting` in `bootstrap.php` was being overridden by these settings anyways. – jocull Jun 18 '14 at 17:30
  • For users of CakePHP, this is THE correct solution. Changing the PHP.INI file has NO effect since it gets overridden here. – UncaAlby Oct 17 '17 at 14:51
9

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.

Ruut
  • 1,091
  • 1
  • 16
  • 29
  • As I stated in the comment in the correct answer, to solve my problem I used `error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);`, right now I don't remember why.. – qxlab Mar 29 '13 at 00:45
4

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);
GIPSSTAR
  • 2,050
  • 1
  • 25
  • 20
1

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);
Serge S.
  • 4,855
  • 3
  • 42
  • 46
0

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.

cori
  • 8,666
  • 7
  • 45
  • 81
  • Thank you for the answer, the phpinfo() shows that I'm changing the correct php.ini file. I didn't understand your comment about the htaccess... should I try something? – qxlab Sep 01 '12 at 16:29
0

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);
KingRider
  • 2,140
  • 25
  • 23