检查file_get_contents

时间:2014-08-10 18:59:57

标签: php json file-get-contents

如果我打开这样的外部文件:

$source = @file_get_contents('http://somewebsite.com/todaysinfo/');
$decode = json_decode($source, true);

我应该如何检查http呼叫是否成功(向下翻页或其他)?

if ($source) { // will this re-load the page and check for TRUE return?

   // success

}

或者可以/我应该这样做(立即设置和检查来源)

if ($source = @file_get_contents('http://somewebsite.com/todaysinfo/')) {

   // success
   $decode = json_decode($source, true);

}

2 个答案:

答案 0 :(得分:2)

if ($source) { // will checking like this add a re-load?

不,它不会.. 并且由于file_get_contents在失败时返回false,因此它是一种很好的测试方法,除了只包含空格0或空白的页面外,也将被视为失败。这可能不是你想要的。

在这种情况下,你想做:

if ($source !== false) {

答案 1 :(得分:2)

要检查服务器是否未返回HTTP 200,您应该使用cURL,因为file_get_contents()不关心HTTP代码并且只要远程主机没有关闭就返回任何内容。

$ch = curl_init('http://somewebsite.com/todaysinfo/');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if(curl_errno($ch) == 0 AND $http == 200) {
    $decode = json_decode($data, true);
}

编辑:只需使用file_get_contents()并检查返回的字符串是否为空。

$source = file_get_contents('http://somewebsite.com/todaysinfo/');
if($source !== false AND !empty($source)) {
    $decode = json_decode($source, true);
}