PHP Fatal error: Uncaught exception "Exception"

je joue avec des exceptions en PHP. Par exemple, j'ai un script qui lit une requête $_GET et charge un fichier; si le fichier n'existe pas, une nouvelle exception devrait être lancé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, quand j'essaie de fournir un fichier inexistant pour le test, j'ai 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:siteswonderfulprojectscript.php:40
Stack trace:
#0 {main}
  thrown in C:siteswonderfulprojectscript.php on line 40

je me demande si je manque quelque chose de très évident ici.

j'ai vérifié ce question PHP fatal error: Uncaught exception 'Exception' with message mais c'est pas tout à fait comme mon problème, et n'ont pas de réponse concise.

de l'Aide, s'il vous plaît?

* EDIT *

il semble que c'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 message ' le fichier n'existe pas.' dans C:siteswonderfulprojectscript.php: 183 Stack trace: #0 {main}

Pourquoi est-ce?

** EDIT 2**

grâce à @Orangepill, j'ai pu mieux comprendre comment gérer les exceptions. Et j'ai trouvé un superbe tut de nettuts qui a beaucoup aidé. Le lien: http://net.tutsplus.com/tutorials/php/the-ins-and-outs-of-php-exceptions/

10
demandé sur Community 2013-07-09 22:49:34

3 réponses

ce comportement est attendu pour une exception uncaught avec display_errors off.

vos options ici sont d'activer display_errors via php ou dans le fichier ini ou de saisir et de sortir l'exception.

 ini_set("display_errors", 1);

ou

 try{
     // code that may throw an exception
 } catch(Exception $e){
     echo $e->getMessage();
 }

si vous lancez des exceptions, l'intention est que quelque part plus loin dans la ligne quelque chose attrapera et traitera avec elle. Sinon c'est une erreur de serveur (500).

une Autre option pour vous serait d'utiliser set_exception_handler pour définir un gestionnaire d'erreurs par défaut pour votre script.

 function default_exception_handler(Exception $e){
          // show something to the user letting them know we fell down
          echo "<h2>Something Bad Happened</h2>";
          echo "<p>We fill find the person responsible and have them shot</p>";
          // do some logging for the exception and call the kill_programmer function.
 }
 set_exception_handler("default_exception_handler");
22
répondu Orangepill 2013-07-09 20:02:57

juste ajouter un peu d'information Supplémentaire ici au cas où quelqu'un aurait le même problème que moi.

j'utilise des namespaces dans mon code et j'ai eu une classe avec une fonction qui lance une Exception.

cependant mon code try / catch dans un autre fichier de classe a été complètement ignoré et L'erreur PHP normale pour une exception non comparée a été jetée.

il S'avère que j'ai oublié d'ajouter "use \Exception;" en haut, ajoutant qui a résolu l'erreur.

8
répondu xorinzor 2014-04-14 22:01:50

throw new Exception('test exception');

j'ai eu 500 (mais je n'ai rien vu dans le navigateur), jusqu'à ce que je mette

php_flag display_errors on

dans mon .htaccess (juste pour un sous-dossier). Il y a aussi des paramètres plus détaillés, voir activer l'affichage des erreurs en php via htaccess seulement

0
répondu Evgenii Lycenok 2017-10-05 01:17:40