Reputation: 24160
I want to download the contents of a URL using PHP, even if the HTTP response code is 404. file_get_contents
will error out, and I wasn't able to find an answer using Google. How can I do this?
Upvotes: 17
Views: 14727
Reputation: 316989
You have to configure the stream wrapper to ignore errors:
ignore_errors
boolean
Fetch the content even on failure status codes. Defaults toFALSE
In other words, do
echo file_get_contents(
'http://stackoverflow.com/foo/bar',
false,
stream_context_create([
'http' => [
'ignore_errors' => true,
],
])
);
and you will get the 404 page.
If you want this to be the default behavior for HTTP streams, use
stream_context_set_default(
array('http' => array(
'ignore_errors' => true)
)
);
Any calls using the HTTP stream wrapper will use these settings then, e.g. you can simply do
echo file_get_contents('http://stackoverflow.com/foo/bar');
If you also want to get the response header, just do
print_r($http_response_header);
after the call. The variable is (re-)populated after each call with a http stream wrapper.
Upvotes: 71
Reputation: 1710
Step 1: check the return code:
$content = file_get_contents("websitelink");
if($content === FALSE) { // handle error here... }
Step 2: suppress the warning by putting an error control operator (i.e. @
) in front of the call to file_get_contents(): $content = @file_get_contents($site);
Upvotes: 0
Reputation: 141827
By default file_get_contents only returns the content of HTTP 200 responses.
With curl you get the headers and the content separately.
As of PHP 5.0, you can also specify a context for file_get_contents
, allowing you to do it without relying on url (See Gordon's answer).
Upvotes: 4