Робота зі з'єднаннями
Статус з'єднання зберігається внутрішніми механізмами PHP. Нижче перераховані чотири можливі стани:
- 0 - NORMAL
- 1 - ABORTED
- 2 - TIMEOUT
- 3 - ABORTED та TIMEOUT
Під час штатного виконання PHP-скрипту встановлено статус NORMAL. Якщо віддалений клієнт розірвав з'єднання, статус змінюється на ABORTED. Найчастіше від'єднання віддаленого клієнта відбувається при натисканні кнопки "Stop" у браузері. Якщо досягається встановлений часовий ліміт (ознайомтеся з функцією set_time_limit()), буде встановлено статус TIMEOUT.
Ви можете вирішувати, чи призводить відключення клієнта до завершення вашого скрипту. Іноді буває необхідно, щоб скрипт виконався до кінця, навіть якщо відсутня віддалений браузер, якому адресовано весь висновок. За замовчуванням скрипт завершує роботу при відключенні клієнта. Ця поведінка може бути змінена за допомогою опції ignore_user_abort в конфигурационном файле php.ini. Такого же результата можно добиться, указавphp_value ignore_user_abort
у конфігураційному файлі Apache httpd.conf або скориставшись функцією ignore_user_abort(). Якщо ви не вказали на необхідність ігнорувати розрив з'єднання з клієнтом, виконання скрипту буде перервано. Винятком є той випадок, якщо використовуючи register_shutdown_function(), ви вказали спеціальну функцію, що викликається після завершення скрипта. У такому випадку після того, як користувач натиснув кнопку "Stop" у своєму браузері, при першій спробі що-небудь вивести PHP виявляє, що з'єднання з клієнтом було втрачено, і викликає завершальну функцію. Ця функція також викликається при нормальному завершенні роботи вашого скрипта, тому для того, щоб виконати деякі специфічні дії при від'єднанні клієнта, вам знадобиться функція connection_aborted(), яка повертає **true
**якщо з'єднання було розірвано.
Виконання вашого скрипта також може бути перервано вбудованим таймером. Стандартне обмеження часу становить 30 секунд, змінити його можна за допомогою директиви max_execution_time у конфігураційному файлі php.ini. Такого ж результату можна досягти, додавши php_value max_execution_time
у конфігураційний файл Apache httpd.conf або скориставшись функцією set_time_limit(). При досягненні скриптом тимчасового ліміту виконання скрипту переривається і викликається завершальна функція, якщо вона була вказана. Уточнити причину завершення скрипту можна за допомогою функції connection_status(), яка повертає 2, якщо скрипт був перерваний для досягнення тимчасового обмеження.
Єдине, що слід помітити - що обидва статуси: ABORTED і TIMEOUT - можуть бути встановлені одночасно. Це може статися в тому випадку, якщо ви явно вказали на необхідність ігнорувати від'єднання віддаленого клієнта. У такому випадку після розриву з'єднання, відзначивши цей факт, PHP продовжить виконання скрипту, і при досягненні тимчасового ліміту буде викликана завершальна функція, якщо така була вказана. У цій точці ви можете виявити, що connection_status() поверне значення 3.