Download the contents of a URL in PHP even if it returns a 404

本小妞迷上赌 提交于 2019-11-26 20:14:17

问题


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?


回答1:


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).




回答2:


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.




回答3:


Use cURL instead. It allows much greater control, and will let you read any content retrieved and the status code.




回答4:


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



来源:https://stackoverflow.com/questions/6718598/download-the-contents-of-a-url-in-php-even-if-it-returns-a-404

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!