Идентификатор регенерации сеанса превышает максимальное время выполнения?

По какой-то причине иногда я получаю следующую фатальную ошибку из моего PHP-кода при работе на общем сервере:

Неустранимая ошибка: превышено максимальное время выполнения 30 секунд в C:\HostingSpaces[имя пользователя][субдомен]\wwwroot\index.php в строке 8

И эта строка просто:

session_regenerate_id();

Может ли эта проблема быть связана с тем, что код размещается на общем сервере, а ресурсы недоступны? Или есть какая-то другая причина этой проблемы?

Поскольку это общий сервер, я не могу изменить настройки PHP.

ИЗМЕНИТЬ:

Единственная строка перед строкой 8 — это несколько строк require_once для объектов модели. Единственная другая строка — session_start().

Я проверил свои настройки PHP, и в нем указано, что session.save_handler - это файлы как для локальных, так и для основных значений. Поскольку он использует файлы, может ли проблема заключаться в попытке чтения и записи с диска?


person Ivan    schedule 13.04.2012    source источник
comment
Ваши сеансы основаны на файлах или базе данных?   -  person Mike Purcell    schedule 13.04.2012
comment
Можете ли вы предоставить больше кода? Возможно, строки, предшествующие строке 8? Обработчик сеанса по умолчанию использует файлы. Вы можете перепроверить, взглянув на свой phpinfo();. (Ищите session.save_handler.)   -  person ghbarratt    schedule 13.04.2012
comment
Что сказал Габаррат. Вы должны увидеть что-то вроде session.save_handler => files => files. Мне интересно, из-за того, что он находится на общем хосте, есть какое-то ожидание ввода-вывода во время игры.   -  person Mike Purcell    schedule 13.04.2012
comment
@ghbarrat: я обновил свой пост значениями из phpinfo().   -  person Ivan    schedule 15.04.2012


Ответы (1)


Я думаю, что ваша проблема может быть проблемой производительности и ресурсов, как вы подозреваете, но мне кажется странным, что она остановилась только на строке 8. Я предполагаю, что шансы могли бы быть высокими, если бы остальная часть кода была очень минимальной.

Вы пытались изменить код, пытаясь заставить время ожидания происходить в другой строке? Например, вы можете попробовать добавить sleep(25); и посмотреть, не произойдет ли фатальный тайм-аут в этой строке.

Кроме того, вы уверены, что не можете установить максимальное время выполнения? Я подозреваю, что даже если вы не можете изменить общий php.ini, вы можете установить max_execution_time с помощью одного из этих других параметров:

Я считаю, что значение/аргумент для max_execution_time указано в секундах, и если вы установите его равным 0 (ноль), то ограничение времени выполнения НЕ будет использоваться. (Считаете ли вы безопасным использование нуля или нет, зависит от вас.)

person ghbarratt    schedule 17.04.2012