【问题标题】:PHP for loop working in command line execution but not in web browserPHP for 循环在命令行执行中工作,但不在 Web 浏览器中
【发布时间】:2014-07-01 06:56:04
【问题描述】:

我尝试了一项活动来检查是否有

> FOR/WHILE 循环

如果遍历几百万条记录,则失败与否 ....

我的活动

我在一个表中有超过 1000000 条记录,如果我获取它们并打印它们

通过for循环并使用命令行执行此脚本,它成功运行..

但是当我在网络浏览器中尝试它时,它卡住并关闭了我的浏览器......

所以我想知道这是 PHP 的失败(显然不是在命令行中工作)..

或者是WEB SERVER故障???

如果我必须在实时网络应用程序中遇到这种情况怎么办??

如果是,我应该切换到更强大的网络服务器,然后是哪个...??

【问题讨论】:

  • in real time web application,没有。您从不想打印数百万行,听说过分页吗?
  • 如果我需要合并来自多个表的数据怎么办?连接是没用的,因为我需要手动获取/处理这些记录,因为它们有特殊的操作要执行......显然我不会打印数百万条记录但我需要计算它们(用于获取页数),因为它需要相同的循环......我知道它有点难以消化,但这是我能做到的唯一方法......无论如何谢谢......
  • 为了解决你只从数据集中返回你想要的东西的问题,为了获得分页的总计数你做一个SELECT COUNT..不要获取所有行然后计算它们在 php 中。
  • 我必须对记录执行一些特殊的逻辑过滤,所以在这种情况下我不能使用 SQL 的 where 操作,因此 COUNT 在这种情况下将不起作用。
  • 所以它实际上只是一个XY problem,因为您无法优化非规范化数据集上的 sql 查询。

标签: php apache webserver


【解决方案1】:

我猜您遇到了最大执行时间限制,该限制在命令行上是无限制的,但在 Web 服务器上默认为 30 秒。尝试在脚本开头添加以下行以消除限制:

set_time_limit(0);

来自官方phpdocs

ma​​x_execution_time

这设置了以秒为单位的最长时间 脚本在被解析器终止之前被允许运行。这个 有助于防止编写不佳的脚本占用服务器。这 默认设置为 30。从命令行运行 PHP 时 默认设置为 0。

【讨论】:

  • 感谢您提供如此有用的信息,它至少适用于 100 万条记录(我试过)。再次感谢您
【解决方案2】:

如果你想在浏览器上打印 1 000 000 条记录,你会遇到麻烦的......

首先 - FuzzyTree 所说的 - 执行时间。但如果你说它在cli 中有效,我想这不是问题。

这种数据量的问题可能是浏览器,它根本无法处理那么多!在尝试访问该页面时查看您的 CPURAM 使用情况。

如果您真的需要显示用户数百万条记录,请使用分页或在用户到达页面底部时使用ajax 加载新记录。

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多