0

我在这里尝试输出缓冲并且卡在回车、覆盖上。

基本上,如果我在 CLI 中运行此代码段:

<?php

$times = 5000;

for ($i = 1; $i <= $times; $i++)
{
    echo chr(13) . sprintf('Running step %d/%d...', $i, $times);
}

它将停留在第 1 行并用实际步骤信息覆盖内容。

就像,在第一步控制台输出将是:

> php micro.php
Running step 1/5000...

在步骤 3333:

> php micro.php
Running step 3333/5000...

完成后:

> php micro.php
Running step 5000/5000...
>

如您所见,该程序总共只消耗了 1 行的输出。

现在,如果我调整浏览器的脚本并从浏览器请求它:

<?php

header('Content-Type: text/plain; charset=iso-8859-1');

$times = 50000;

for ($i = 1; $i <= $times; $i++)
{
    echo chr(13) . sprintf('Running step %d/%d...', $i, $times);
    flush();
    ob_flush();
}

我在处理脚本时得到输出,但是它没有被覆盖。

就像,在第一步控制台输出将是:

localhost/micro.php:

Running step 1/5000...

在步骤 3333:

localhost/micro.php:

Running step 1/5000...
Running step 2/5000...
Running step 3/5000...
Running step 4/5000...
...
Running step 3333/5000...

完成后:

localhost/micro.php:

Running step 1/5000...
Running step 2/5000...
Running step 3/5000...
Running step 4/5000...
...
Running step 3333/5000...
...
Running step 5000/5000...

总共消耗5001行。

如何在浏览器输出中回车以强制行覆盖?

4

2 回答 2

1

据我所知,你不能。

我看到在浏览器中实现进度条的唯一方法是使用 javascript 和 ajax 请求来轮询服务器的进度状态。

于 2013-08-28T13:47:02.050 回答
0

有某种解决方法:在每次迭代/操作中,您可以刷新覆盖 html 元素内的文本的 javascript。

您可以在我的测试应用程序中看到示例进度条:http: //darium.linuxpl.eu/tag/ - 要查看进度条,您应该上传任何 csv 文件并单击“generuj”

于 2015-10-15T10:49:28.757 回答