PHP长轮询失败

时间:2012-02-21 14:01:48

标签: php long-polling

我有这个循环进行长轮询:

$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轮询,而不是长轮询)。知道为什么吗?

1 个答案:

答案 0 :(得分:3)

这是因为filemtime()函数:其结果被缓存。因此,每次执行循环时,时间戳都相同,持续15秒。

我自己没试过,但是according to w3cschools

  

缓存此函数的结果。使用clearstatcache()清除缓存。

希望有所帮助!