2009-03-24 6 views
1

Je cherche à gérer un peu de gestion des erreurs personnalisées pour les erreurs d'analyse de PHP - le type quand la syntaxe est fausse, et vous obtenez ces blancs écrans de la mort.Comment exécuter une fonction/bit de code personnalisé quand PHP a une erreur d'analyse

(Pour être clair, le type qui résulterait lors de l'exécution du code malformé comme si:

<?php 
if() { 
?> 

)

J'ai eu un coup d'œil à la fixation d'un gestionnaire d'erreur personnalisé, mais n'a pas pu obtenir quoi que ce soit se passer.

Répondre

3

Une autre idée: Si vous avez un propre serveur racine ou simplement d'exécuter le script sur votre PC local, vous pouvez effectuer les opérations suivantes:

Mettre le code pour tester dans un nouveau fichier, par exemple failure.php. Dans votre script (même répertoire), où vous voulez vérifier les erreurs, faites-le de cette façon:

$path_to_test = 'failure.php'; 
$result = `php -l $path_to_test`; 

Ensuite, vous avez les messages d'erreur d'analyse syntaxique dans $result, parce que le drapeau -l ne fait que PHP analyser le code. Il n'exécutera jamais rien. Vous pouvez analyser les messages d'erreur le cas échéant et même en extraire les numéros de ligne.

+0

Mis en œuvre dans le cadre de mon test de site. Merci beaucoup pour le pourboire! –

2

Normalement, vous devriez utiliser set_error_handler pour cela, mais les docs noter ceci:

ne peuvent pas être traités Les types d'erreur suivants avec une fonction définie par l'utilisateur: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, et la plupart de E_STRICT levé dans le fichier où set_error_handler() est appelée.

Ce que vous avez là est un PARSE_ERROR et n'est pas catacheable par ceci. Dans les sections «commentaire d'utilisateur» de la page set_error_handler, il y a une pléthore de solutions pour détecter toutes les erreurs, et certaines disent que cela fonctionne et d'autres non, alors je suggère de les parcourir et de trouver le cas échéant.

+0

Hmm, c'est logique. J'ai lu quelques-unes des idées, mais je n'ai pas trouvé celle qui a fonctionné - ou même fait quelque chose. –

1

Ce n'est pas un erreur fatale que le terme est utilisé en PHP. C'est une erreur d'analyse . Cela signifie que PHP ne peut pas comprendre votre code et qu'il ne vient jamais du tout à l'exécution du code. Par conséquent, vous ne pouvez pas détecter de telles erreurs. Si vous êtes sûr que le code test ne contient pas d'injections nocives, vous pouvez Eval il:

if ([email protected]('if() {')) 
{ 

    echo "An error occured."; 

} 

Mais assurez-vous de lire des conseils sur comment et quand utiliser eval(). Cela peut être très dangereux.

+0

C'est une idée intéressante, même si je ne veux pas vraiment exécuter le code. Pourrait finir par utiliser cette idée dans un couple d'endroits si ... –

Questions connexes