file_get_contents会优雅地失败吗?

时间:2010-11-09 08:15:16

标签: php file-get-contents

我需要file_get_contents才能容错,例如,如果$url给它提供了 404 ,请在它发出警告之前告诉我它。可以这样做吗?

2 个答案:

答案 0 :(得分:17)

使用HTTP包装器访问远程文件的任何函数就像它是本地的一样,将自动在本地范围内生成一个名为$http_response_header的本地变量。您可以访问该变量,以查找有关在远程文件上调用fopenfile_get_contents ...时发生的情况的信息。

您可以使用@@file_get_contents取消警告。

如果您不关心错误是什么,可以使用@file_get_contents并将结果与​​false进行比较:

$content = @file_get_contents(url);
if ($content === false) { /* failure */ } else { /* success */ }

答案 1 :(得分:6)

您可以先执行其他(HEAD)请求,例如

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

或者您可以告诉file_get_contents忽略任何错误,并通过修改流上下文来强制获取$url的结果:

echo file_get_contents(
    'http://www.example.com/foo.html',
    FALSE,
    stream_context_create(array('http'=>array('ignore_errors' => TRUE)))
)