【问题标题】:PHP flush problemPHP 刷新问题
【发布时间】:2011-05-08 18:46:11
【问题描述】:

好的,所以我有一个运行在一个漂亮的小无限循环中的 PHP 脚本(不用担心)。我将它用作可以从任何计算机访问的页面来监视我的数据库统计信息。每 2 秒,它会从数据库中获取统计数据并将其显示在屏幕上。

现在,这在我的 Windows 机器上的 XAMPP 上运行良好。我试图让它在我的 linux 网络服务器上运行,使用 PHP 5.3.5 运行 apache2,但由于某种原因它实际上不会显示任何东西(它不会进入空白页面,它只是停留在页面上我在进入监控页面之前,但“工作”轮子在旋转)。我觉得这是某种缓存的东西,它不想显示页面,直到它完成运行脚本(尽管我需要它)。我每 2 秒使用一次 flush() 和 ob_flush(),并确保我的 php.ini 文件中的 output_buffering = off 和 zlib.output_compression = off。

我意识到这个问题似乎被问了很多,但我已经尝试了所有我能找到的关于这个问题的方法,但最终失败了。

注意:就像我说的,这在我使用 apache 和 PHP 5.3.6 安装的 XAMPP 上运行良好。我的问题不是关于如何找到替代品,而是更多关于为什么它在那里工作而不是在我的 linux 网络服务器上。

【问题讨论】:

  • 这并不能回答你的问题,但是为什么你更喜欢这个而不是在 2 秒后用 JS 重定向到自身而不是睡觉呢?这种方法不会出现冲洗问题。
  • 我建议寻找其他方法来返回数据。正如建议的那样,刷新元/Javascript 或者通过控制台脚本和 SSH 会话来执行此操作。你返回什么数据库数据?

标签: php infinite-loop flush


【解决方案1】:

让 php 脚本运行“无限”时间几乎是不合适的。你可以:

  • 将页面设置为使用 html (<meta http-equiv="refresh" content="5">) 重新加载
  • 将其设置为通过 cron 脚本运行和显示
  • 使用 javascript 定期重新加载页面
  • 其他我没想到的东西

所有这些解决问题的方法都可以避免你现在遇到的那种头痛。

【讨论】:

  • 是的,我已经考虑了以上所有内容。问题是脚本会跟踪每 2 秒更新的结果,并显示一段时间内的平均值。我可以让它每 2 秒将结果粘贴到数据库中,然后在加载时查询它们以获得平均值,但这只会添加过多的插入和查询,并且我必须每 2 秒创建一个到数据库的新连接页面重新加载。
  • 您无法将被监控的数据发送到日志文件以供事后分析?它必须用一个无限运行的php文件来完成吗?如果是这样的话,我会感到非常惊讶。
  • 我宁愿避免使用日志文件,因为查看当前速率(即实时数据)对于此应用程序非常重要。
  • 日志文件 + php 后端 + 前端的 ajax 重载 = 尽可能接近实时。让文件无限运行实际上更糟糕,因为 php 连续运行!= 客户端显示显示实时数据。
【解决方案2】:

这是你可以做的,

让您的脚本将参数写入 javascript,这样您就可以使用新参数每 2 秒重新加载一次页面。示例:

<script type='text/javascript'>

setTimeout(function() {
   location.href="http://www.example.com/?jobid=<?php echo $nextJobId ?>";
},2000);
</script>

所以如果你需要对每个 sql 查询做一个 Db 偏移,你可以在 url 中传递那个参数。无限循环似乎是个好主意,但也许你应该重新评估你的代码,看看你是否真的需要它,或者你是否可以这样实现它

【讨论】:

    猜你喜欢
    • 2010-12-25
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多