Прежде чем использовать nginx и php-fpm, я использовал Apache, поэтому, когда я хотел, чтобы только один из моих заданий cron выполнялся без ограничения времени выполнения, я использовал эти строки в своем PHP-коде:
set_time_limit(0); ini_set('max_execution_time', 0);
но после того, как я перешел из Apache в nginx, этот код не работает. Я знаю, как изменить nginx.conf
чтобы увеличить максимальное время выполнения.
Но я хочу обработать это с помощью php-кода. Есть ли способ? Я хочу указать только один файл, который может запускать PHP-код без ограничения по времени.
Попробуй это:
Увеличьте время выполнения скрипта PHP с помощью Nginx
Вы можете выполнить приведенные ниже шаги, чтобы увеличить значение таймаута. PHP по умолчанию – 30 секунд. :
Если вы хотите изменить максимальное время выполнения для php-скриптов с 30 секунд (по умолчанию) до 300 секунд.
vim /etc/php5/fpm/php.ini
Задавать…
max_execution_time = 300
В Apache приложениям, использующим PHP в качестве модуля выше, было бы достаточно. Но в нашем случае нам нужно сделать это изменение еще на двух местах.
Изменения в PHP-FPM
Это необходимо только в том случае, если ранее у вас уже не был указан параметр request_terminate_timeout. Он комментируется по умолчанию и принимает значение max_execution_time, найденное в php.ini
Редактировать…
vim /etc/php5/fpm/pool.d/www.conf
Задавать…
request_terminate_timeout = 300
Изменения в конфигурации Nginx
Чтобы увеличить срок для example.com
vim /etc/nginx/sites-available/example.com location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_read_timeout 300; }
Если вы хотите увеличить лимит времени для всех сайтов на вашем сервере, вы можете отредактировать основной файл nginx.conf:
vim /etc/nginx/nginx.conf
Добавить в раздел http {..}
http { #... fastcgi_read_timeout 300; #... }
Обновить PHP-FPM и Nginx
Не забудьте сделать это, чтобы изменения, которые вы внесли, вступят в силу:
service php5-fpm reload service nginx reload
или попробуйте это
fastcgi_send_timeout 50; fastcgi_read_timeout 50;
У fastcgi есть собственный набор тайм-аутов и проверок, чтобы предотвратить его отключение при заблокированном процессе. Они могли бы взорваться, если вы, например, установили ограничение времени выполнения php на 0 (без ограничений), а затем случайно создали бесконечный цикл. Или если вы использовали какое-то другое приложение помимо PHP, у которого не было никаких собственных средств защиты от тайм-аута, и это не удалось.
Я думаю, что если у вас есть php-fpm и nginx, «вы не можете» установить это время только с PHP.
Что вы можете сделать, так это перенаправление с параметрами, указывающими, где продолжить, но вы должны контролировать время выполнения вашего скрипта, чтобы избежать таймаута.
Если ваш процесс запускается в окне браузера, то сделайте это с помощью Javascript, так как браузер может ограничить количество переадресаций … или сделать это с помощью ajax.
Надеюсь, это поможет.
Вы можете добавить request_terminate_timeout = 300 в конфигурацию пула php-fpm вашего сервера, если вы попробуете все решения здесь.
ini_set('max_execution_time', 0);
сделайте это, если «Безопасный режим» выключен
set_time_limit(0);
Поместите это в начало своего PHP-скрипта и освободите свой скрипт!
Примечание. Если ваша установка PHP работает в безопасном режиме, вы можете изменить ее только из файла php.ini.