Установить ini max_execution_time не работает

Прежде чем использовать 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.ini

Если вы хотите изменить максимальное время выполнения для 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.