Почему fopen возвращает недопустимый дескриптор, когда сервер возвращает ошибку

#php #http

#php #http

Вопрос:

Когда сервер возвращает любую ошибку (401, 405 и т.д.), fopen возвращает недопустимый. Есть ли способ получить тело ответа?

Ответ №1:

Используйте контекст (через stream_context_create) и параметр контекста ignore_errors, который «Извлекает содержимое даже при кодах состояния сбоя.«:

 $options = array(
    'http' => array(
        'ignore_errors' => true,
    ),
);

$context = stream_context_create($options);

$handle = fopen('http://url/', 'r', false, $context);
  

Ответ №2:

А еще лучше, используйте вместо этого расширение cURL. Более высокая производительность, более детализированный контроль над его поведением, а также более мощный — вы сможете получить точный код состояния HTTP в этом приведении.

Вот хороший пример:http://php.net/curl.examples-basic

Вот полная документация:http://php.net/book.curl