设置ini max_execution_time不起作用

时间:2014-03-26 11:00:52

标签: php nginx

在我使用nginx和php-fpm之前,我使用了Apache,所以当我只想运行我的一个cron作业而没有时间执行限制时,我在PHP代码中使用了这些行:

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

但是在我从Apache迁移到nginx之后,这段代码不起作用。我知道如何更改nginx.conf以增加最长执行时间。

但我想用PHP代码处理这个问题。有办法吗? 我想只指定一个可以在没有时间限制的情况下运行PHP代码的文件。

4 个答案:

答案 0 :(得分:17)

试试这个:

使用 Nginx

增加PHP脚本执行时间

您可以按照以下步骤增加超时值。 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参数时才需要这样做。它默认被注释,并获取在php.ini

中找到的max_execution_time的值

编辑...

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之外的其他一些应用程序,它们没有任何自己的超时保护而且失败了。

答案 1 :(得分:2)

我认为如果你有php-fpm和nginx"你可以'#34;仅从PHP设置此时间。

您可以做的是重定向,其中的参数指示您要继续的位置,但您必须控制脚本运行的时间以避免超时。

如果您的流程在浏览器窗口中运行,那么使用Javascript进行重定向,因为浏览器可能会限制重定向的数量......或者使用ajax执行此操作。

希望有所帮助。

答案 2 :(得分:0)

如果您在这里尝试了所有解决方案,可以将 request_terminate_timeout = 300 添加到服务器的php-fpm池配置中。

答案 3 :(得分:-1)

ini_set('max_execution_time', 0);

如果"安全模式" 关闭

,请执行此操作
set_time_limit(0);

将它放在PHP脚本的顶部,让脚本松开!

注意: 如果您的PHP设置在安全模式下运行,则只能从php.ini文件中更改它。