首页 > 解决方案 > 脚本执行时打印

问题描述

我有这个代码片段:

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_命令的方法,但都没有奏效。有任何想法吗?

标签: phpprintingoutput

解决方案


在每个打印行之后,您必须放置flush(),因此内容会立即打印出来。请记住,浏览器需要显示一些最小数据(大约 0.5Kb)。我把 ob_flush() 和 flush() 都放了,因为这样你就可以确定输出会显示出来。有关 flush() 和 ob_flush() 的更多信息,您可以在本主题PHP 缓冲区 ob_flush() 与 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();
}

推荐阅读