Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
844 views
Welcome To Ask or Share your Answers For Others

1 Answer

You have to configure the stream wrapper to ignore errors:

ignore_errors boolean Fetch the content even on failure status codes. Defaults to FALSE

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...