刷新输出到浏览器,回车和覆盖?

时间:2013-08-28 12:17:50

标签: php carriage-return output-buffering

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

基本上,如果我在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行。

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

2 个答案:

答案 0 :(得分:1)

据我所知,你不能。

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

答案 1 :(得分:0)

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

您可以在我的测试应用中看到示例进度条:http://darium.linuxpl.eu/tag/ - 要查看您应上传任何csv文件的进度条,然后点击&#34; generuj&#34;