Set ini max_execution_time doesn't work

2019-01-23 18:59发布

Before I use nginx and php-fpm, I used Apache, so when I wanted only one of my cron jobs to run without time execution limitation, I used these lines in my PHP code:

set_time_limit(0);
ini_set('max_execution_time', 0); 

but after I migrated from Apache to nginx, this code doesn't work. I know ways to change nginx.conf to increase maximum execution time.

But I want to handle this with php code. Is there a way? I want to specify only one file that can run PHP code without time limitation.

标签: php nginx
4条回答
女痞
2楼-- · 2019-01-23 19:32

You can add request_terminate_timeout = 300 to your server's php-fpm pool configuration if you are tried all of solutions here.

查看更多
迷人小祖宗
3楼-- · 2019-01-23 19:42

Try This:

Increase PHP script execution time with Nginx

You can follow the steps given below to increase the timeout value. PHP default is 30s. :

Changes in php.ini

If you want to change max execution time limit for php scripts from 30 seconds (default) to 300 seconds.

vim /etc/php5/fpm/php.ini

Set…

max_execution_time = 300

In Apache, applications running PHP as a module above would have suffice. But in our case we need to make this change at 2 more places.

Changes in PHP-FPM

This is only needed if you have already un-commented request_terminate_timeout parameter before. It is commented by default, and takes value of max_execution_time found in php.ini

Edit…

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

Set…

request_terminate_timeout = 300

Changes in Nginx Config

To increase the time limit for example.com by

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; 
}

If you want to increase time-limit for all-sites on your server, you can edit main nginx.conf file:

vim /etc/nginx/nginx.conf

Add following in http{..} section

http {
    #...
        fastcgi_read_timeout 300; 
    #...
}

Reload PHP-FPM & Nginx

Don’t forget to do this so that changes you have made will come into effect:

service php5-fpm reload
service nginx reload

or try this

fastcgi_send_timeout 50;
fastcgi_read_timeout 50;

fastcgi has it's own set of timeouts and checks to prevent it from stalling out on a locked up process. They would kick in if you for instance set php's execuction time limit to 0 (unlimited) then accidentally created an infinite loop. Or if you were running some other application besides PHP which didn't have any of it's own timeout protections and it failed.

查看更多
劳资没心,怎么记你
4楼-- · 2019-01-23 19:44
ini_set('max_execution_time', 0);

do this if "Safe Mode" is off

set_time_limit(0);

Place this at the top of your PHP script and let your script loose!

Note: if your PHP setup is running in safe mode, you can only change it from the php.ini file.

查看更多
戒情不戒烟
5楼-- · 2019-01-23 19:49

I think that if you have php-fpm and nginx "you can't" set this time only from PHP.

What you could do is a redirect with the parameters indicating you where to continue, but you must control the time that your script is running to avoid timeout.

If your process runs in a browser window, then do it with Javascript the redirect because the browser could limit the number of redirects... or do it with ajax.

Hope that helps.

查看更多
登录 后发表回答