【问题标题】:Print while script is executing脚本执行时打印
【发布时间】:2019-04-01 13:30:52
【问题描述】:

我有这个代码sn-p:

foreach ($data as $key => $value) {
  $result = $this->_restFetch($value);
  $mode[$key] = $result[0]->extract;
}

只是在 for 循环中运行的一些基本代码,向某些 API 发送请求。 完成脚本需要时间,所以我想在脚本执行时向用户输出一些文本,如下所示:

foreach ($data as $key => $value) {
   print "Started importing $value \r\n";
   $result = $this->_restFetch($value);
   $mode[$key] = $result[0]->extract;
   print "Finished importing $value \r\n"; 
}

我尝试了各种使用ob_ 命令的方法,但都没有奏效。 有什么想法吗?

【问题讨论】:

  • 什么是$value?大批?字符串?
  • 尝试在要打印的每一行之后调用flush()

标签: php printing output


【解决方案1】:

在每行打印之后,你必须放置flush(),所以内容会被立即打印出来。请记住,浏览器需要显示一些最小数据(大约 0.5Kb)。我把 ob_flush() 和 flush() 都放了,因为这样你就可以确定输出会显示出来。有关 flush() 和 ob_flush() 的更多信息,请参阅本主题 PHP buffer ob_flush() vs. flush()

usleep 函数可用于延迟代码执行以进行调试。

foreach ($data as $key => $value) {
   print "Started importing $value \r\n";
   usleep(3600); // if you are debugging, otherwise just comment this part
   ob_flush();
   flush();

   $result = $this->_restFetch($value);
   $mode[$key] = $result[0]->extract;
   print "Finished importing $value \r\n"; 
   usleep(3600); // if you are debugging, otherwise just comment this part
   ob_flush();
   flush();
}

【讨论】:

  • 是的,谢谢。问题是我在脚本的开头有 ob_start,在删除之后,并应用您的解决方案打印工作。
猜你喜欢
  • 1970-01-01
  • 2022-10-17
  • 1970-01-01
  • 2013-06-06
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2012-04-25
相关资源
最近更新 更多