возможно ли использовать функцию 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 включает специальный заголовок Transfer-Encoding
, который позволяет указать, что страница может быть загружена в куски ( Transfer-Encoding: chunked
), хотя нет гарантии, что браузер сделает это (но большинство браузеров будет) ,
Transfer-Encoding: chunked
заголовок передает браузеру, что веб-сервер заранее не знает Content-Length
.
Хотя обычно вы хотите использовать Ajax для загрузки контента после полной загрузки этой страницы, вы можете использовать этот метод для отображения, например, вывода на терминал в реальном времени, без необходимости использования JavaScript.
См. Этот вопрос о том, как реализовать chunked ответы в PHP.