【问题标题】:PHP long poll failsPHP长轮询失败
【发布时间】:2012-02-21 14:01:47
【问题描述】:

我有这个循环来长轮询:

$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);
    }

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

【问题讨论】:

  • 我们看不到 $_SESSION['lasttime'] 和 $last_modif 变化的地方,你试试不带 if 并检查它是否有效
  • 对不起,我没有添加它们,因为我知道它们不相关:/ 我的问题得到了回答,再次感谢

标签: php long-polling


【解决方案1】:

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

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

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

希望有帮助!

【讨论】:

  • 你不应该链接到 w3schools,不过谢谢你的回答,就像一个魅力!
  • W3 学校?这似乎是一个奇怪的地方去寻求 PHP 建议。 PHP.net 说了同样的话,所以 w3schools 不可能全是坏事。
  • 是的,这还不算太糟糕,而且我已经打开了网站,因为我需要检查 sql 的另一件事。我有点喜欢它的简洁性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 2013-11-17
  • 2011-09-19
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多