这是我的代码:
function get_remote_file_to_cache(){
$sites_array = array("http://www.php.net", "http://www.engadget.com", "http://www.google.se", "http://arstechnica.com", "http://wired.com");
$the_site= $sites_array[rand(0, 4)];
$curl = curl_init();
$fp = fopen("rr.txt", "w");
curl_setopt ($curl, CURLOPT_URL, $the_site);
curl_setopt($curl, CURLOPT_FILE, $fp);
curl_exec ($curl);
curl_close ($curl);
}
$cache_file = 'rr.txt';
$cache_life = '15'; //caching time, in seconds
$filemtime = @filemtime($cache_file);
if (!$filemtime or (time() - $filemtime >= $cache_life)){
ob_start();
echo file_get_contents($cache_file);
ob_get_flush();
echo " <br><br><h1>Writing to cache</h1>";
get_remote_file_to_cache();
}else{
echo "<h1>Reading from cache file:</h1><br> ";
ob_start();
echo file_get_contents($cache_file);
ob_get_flush();
}
一切正常,没有问题或惊喜,因为你可以看到它非常简单的代码,但我是CURL的新手,只想在代码中添加一个检查,但不知道如何:
是否有检查从远程站点获取的文件不是404(未找到)页面等但是状态码为200(成功)?
所以基本上,如果填充是状态代码200,则只写入缓存文件。
谢谢!
答案 0 :(得分:1)
在curl_exec
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
答案 1 :(得分:1)
要从cURL句柄获取状态代码,请在curl_exec
之后使用curl_getinfo
:
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
但
时将覆盖缓存的文件$fp = fopen("rr.txt", "w");
无论HTTP代码如何调用,这意味着只有在状态为200时才更新缓存,您需要将内容读入内存,或写入临时文件。如果状态为200,则最后写入真实文件。
也是一个好主意
touch('rr.txt');
在执行cURL之前,以便在当前操作完成之前可能出现的下一个请求也不会尝试将页面加载到页面。