【问题标题】:php is not echoing text while executingphp在执行时没有回显文本
【发布时间】:2016-04-18 01:34:53
【问题描述】:

我有一个从上传表单调用的 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();

【问题讨论】:

标签: php


【解决方案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 输出缓冲区,如果你正在使用它们。

【讨论】:

  • 请提供代码解释,以供其他用户在未来需要帮助解决类似问题
  • phpflush :刷新 PHP 的系统写入缓冲区以及 PHP 正在使用的任何后端(CGI、Web 服务器等)。这试图将当前输出一直推送到浏览器,但有一些警告。 flush() 可能无法覆盖 Web 服务器的缓冲方案,并且它对浏览器中的任何客户端缓冲都没有影响。它也不会影响 PHP 的用户空间输出缓冲机制。这意味着如果您正在使用 ob_flush() 和 flush() 来刷新 ob 输出缓冲区,则必须调用它们。
  • @christophe 如果你能你的答案中解释你的代码会更有帮助
【解决方案2】:

尝试使用 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多