Подтвердить что ты не робот

Try/catch не работает в PHP

Почему я получаю эту ошибку?

Warning: file_get_contents(http://www.example.com) [function.file-get-contents]: failed to open stream: HTTP request failed! in C:\xampp\htdocs\test.php on line 22

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\test.php on line 22

Вот код:

 try {
    $sgs = file_get_contents("http://www.example.com");
 }
 catch (Exception $e) {
    echo '123';
 }
 echo '467';

Разве try\catch не должен продолжать отмену кода? Или, может быть, есть какой-то другой способ сделать это?

4b9b3361

Ответ 1

try... catch больше подходит для исключений исключений и исключений вручную. Это действительно не та же парадигма, что и на Java. Предупреждения почти обманчивы в том, что они будут специально игнорировать блоки try... catch.

Чтобы подавить предупреждение, префикс вызова метода (или доступа к массиву) с помощью @.

 $a = array();
 $b = @$a[ 1 ]; // array key does not exist, but there is no error.

 $foo = @file_get_contents( "http://somewhere.com" );
 if( FALSE === $foo ){ 
     // you may want to read on === there;s a lot to cover here. 
     // read has failed.
 }

О, и лучше всего просмотреть Fatal Exceptions также полностью невозможно. Некоторые из них могут быть пойманы в некоторых случаях, но на самом деле вы хотите исправить фатальные ошибки, вы не хотите их обрабатывать.

Ответ 2

catch не может получить фатальную ошибку.

Просто найдите timeout в руководстве для file_get_contents, здесь есть несколько решений, вот один из них:

$ctx = stream_context_create(array(
    'http' => array(
        'timeout' => 1
        )
    )
);
file_get_contents("http://example.com/", 0, $ctx); 

Ответ 3

try..catch будет ловить исключения. Неустранимая ошибка не является исключением.

Если PHP превышает максимальное время выполнения, вы ничего не можете сделать. PHP просто останавливается. То же самое, если у PHP заканчивается память: ничего не поделаешь, чтобы исправить это после того, как это произошло.

Другими словами, исключения - это ошибки, из которых вы можете потенциально восстановить. Неустранимая ошибка, ну, фатальная и невосстановимая.

Ответ 5

Вот несколько хороших деталей: http://pc-technic.blogspot.com/2010/10/php-filegetcontents-exception-handling.html

В основном измените свой код, чтобы сделать следующее:

try {
    @$sgs = file_get_contents("http://www.example.com"); 
    if ($sgs == FALSE)
    {
       // throw the exception or just deal with it
    }
} catch (Exception $e) {
    echo '123'; 
}
 echo '467';

Обратите внимание на использование символа '@'. Это говорит PHP игнорировать ошибки, возникающие в этом конкретном фрагменте кода. Обработка исключений в PHP очень отличается от java/С# из-за "после факта" ее характера.

Ответ 6

file_get_contents не генерирует исключение (и, следовательно, ошибки и предупреждения, которые он бросает, не увлекательны). Вы получаете предупреждение PHP, а затем фатальную ошибку, которая объясняет вам, почему script не продолжается - он превысил лимит для загрузки сценариев, установленных в php.ini.

Ответ 7

Неустранимые ошибки в PHP не пойманы. Обработка ошибок и обработка исключений - это две разные вещи. Однако, если вы склонны справляться с фатальными ошибками в качестве исключения, вам нужно будет настроить свой собственный обработчик ошибок и направить на него все ошибки, сделать обработчик ошибок для исключения ошибок, и вы сможете их поймать.