php在执行时不回显文本

时间:2016-04-17 16:31:40

标签: php

我有一个从上传表单调用的php脚本,该脚本将条目放入数据库。我希望在脚本运行时在浏览器上看到结果。我使用下面的代码,但输出在整个脚本执行完毕后显示。我的服务器是在Ubuntu上运行的Apache2。我想通过使用ob_start();我可以看到脚本执行时的进度。我在代码中做错了吗?

 ob_start();
 foreach ($csvAsArray as $value)
 {
  $username = $value[0];
  $password = $value[1];
  $db->insert($username, $password, $machine);
  echo $username . " Inserted into database! <br />";
  ob_flush();
 }
 echo('done.');
 ob_end_flush();

2 个答案:

答案 0 :(得分:1)

您不需要ob_start:

<?php

 for($i=0;$i<100;$i++)
 {
  echo $i;
  flush();
  ob_flush();
  sleep(1);
 }
 echo 'done.';
 ob_end_flush();

 ?>

来自评论:

  

php flush:刷新PHP的系统写缓冲区等等   后端PHP正在使用(CGI,Web服务器等)。这试图推动   当前输出一直到浏览器有一些警告。齐平()   可能无法覆盖Web服务器的缓冲方案   它对浏览器中的任何客户端缓冲没有影响。它   也不会影响PHP的用户空间输出缓冲机制。这个   意味着你必须同时调用ob_flush()和flush()来刷新   ob输出缓冲区,如果您正在使用它们。

答案 1 :(得分:0)

尝试使用ob_get_contents()来获取数据

   ob_start();
   foreach ($csvAsArray as $value)
   {
     $username = $value[0];
     $password = $value[1];
     $db->insert($username, $password, $machine);
     echo $username . " Inserted into database! <br />";

 }
  $data = ob_get_contents();
  ob_end_clean();
  var_dump($data);