it-roy-ru.com

Установить 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 без ограничения времени.

7
babak faghihian

Попробуй это:

Увеличьте время выполнения скрипта PHP с помощью Nginx

Вы можете следовать приведенным ниже шагам, чтобы увеличить значение тайм-аута. PHP по умолчанию 30 с. :

Изменения в php.ini

Если вы хотите изменить максимальный лимит времени выполнения для скриптов php с 30 секунд (по умолчанию) до 300 секунд.

vim /etc/php5/fpm/php.ini

Задавать…

max_execution_time = 300

В Apache достаточно приложений, выполняющих PHP в качестве модуля выше. Но в нашем случае мы должны сделать это изменение еще в 2 местах.

Изменения в PHP-FPM

Это необходимо только в том случае, если у вас уже был необкомментированный параметр request_terminate_timeout. Он комментируется по умолчанию и принимает значение max_execution_time, найденное в php.ini.

Правка…

vim /etc/php5/fpm/pool.d/www.conf

Задавать…

request_terminate_timeout = 300

Изменения в Nginx Config

Чтобы увеличить срок для 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, у которого не было собственной защиты по таймауту, и оно не удалось. 

17
Ravi Delixan

Я думаю, что если у вас есть php-fpm и nginx, «вы не можете» установить это время только из PHP.

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

Если ваш процесс выполняется в окне браузера, сделайте это с Javascript-редиректом, потому что браузер может ограничить количество перенаправлений ... или с помощью ajax.

Надеюсь, это поможет.

2
Beto Aveiga

Вы можете добавить request_terminate_timeout = 300 к конфигурации пула php-fpm вашего сервера, если вы попробовали все решения здесь.

0
Berkay Yıldız