PHP长轮询失败

PHP长轮询失败,php,long-polling,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'] =

我有一个循环来进行长轮询:

$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);
    }
$time=time()//15秒后发送空白响应
而((time()-$time)<15){
$last_modif=filemtime(“./logs.txt”);
如果($\会话['lasttime']!=$last\u modif){
$\u SESSION['lasttime']=$last\u modif;
$logs=文件获取内容(“./logs.txt”);
打印nl2br($logs);
ob_flush();
冲洗();
模具();
}
美国LEEP(10000);
}

问题是:即使在Log.TXT被修改的情况下,“IF”条件也不会在while循环的中间输入。我必须等待15秒,直到下一次调用此文件才能获得更新的内容(因此它成为常规的“setTimeout样式”AJAX轮询,而不是长轮询)。知道为什么吗?

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

我自己没有试过,但是:

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


希望有帮助

我们看不到$\u SESSION['lasttime']和$last\u modif在哪里更改,您可以在没有if的情况下尝试并检查它是否有效抱歉,我没有添加它们,因为我知道它们不相关:/我的问题得到了回答,再次感谢您不应该链接到w3schools,不过感谢您的回答,非常有用!学校?对于PHP建议来说,这似乎是一个奇怪的地方。说了同样的话,所以w3schools不可能都是坏的。是的,其实也没那么坏,我已经打开了网站,做了另一件事,我需要检查sql。我有点喜欢它的简洁。