ABTOMAT
ABTOMAT

Reputation: 802

file_get_contents and error codes

I'm downloading a file from the web with file_get_contents. Sometimes I get 503 Service Unavailable or 404 Not Found.

Warning: file_get_contents(http://somewhereoverinternets.com) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 503 Service Unavailable in somesourcefile.php on line 20

How can I get this error code - 503 ? 404, 200? To make the process for these cases.

Upvotes: 6

Views: 21012

Answers (2)

Al-Punk
Al-Punk

Reputation: 3659

Try curl instead:

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

Upvotes: 7

Arseni Mourzenko
Arseni Mourzenko

Reputation: 52321

You actually can get the headers you want while using file_get_contents. Those headers are available in an array $http_response_header that PHP creates in global scope.

For example the following code (where the URI was pointing to an inexistent resource on a local server):

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

gives the following result:

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"
}

Upvotes: 40

Related Questions