file_get_contents и коды ошибок - PullRequest
       22

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

5 голосов
/ 21 ноября 2011

Я загружаю файл из Интернета с 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? Чтобы сделать процесс для этих случаев.

Ответы [ 2 ]

34 голосов
/ 28 марта 2013

Вы действительно можете получить нужные заголовки при использовании 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"
}
6 голосов
/ 21 ноября 2011

Попробуйте вместо этого curl:

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);
}
...