Это действительно зависит от того, что делает ваш скрипт и что он отправляет обратно, но если вы можете использовать AJAX, это будет правильный путь. Это не только позволит вам выполнять запрос в течение длительного периода времени, но и не будет связывать браузер, предоставляя пользователю возможность продолжать использовать текущую страницу, пока запрос не будет выполнен.
Лучший способ реализовать что-то подобное, который я нашел, — установить ignore_user_abort и отключить ограничение по времени. Таким образом, вы можете позволить скрипту работать в фоновом режиме. Таким образом, скрипт может продолжать работать, пока пользователь просматривает ваш сайт. Им даже не обязательно оставаться на одной волне. Таким образом, вы запускаете запрос с помощью AJAX, чтобы запустить его. Имейте цикл в этом скрипте, который обновляет ход сеанса пользователя.
ini_set('session.use_cookies', 0); //don't spam the user with cookies for each session_start()
while( ... ) {
session_start();
//update status to the user's session
session_write_close();
//sleep or whatever
}
Очевидно, что это не обязательно должен быть цикл. Вы можете просто закрыть сеанс до того, как начнете обрабатывать информацию, затем открыть его, установить статус и снова закрыть. Только один сценарий может получить доступ к сеансу пользователя за раз, поэтому вам нужно убедиться, что этот процесс не связывает его.
Тогда все, что вам нужно сделать, это создать сценарий, который запускается на страницах вашего сайта, который позволяет пользователю узнать, когда все, что вы делаете, выполнено, и/или предоставляет им файл/вывод/и т.д.
Это освобождает пользователя для продолжения просмотра вашего сайта во время работы вашего скрипта и не заставляет его сидеть на одной странице, уставившись на индикатор загрузки.
person
Brian
schedule
02.03.2012