Запуск довгих скриптів на php

Хоча запуск довгих скриптів на php (від 5 хв і більше) з різних причин зазвичай вважається небажаним, в деяких ситуаціях це може виручити. Простий приклад: при xml-імпорті Інфоблоки у Бітрікс з 500 властивостями і 10000 елементами, стандартного максимального часу виконання може бути недостатньо - хоча скрипт і виконується крок за кроком, але може, наприклад, зависнути, на створенні допоміжних індексів.

У цій статті розглянемо запуск довгих php скриптів на apache + nginx і розглянемо також обмеження браузерів.

Найперше, що необхідно перевірити - це налаштування php "max_execution_time" і "session.gc_maxlifetime" (максимальний час виконання скрипта і час сесії відповідно). Її можна встановити з htaccess (параметри встановлюються в секундах):

а також безпосередньо з php скрипта:

або, звичайно ж, з php.ini

Однак, навіть якщо встановити велике значення max_execution_time, при встановленому nginx, якщо час ще не минув, ви можете отримати повідомлення про помилку подібне до цього:

504 Gateway Timeout error using Nginx

Дану ситуацію можна виправити, відредагувавши файл конфігурації nginx (на системах Debian знаходиться тут - /etc/nginx/nginx.conf):

Для тестування описаних мною налаштувань, я приведу тут два скрипта - простий запуск сторінки і отримання з використанням ajax (це може бути важливо, тому що настройки браузера можуть відрізнятися для отримання простих сторінок і засобами XHR).


Скрипт із застосуванням ajax: