Печать во время выполнения скрипта - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть следующий фрагмент кода:

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_но никто из них не работал.Есть идеи?

1 Ответ

2 голосов
/ 01 апреля 2019

После каждой строки печати вы должны поставить flush (), чтобы содержимое было распечатано немедленно.Хорошо иметь в виду, что браузер должен иметь минимальные данные для отображения (около 0,5 КБ).Я поставил оба 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...