【发布时间】:2017-06-05 07:03:52
【问题描述】:
我正在尝试通过 PHP 处理大数据(100 000 000 条记录)。我正在从不同的服务器下载每条记录,然后进行一些文本检查,并可能将 10% 的适当记录插入我的数据库(MySQL)中。我的问题是:
网络浏览器刚刚完成,处理被提前中断
每次 xy 检查后,我想在浏览器中打印 适当的记录,但没有打印任何内容
MySQL 没问题。看起来浏览器可以在脚本完成后打印一些东西,但我想在短时间内中断该脚本(线程),通过浏览器打印我的结果然后继续。在处理数据浏览器被“冻结”。有任何想法吗?
示例:
for ($i=0; $i<100000000; $i++) {
if (($i % 1000) == 0) { //every 1000th iteration
echo $i; <=== HERE I need interrupt script and let browser print my result
}
}
【问题讨论】:
-
试试
sleep()函数 -
浏览器只会在完成执行时打印任何东西——在完成那么多循环之后,但在 cli 上你可以看到..
-
在您的
echo $i;之后,您需要flush();ob_flush();。我不会发布答案,您使用浏览器和 PHP 处理 1 亿条记录的设计决定很糟糕。但是,您确实问过如何输出一个块,这就是您的做法。不使用睡眠,因为这会浪费 CPU 周期。浏览器被“冻结”(冻结),因为这就是 HTTP 的工作方式——您发送 请求,然后等待 响应。在 PHP 处理完所有 1 亿条记录之前,您的响应不会到达。