Я пытаюсь вывести строку обновления во время выполнения цикла, чтобы пользователь знал, что страница не застряла и работает.
Мой код работает на Google App Engine, и часть цикла выглядит следующим образом.
while (($data = fgetcsv($file, 10000, ",")) !== FALSE) {
$STH = $DBH->prepare("INSERT INTO DB");
$STH->execute();
echo "<p>Please wait. How about a glass of water while it is running? </p>";
}
Это часть кода, которая проверяет список пользователей из файла CSV и проверяет, обновлена ли БД с последними изменениями. Так что эта часть является частью вставки. Что происходит сейчас, так это то, что он не будет отображать оператор echo до тех пор, пока весь скрипт не будет выполнен, и я не получу много строк текста.
Мне было интересно, могли бы мы вывести эхо во время выполнения цикла. Когда я гуглял, кажется, что использовались flush () и ob_flush (), но он не работал с движком приложения Google. Некоторые говорят, что используют очереди задач, но не могут найти достойное руководство, которое объясняет, как использовать очереди задач.
Я надеялся, что кто-нибудь сможет помочь создать его для начинающих пользователей, которые хотят использовать очереди задач. Я уверен, что это будет очень полезно, когда человек запускает цикл и получает вывод во время работы.
ссылки на Google документацию
https://cloud.google.com/appengine/docs/php/taskqueue/overview-push
https://cloud.google.com/appengine/docs/php/config/queue
Это не так, как работает HTTP. Вы можете переписать код вашего веб-сервера, а также написать свой собственный браузер для поддержки вашего собственного специальный потоковая версия протокола передачи гипертекста (определена в RFC 2616) который не требует отправки конечного ответа … или вы можете сделать то, что сделал бы здравомыслящий человек, и просто:
отправить ответ с помощью специального ключа, который может использовать браузер пользователя при кратковременной отправке крошечных запросов на сервер
отправляйте крошечный запрос на сервер каждые несколько секунд, чтобы выяснить, завершилось ли вычисление, инициированное пользователем (идентифицируется специальным ключом, возвращаемым при запуске вычисления в первом запросе).
В тот момент, когда вы получите сообщение OK от сервера (например, отправьте обратно ответы JSON, и ответ об успешном выполнении будет { "success": true }
), обновите страницу с данными результата или ссылкой, где она доступна, и т. д.
Я бы потратил не менее 3 месяцев, чтобы изучить, как работает интернет на самом базовом уровне, прежде чем пытаться углубиться в кодирование на платформе, которая предполагает эти базовые знания. Я бы предложил начать Вот.
Других решений пока нет …