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.
Your server may be preventing you from opening a file located at a URL using file_get_contents. if file_get_contents() returning false then it could not read the file. If the value is NULL then the function itself is disabled.
The file_get_contents() reads a file into a string. This function is the preferred way to read the contents of a file into a string. It will use memory mapping techniques, if this is supported by the server, to enhance performance.
Sometimes file_get_contents on larger request need over 5 seconds when cURL need only from 1.4 to 1.9 seconds what is double faster.
This function is similar to file(), except that file_get_contents() returns the file in a string, starting at the specified offset up to length bytes. On failure, file_get_contents() will return false . file_get_contents() is the preferred way to read the contents of a file into a string.
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"
}
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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With