Почему я видел бы тайм-ауты выполнения при установке $ _SESSION значения?

Я вижу следующие ошибки в своих журналах ошибок PHP:

PHP Fatal error: Maximum execution time of 60 seconds exceeded in D:\sites\s105504\www\index.php on line 3
PHP Fatal error: Maximum execution time of 60 seconds exceeded in D:\sites\s105504\www\search.php on line 4

Рассматриваемые строки:

index.php:

01 <?php
02 session_start();
03 ob_start();
04 error_reporting(E_All);
05 $_SESSION['nav'] = "range";  // <-- Error generated here

search.php

01 <?php
02 
03 session_start();
04 $_SESSION['nav'] = "range";
05 $_SESSION['navselected'] = 21; // <-- Error generated here

Действительно потребовались бы целых 60 + секунды для присвоения a $_SESSION[] значение?

Платформа:

  • Windows 2003 SP2 + IIS6
  • FastCGI для Windows 2003 (исходная сборка RTM)
  • PHP 5.2.6 Не ориентированная на многопотоковое исполнение сборка

Нет никаких проблем с файлами данных сессии, разрешаемыми на сервере, поскольку сессии истекают. Самое старое sess_XXXXXXXXXXXXXX файл, который я вижу, составляет приблизительно 2 старые часа.

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

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

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

5
задан Charles 24 December 2012 в 22:26
поделиться

1 ответ

Сеансы блокируются. session_start () будет блокировать выполнение до тех пор, пока не получит эксклюзивную блокировку для этого конкретного файла сеанса. Это сделано для предотвращения возникновения проблем с параллелизмом. Вы можете решить эту проблему, выполнив session_write_close () , когда вы закончите сеанс в каждом скрипте.Причина, по которой вы видите это в следующей строке, - это session_start () блоков для> максимального времени выполнения. Поэтому, когда он возвращается, следующая строка выполняется после ограничения по времени, поэтому возникает ошибка.

См .: session_write_close () для получения дополнительной информации

О, и на основании опубликованных вами ошибок ошибка генерируется в ob_start (); и ] $ _ SESSION ['nav'] = "range"; строки соответственно, а не строка 5, которую вы указали в разделе кода ...

9
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: