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.

回答1:

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.



回答2:

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.



回答3:

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



回答4:

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.



标签: php nginx