我有这个循环进行长轮询:
$time = time(); //send a blank response after 15sec
while((time() - $time) < 15) {
$last_modif = filemtime("./logs.txt");
if($_SESSION['lasttime'] != $last_modif) {
$_SESSION['lasttime'] = $last_modif;
$logs = file_get_contents("./logs.txt");
print nl2br($logs);
ob_flush();
flush();
die();
}
usleep(10000);
}
问题是:即使修改了logs.txt,也永远不会在while循环的中间输入“if”条件。我必须等待15秒,直到下一次调用此文件以获取更新的内容(因此它成为常规的“setTimeout样式”AJAX轮询,而不是长轮询)。知道为什么吗?
答案 0 :(得分:3)
这是因为filemtime()函数:其结果被缓存。因此,每次执行循环时,时间戳都相同,持续15秒。
我自己没试过,但是according to w3cschools:
缓存此函数的结果。使用clearstatcache()清除缓存。
希望有所帮助!