Intereting Posts

PHP: sleep () для определенной строки кода

возможно ли использовать функцию sleep () (или некоторую другую функцию) для ожидания перед выполнением?

Я имею, например:

<div>bla bla</div> <?php $a echo $a; ?> some divs and html <?php $b echo $b; ?> 

Как выполнить первый скрипт php, скажем, через 5 секунд после загрузки страницы, но чтобы показать все остальное при загрузке страницы? Если я использую sleep () перед первым php, он задерживает загрузку всей страницы.

Вы хотите использовать AJAX для этого. Пример использования jQuery:

 <div id="content"> <-- You want to load something here after 5 seconds --> </div> <script type="text/javascript"> setTimeout(function() { $('#content').load("/url/to/your/script.php"); }, 5000); // 5000 is the time to wait (ms) -> 5 seconds </script> 

Это будет загружать выходные данные ( echo ) script.php в div с идентификатором «content». Делая это таким образом, вы позволяете клиенту выполнять всю работу по рендерингу, как уже рекомендовано @GhostGambler

Это не будет блокировать вывод другого содержимого, отправленного исходным скриптом.

Да, вы можете использовать sleep() для задержки выполнения, но так как вывод обычно буферизируется и не отправляется в браузер до тех пор, пока скрипт не завершит результат, это не то, что вам нужно.

Если вы выполняете flush() и ob_flush() сразу после вызова sleep() выходной буфер очищается и отправляется в браузер.

См. http://php.net/manual/en/function.ob-flush.php

Протокол HTTP включает специальный заголовок Transfer-Encoding , который позволяет указать, что страница может быть загружена в куски ( Transfer-Encoding: chunked ), хотя нет гарантии, что браузер сделает это (но большинство браузеров будет) ,

Transfer-Encoding: chunked заголовок передает браузеру, что веб-сервер заранее не знает Content-Length .

Хотя обычно вы хотите использовать Ajax для загрузки контента после полной загрузки этой страницы, вы можете использовать этот метод для отображения, например, вывода на терминал в реальном времени, без необходимости использования JavaScript.

См. Этот вопрос о том, как реализовать chunked ответы в PHP.