Пытаетесь отобразить экран загрузки в PHP, но не отображается до тех пор, пока не будет выполнен скрипт? - PullRequest
0 голосов
/ 23 декабря 2011

Я пытаюсь отобразить загрузочное сообщение с анимацией панели загрузки, чтобы люди знали, что скрипт работает.

Однако, несмотря на то, что HTML-код находится в верхней части моего PHP-скрипта, он отображается только после полной загрузки скрипта.

Выполнение сценария занимает около 40 секунд, поскольку он генерирует PDF, вставляет данные в БД, а затем отправляет сообщение MIME на внешний MX (занимает самую длинную часть).

Вот HTML-код, отображающий сообщение о загрузке:

        <div class="grid_16">
                <fieldset>

                    <h2>
                        Processing <img src="img/loading.gif" alt="loading animation">
                    </h2>

                </fieldset>
    </div>
<?php

//rest of php page

Любая идея, как я показываю это пользователю, чтобы он не терял терпение и не начинал нажимать F5 и т. Д.

Спасибо

С Рождеством!

Ответы [ 3 ]

1 голос
/ 23 декабря 2011

Мой друг, PHP отправляет вывод только после завершения интерпретации скрипта (1).Таким образом, вы можете поместить gif на предыдущей странице , запущенный (используя некоторый JavaScript) с событием, которое перемещает пользователя из oldpage.php в slownewpage.php.Таким образом, gif будет оставаться перед пользователем до тех пор, пока PHP не отправит новый результат HTML, и браузер не сможет с чем-то работать.

(1) Если вы не прикажете ему сделать что-то другое с чем-то вроде ob_flush

1 голос
/ 23 декабря 2011

PHP загружается на сервер и затем передается в браузер. Это означает, что до тех пор, пока страница полностью не загрузится на сервер, она не будет передана в браузер для отображения.

Что вам нужно будет сделать, это использовать javascript и ajax. Во-первых, удалите медленный PHP из HTML и покажите страницу. Затем, после этого, загрузите PHP-скрипт через ajax и, как только он завершится, запишите его в документ.

0 голосов
/ 24 декабря 2011

запустите flush(); после части, которую вы хотите напрямую вывести (в пределах php), потому что вы, вероятно, буферизуетесь, особенно если вы распаковываете код.Вы можете загрузить страницу, как сказали другие, и получить результат также с помощью javascript (на самом деле это, вероятно, лучший вариант).

.. могу ли я спросить, почему вы отправляете длинное сообщение во время загрузки страницы?Разве у вас не может быть задание cron (проверяйте каждые несколько секунд, нужно ли что-то отправлять)?Я думаю, что у них есть программы cron для Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...