2010-10-15 5 views
2

Dans une méthode d'action, je l'extrait de code suivant:Zend Framework - toutes les erreurs sont indiquées

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
Logger::log('test'); 

La classe Logger est définie ainsi:

class Logger { 
    public static function log() { 
     echo "test"; 
} 

Je délibérément oublié l'accolade fermante de la fonction pour démontrer le problème. Lorsque l'action est appelée, absolument rien n'est affiché à l'écran. Quel type d'erreur est-ce, et pourquoi n'est-il pas affiché, même si j'ai configuré PHP pour montrer toutes les erreurs, comme indiqué ci-dessus?

Bien sûr, si j'ajoute l'accolade manquante, tout est OK.

+0

Avez-vous vérifié votre configs/application.ini? – Hannes

+0

Merci, mais que dois-je vérifier? J'ai reconfiguré explicitement les paramètres d'erreur PHP juste avant d'appeler Logger: log() pour m'assurer que toutes les erreurs PHP sont affichées. – Dario

+0

Je n'ai aucun enregistreur de journal. Ne laissez pas le nom de classe "Logger" vous confondre, je me demande simplement pourquoi aucune erreur n'est affichée lorsqu'une fonction statique d'une classe invalide est appelée. – Dario

Répondre

3

Vous devez également activer display_startup_errors montrer des erreurs fatales:

Even when display_errors is on, errors that occur during PHP's startup sequence are not displayed. It's strongly recommended to keep display_startup_errors off, except for debugging.

Voir aussi la note pour display_errors:

Although display_errors may be set at runtime (with ini_set()), it won't have any affect if the script has fatal errors. This is because the desired runtime action does not get executed.

Vous pouvez définir les deux valeurs dans le application.ini de Zend Framework. Sur un Sidenote: si vous définissez error_reporting(-1) il signalera (! Display) toutes les erreurs, y compris E_STRICT et tous les ajouts futurs.

+0

Merci pour l'effort Gordon, il semble que 'display_startup_errors' ait déjà été défini dans le fichier de configuration. En fait, si je lance 'ini_get ('display_startup_errors')' et 'ini_get ('display_errors'), les deux fonctions renvoient 1. Toujours pas de chance. – Dario

+0

@Dario êtes-vous sûr qu'il n'existe aucun opérateur de suppression d'erreur '@' avant que la classe Logger ne soit chargée? Pouvez-vous vérifier le journal des erreurs de votre serveur Web? – Gordon

+0

Non, pas d'opérateurs de suppression. Fait intéressant, si je rate une accolade dans la classe contrôleur, j'obtiendrai une erreur PHP à l'écran ainsi que dans le journal du serveur: 'Erreur PHP Parse: erreur de syntaxe, inattendu T_IF'. Cependant, rien n'est affiché si j'utilise une classe invalide dans le contrôleur, comme dans mon exemple. Comme si de telles erreurs étaient complètement perdues lors du rendu de la vue. – Dario

2

J'ai exactement le même problème - je n'ai pas réussi à le résoudre complètement, mais j'ai découvert que toutes les erreurs sont correctement enregistrées dans un fichier, même si elles ne sont pas affichées.

Il suffit de mettre ces lignes dans votre config .htaccess/serveur:

php_value  log_errors      On 
php_value  error_log      "/path_to_logs/errors.log"