file_get_contents и коды ошибок

Я загружаю файл из Интернета с помощью file_get_contents. Иногда я получаю сообщение 503 Служба недоступна или 404 Не найдено.

Предупреждение: file_get_contents(http://somewhereoverinternets.com) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP/1.0 503 Служба недоступна в somesourcefile.php в строке 20

Как я могу получить этот код ошибки - 503? 404, 200? Чтобы сделать процесс для этих случаев.


person ABTOMAT    schedule 20.11.2011    source источник
comment
См. это: stackoverflow.com/a/4358136/1304030   -  person sugresmax    schedule 03.04.2012


Ответы (2)


Вместо этого попробуйте завиток:

function get_data($url)
{
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  $data = curl_exec($ch);

  if(!curl_errno($ch)){ 
     return $data;
  }else{
    echo 'Curl error: ' . curl_error($ch); 
  }
curl_close($ch);
}
person Al-Punk    schedule 20.11.2011
comment
Только завиток? Хех, использовать file_get_contents было очень просто. В любом случае, ценю ваш ответ. - person ABTOMAT; 21.11.2011
comment
Привет @Al-Punk - какая польза от curl над file_get_contents в этом примере? (В целом четкий завиток более надежен.) - person itarato; 28.10.2014
comment
@itarato file_get_contents — это простой метод, который выполняет свою работу. cURL имеет множество опций для уточнения вашего запроса. Думайте о file_get_contents как об общественном транспорте, который отправляет вас куда-то, и подумайте о curl в виде Ferrari, который быстрее и доставляет вам больше удовольствия от поездки. - person Al-Punk; 30.10.2014
comment
Спасибо @Al-Punk, мне было интересно, в чем может быть разница. Возможно, у него другой тайм-аут, или заголовки запроса и т. д. Большое спасибо;) - person itarato; 30.10.2014
comment
@Al-Punk Есть ли у вас какие-либо ссылки, связанные с вашим утверждением, что Curl быстрее? - person e-sushi; 29.03.2018
comment
Выполнил быстрый поиск: stackoverflow.com/a/37256025/277861 Я также проводил несколько тестов много раз назад, но нет ориентиров для представления - person Al-Punk; 31.03.2018

На самом деле вы можете получить нужные заголовки, используя file_get_contents. Эти заголовки доступны в массиве $http_response_header, который PHP создает в глобальной области видимости.

Например, следующий код (где URI указывал на несуществующий ресурс на локальном сервере):

$contents = @file_get_contents('http://example.com/inexistent');
var_dump($http_response_header);

дает следующий результат:

array(8) {
  [0]=>
  string(22) "HTTP/1.1 404 Not Found"
  [1]=>
  string(22) "Cache-Control: private"
  [2]=>
  string(38) "Content-Type: text/html; charset=utf-8"
  [3]=>
  string(25) "Server: Microsoft-IIS/7.0"
  [4]=>
  string(21) "X-Powered-By: ASP.NET"
  [5]=>
  string(35) "Date: Thu, 28 Mar 2013 15:30:03 GMT"
  [6]=>
  string(17) "Connection: close"
  [7]=>
  string(20) "Content-Length: 5430"
}
person Arseni Mourzenko    schedule 28.03.2013