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 answe
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).
Use cURL instead. It allows much greater control, and will let you read any content retrieved and the status code.
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);
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.