Erreur fatale PHP: exception non interceptée 'Exception'
Je suis en train de jouer autour avec des exceptions en PHP. Par exemple, j'ai un script qui lit un $_GET demande et charge un fichier; Si le fichier n'existe pas, une exception doit être levée:
if ( file_exists( $_SERVER['DOCUMENT_ROOT'] .'/'.$_GET['image'] ) ) {
//Something real amazing happens here.
}
else {
throw new Exception("The requested file does not exists.");
}
Le problème est que, lorsque j'essaie de fournir un n'existe pas de fichier pour le test, j'ai eu une erreur 500 au lieu du message d'exception. Le journal du serveur est la suivante:
[09-Jul-2013 18:26:16 UTC] PHP Fatal error: Uncaught exception 'Exception' with message 'The requested file does not exists.' in C:\sites\wonderfulproject\script.php:40
Stack trace:
#0 {main}
thrown in C:\sites\wonderfulproject\script.php on line 40
Je me demande si je suis absent quelque chose de réel ici évidente.
J'ai vérifié cette question PHP fatal error: Uncaught exception 'Exception' avec message mais ce n'est pas tout à fait comme mon problème, et n'ont pas de réponse concise.
Aider, s'il vous plaît?
* EDIT *
Il semble que ce est quelque chose lié à la throw
mot-clé. Si j'utilise echo
par exemple, j'ai reçu le message imprimé sur l'écran, comme ceci:
exception 'Exception' avec le message "Le fichier n'existe pas." C:\sites\wonderfulproject\script.php:183 Stack trace: #0 {principal}
Pourquoi est-ce?
** EDIT 2 **
Grâce à @Orangepill, j'ai eu une meilleure compréhension sur la façon de gérer les exceptions. Et j'ai trouvé une superbe tut de nettuts qui m'a beaucoup aidé. Le lien: http://net.tutsplus.com/tutorials/php/the-ins-and-outs-of-php-exceptions/
source d'informationauteur darksoulsong
Vous devez vous connecter pour publier un commentaire.
Ce comportement est normal pour une exception non interceptée avec display_errors à off.
Vos options sont à leur tour sur display_errors via php ou dans le fichier ini ou de les attraper et de sortie de l'exception.
ou
Si vous êtes de lever des exceptions, l'intention est que quelque part plus bas sur la ligne de quelque chose qui va les attraper et de les traiter avec elle. Sinon c'est une erreur de serveur (500).
Une autre option pour vous serait d'utiliser la fonction set_exception_handler pour définir un gestionnaire d'erreurs par défaut pour votre script.
Simplement en ajoutant un peu d'informations supplémentaires ici au cas où quelqu'un a le même problème que moi.
Je utiliser des espaces de noms dans mon code et j'ai eu une classe avec une fonction qui renvoie une Exception.
Cependant mon try/catch code dans un autre fichier de classe a été complètement ignoré, et le PHP normal erreur pour un uncatched exception a été levée.
S'est avéré que j'ai oublié d'ajouter "utiliser \Exception;" en haut, en ajoutant que résolu l'erreur.
Pour
J'ai reçu 500 (mais n'ai rien vu dans le navigateur), jusqu'à ce que j'ai mis
dans mon .htaccess (seulement pour un sous-dossier).
Il y a également des réglages plus détaillés,
voir Activation de l'affichage des erreurs en php via htaccess seulement