如果我打开这样的外部文件:
$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);
}
答案 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);
}