web-dev-qa-db-fra.com

Comment éliminer les erreurs de normes php5 Strict?

Après la mise à niveau de mon PHP vers la version 5.4.3 (serveur WAMP 2.2), mon application Web créée dans CakePHP 1.3 affiche les erreurs suivantes dans mon index:

Normes strictes: Redéfinition du constructeur déjà défini pour la classe Objet dans C: ...\cake\cake\libs\object.php à la ligne 63

Normes strictes: La méthode non statique Configure :: getInstance () devrait ne pas être appelé statiquement dans C: ...\cake\cake\bootstrap.php à la ligne 49

J'ai constaté que certaines personnes résolvent ce problème en définissant error_reporting dans php.ini sur E_ALL & ~E_STRICT.

Je l'ai fait dans les deux fichiers php.ini (C:\wamp\bin\php\php5.4.3 et C:\wamp\bin\Apache\apache2.4.2\bin) présents sur mon ordinateur mais cela n'a pas résolu le problème .

J'ai aussi essayé de mettre php_value error_reporting 6143 dans C: ...\cake.htaccess mais sans succès. 

Est-ce que quelqu'un sait comment puis-je résoudre ce problème? Je ne peux pas mettre à niveau mon CakePHP à cause de Firebird.

26
qxlab

Un des changements dans php 5.4 est que E_STRICT fait maintenant partie de E_ALL

Donc, dans votre /cake/bootstrap.php, vous pouvez supprimer le E_STRICT de votre rapport d’erreur

error_reporting(E_ALL ^ E_STRICT);

et être compatible à nouveau avec les versions antérieures à 5.4.

23
JvdBerg

Au lieu de modifier les fichiers de base de gâteau, ce qui est nul si vous souhaitez mettre à jour votre version de gâteau, allez dans votre fichier Config/core.php et recherchez la configuration du gestionnaire d'erreurs:

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

et remplacez 'level' par ceci:

...
'level' => E_ALL & ~E_STRICT & ~E_DEPRECATED,
...
13
Claudio Bredfeldt

Veuillez remplacer

error_reporting = E_ALL 

dans votre php.ini, avec

error_reporting = E_ALL & ~E_STRICT

Pour moi 

error_reporting(E_ALL ^ E_STRICT);

qui est indiqué dans la réponse acceptée à cette question ne fonctionnait pas et donnait une erreur une boucle infinie détectée dans JError pour mon site Web Joomla. 

9
Ruut

Vous utilisez une nouvelle version de php. en php 5.4, E_STRICT fait partie de E_ALL

dans cake 1.3, ouvrez le fichier /cake/bootstrap.php et modifiez le rapport d’erreur

error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED);
4
Gaurang P

Si vous vous battez avec PHP Avertissements stricts dans la sortie de la console gâteau, consultez votre app/config/core.php.

Dans CakePhp 1.3, error_reporting(...) est écrasé par l'option 'log', assurez-vous donc d'exclure E_STRICT ici:

/**
 * 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);
1
Serge S.

Assurez-vous que vous avez mis à jour le fichier php.ini correct - si vous créez un fichier php dans votre répertoire racine avec le code suivant

<?php

phpinfo();

?>

et le charger dans votre navigateur Web, il vous indiquera quel fichier ini est utilisé, au cas où vous en auriez oublié un.

Il est également possible qu'un fichier htaccess définisse cette valeur via la valeur php_flag error_reporting, qui peut également être définie par répertoire.

0
cori

Fichier bootstrap.php à partir du dossier cake (root)

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

Fichier debugger.php du dossier (racine) cake\libs

error_reporting(E_ALL ^ ~E_STRICT ^ ~E_DEPRECATED);
0
KingRider