我在这里尝试输出缓冲并且卡在回车上,覆盖。
基本上,如果我在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行。
如何在浏览器输出中回车以强制换行?
答案 0 :(得分:1)
据我所知,你不能。
我在浏览器中看到实现进度条的唯一方法是使用javascript和ajax请求在服务器上轮询进度状态。
答案 1 :(得分:0)
有某种解决方法:在每次迭代/操作中,您可以刷新覆盖html元素内的文本的javascript。
您可以在我的测试应用中看到示例进度条:http://darium.linuxpl.eu/tag/ - 要查看您应上传任何csv文件的进度条,然后点击&#34; generuj&#34;