我在这里尝试输出缓冲并且卡在回车、覆盖上。
基本上,如果我在 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行。
如何在浏览器输出中回车以强制行覆盖?