Intereting Posts
stream_context_set_params не работает с оберткой ssh2.sftp Пользовательская маршрутизация URL с PHP и регулярным выражением PHP: 500 Ошибка для страницы с ошибкой Как отправить запрос Ajax в среду Laravel 5.0? Как вызвать хранимую процедуру в CodeIgniter? Как отображать / запрашивать объект JSON с помощью Android Volley? Как Gammu отправляет php shell_exec windows 7 и xampp? Продолжать скрывать поля ввода HTML при обновлении страницы? PHP-форум, который легко интегрируется с существующим веб-сайтом? Обновлять содержимое автоматически, если база данных изменяется Как получить пул соединений, работающих с подключением к UnixODBC для доступа к PHP-CGI PDO iSeries? Выберите активную запись Codeigniter, левое соединение, количество Каков наилучший метод для запланированных задач в PHP? Как не показывать последнюю скобку в монологическом журнале? Как подсчитать количество просмотров youtube видео с помощью API YouTube Analytics v3?

Почему PHP отправляет все сразу?

Возможный дубликат:
что такое буферизация вывода?

У меня есть некоторый контент, который требуется для создания PHP. Тем временем я хотел бы использовать этот простой трюк JS для отображения сообщения «Загрузка …». Сообщение исчезнет, ​​как только будет создан выход.

<p id="loading_msg">Loading...</p> <h1>Hello</h1> <?php sleep(2); // This is the greedy function call print '<p>This content definitely took a while to be generated !.</p>'; ?> <script type="text/javascript"> var e = document.getElementById("loading_msg"); e.style.display = "none"; </script> 

Проблема заключается не в том, чтобы отправить все до sleep(2); затем блокировка, она будет ждать до того, как будет создана вся страница, а затем отправьте ее все сразу . Это явно нарушает цель моего сообщения «Загрузка …», потому что оно не появляется до истечения 2 секунд. Любые идеи о том, почему, и как я мог бы обойти это?

Related of "Почему PHP отправляет все сразу?"

По умолчанию PHP будет буферизовать ваш вывод и отправлять пользователю меньшее количество больших кусков. Вы можете использовать flush для немедленного отправки содержимого буфера записи пользователю:

 <p id="loading_msg">Loading...</p> <h1>Hello</h1> <?php flush(); sleep(2); 

Это не будет работать, если вы ранее активировали буферизацию вывода, вызывая ob_start или директиву output_buffering директивы php.ini output_buffering 1 .

Использование «flush» может работать на некоторых веб-серверах / браузерах (meagar верен, что он не будет работать, пока включена буферизация вывода, но это не значит, что он будет работать в остальное время).

Веб-сервер должен решить, когда вернуться к закодированному кодированию, – большинство из них начнет отвечать на запросы, когда вы вызываете флеш, пока вы не сжимаете выходной поток. Затем браузер должен решить, когда он начнет показывать неполный ответ, а поведение будет зависеть от содержимого. Например, никто не начнет рендеринг таблицы до тех пор, пока не будет закрыт тег.

Лучшее решение, пытающееся обработать его на принимающей странице, должно обрабатывать его на странице отправки – например, с помощью litebox для отображения сообщения. В качестве альтернативы сообщение может быть представлено на промежуточной странице, которая делает перенаправление на сгенерированный контент.