PHP Неустранимая ошибка: исключить исключение «Исключение»

Я играю с исключениями в PHP. Например, у меня есть скрипт, который читает запрос $ _GET и загружает файл; Если файл не существует, необходимо создать новое исключение:

if ( file_exists( $_SERVER['DOCUMENT_ROOT'] .'/'.$_GET['image'] ) ) { // Something real amazing happens here. } else { throw new Exception("The requested file does not exists."); } 

Проблема в том, что когда я пытаюсь предоставить несуществующий файл для теста, я получил ошибку 500 вместо сообщения об исключении. Журнал сервера следующий:

 [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 

Интересно, не хватает ли я здесь чего-то реального.

Я проверил этот вопрос. Неустранимая ошибка PHP: Не удалось исключить исключение «Исключение» с сообщением, но это не совсем похоже на мою проблему и не имеет краткого ответа.

Помоги пожалуйста?

* РЕДАКТИРОВАТЬ *

Кажется, это связано с ключевым словом throw . Если я использую echo например, я получил сообщение, напечатанное на экране, например:

исключение «Исключение» с сообщением «Файл не существует». в C: \ sites \ wonderfulproject \ script.php: 183 Трассировка стека: # 0 {main}

Почему это?

** ИЗМЕНИТЬ 2 **

Благодаря @Orangepill, я получил лучшее понимание того, как обрабатывать исключения. И я нашел превосходную музыку из nettuts, которая помогла много. Ссылка: http://net.tutsplus.com/tutorials/php/the-ins-and-outs-of-php-exceptions/

Это ожидаемое поведение для неперехваченного исключения с отключением display_errors.

Здесь вы должны включить display_errors через php или ini-файл или выловить и вывести исключение.

  ini_set("display_errors", 1); 

или

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

Если вы бросаете исключения, то намерение заключается в том, что где-то дальше по линии что-то поймает и справится с этим. Если это не ошибка сервера (500).

Другим вариантом для вас было бы использование set_exception_handler для установки обработчика ошибок по умолчанию для вашего скрипта.

  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"); 

Просто добавьте немного дополнительной информации здесь, если у кого-то есть такая же проблема, как и я.

Я использую пространства имен в своем коде, и у меня был класс с функцией, которая генерирует исключение.

Однако мой код try / catch в другом файле класса был полностью проигнорирован, и была вызвана обычная ошибка PHP для исключенного исключения.

Оказалось, я забыл добавить «use \ Exception;» вверху, добавив, что разрешила ошибку.

Для

 throw new Exception('test exception'); 

Я получил 500 (но ничего не видел в браузере), пока не поставил

 php_flag display_errors on 

в моем .htaccess (только для подпапки). Существуют также более подробные настройки, см. Раздел Включение отображения ошибок в php только через htaccess