Will file_get_contents fail gracefully?

后端 未结 2 1984
耶瑟儿~
耶瑟儿~ 2021-01-04 14:07

I need file_get_contents to be fault tolerant, as in, if the $url fed to it returns a 404, to tell me about it before it echos out a warning. C

相关标签:
2条回答
  • 2021-01-04 14:09

    Any function that uses the HTTP wrapper to access a remote file as if it were local will automatically generate a local variable named $http_response_header in the local scope. You can access that variable to find information about what happened in a call to fopen, file_get_contents ... on a remote file.

    You can suppress the warning using @: @file_get_contents.

    If you don't care about what the error was, you can use @file_get_contents and compare the result to false:

    $content = @file_get_contents(url);
    if ($content === false) { /* failure */ } else { /* success */ }
    
    0 讨论(0)
  • 2021-01-04 14:32

    You could do an additional (HEAD) request to find out first, for instance

    $response = get_headers($url);
    if($response[1] === 'HTTP/1.1 200 OK') {
        $content = file_get_contents($url);
    }
    

    Or you can tell file_get_contents to ignore any errors and force-fetch the result of the $url by modifying the stream context:

    echo file_get_contents(
        'http://www.example.com/foo.html',
        FALSE,
        stream_context_create(array('http'=>array('ignore_errors' => TRUE)))
    )
    
    0 讨论(0)
提交回复
热议问题