PHP长轮询失败
我有这样的循环中长轮询:PHP长轮询失败
$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);
}
的问题是:“如果”条件是从来没有在while循环的中间进入,即使logs.txt被修改。我必须等15秒,直到下一次调用此文件才能获取更新的内容(因此它变成了常规的“setTimeout风格”AJAX轮询,而不是长时间轮询)。任何想法为什么?
这是因为filemtime()函数:其结果被缓存。因此,每次循环执行时,时间戳都相同,持续15秒。
我还没有尝试过自己,但according to w3cschools:
此函数的结果会被缓存。使用clearstatcache()清除缓存。
希望有所帮助!
你不应该链接到w3schools,谢谢你的答案,虽然,就像一个魅力! – Cystack 2012-02-21 14:38:53
W3Schools?这似乎是一个奇怪的地方去寻求PHP建议。 [PHP.net](http://php.net/manual/en/function.filemtime.php)虽然说了同样的事情,所以w3schools不能全部坏。 – 2012-02-21 14:40:58
是的,它并不是那么糟糕,我已经打开了网站的另一件事,我需要检查SQL。我有点喜欢它的简洁。 – Mercutionario 2012-02-21 14:43:54
我们看不到$ _SESSION ['lasttime']和$ last_modif在哪里变化,您在没有if的情况下尝试它并检查它是否可用 – ZiTAL 2012-02-21 14:22:29
对不起,我没有添加它们,因为我知道它们不相关:/ my问题是回答,但再次感谢 – Cystack 2012-02-21 14:39:30