Я сделал длинный скрипт на PHP как таковой:
ignore_user_abort(true); set_time_limit(0);
Он отлично работает в фоновом режиме, даже если я закрываю страницу. Моя проблема в том, что я не могу открыть другие файлы PHP до тех пор, пока этот скрипт не закончит работать в фоновом режиме. Как я могу решить эту проблему?
Когда скрипт PHP использует сеансы, PHP блокирует файл сеанса до завершения скрипта. Запрос страницы, который пытается использовать заблокированный сеанс, блокируется до тех пор, пока файл сеанса не будет выпущен. PHP делает это так, что сеансы остаются в согласованном состоянии. Цитата из PHP ошибка # 31464 :
[2005-01-10 08:13 UTC] derick at php dot net
Это действительно не ошибка, для расширения сеанса необходимо заблокировать файл сеанса, чтобы одновременные обновления не могли повредить файл. Это означает, что все сценарии, использующие один и тот же файл сеанса, должны быть сериализованы. Для повышения производительности вы можете использовать http://php.net/session_write_close, как только вы закончите чтение / настройку переменных сеанса, что приведет к удалению блокировки файла.
Простейшим обходным решением, описанным выше, и здесь также является:
session_start()
session_write_close()
Как упоминалось в комментариях, сеансы являются проблемой – это связано с тем, что файл сеанса заблокирован.
Используйте session_write_close()
в своем длинном сценарии, чтобы разблокировать файл сеанса, но обратите внимание, что вы не можете использовать переменные $_SESSION
в этом конкретном скрипте впоследствии.