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

前端 未结 4 1015
半阙折子戏
半阙折子戏 2020-12-05 11:06

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

相关标签:
4条回答
  • 2020-12-05 11:52

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

    0 讨论(0)
  • 2020-12-05 11:54

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

    0 讨论(0)
  • 2020-12-05 11:56

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

    0 讨论(0)
  • 2020-12-05 11:58

    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.

    0 讨论(0)
提交回复
热议问题