设置ini max_execution_time不起作用

bab*_*ian 8 php nginx

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

set_time_limit(0);
ini_set('max_execution_time', 0); 
Run Code Online (Sandbox Code Playgroud)

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

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

Rav*_*xan 18

试试这个:

使用Nginx增加PHP脚本执行时间

您可以按照下面给出的步骤来增加超时值.PHP默认为30秒.:

php.ini中的变化

如果要将php脚本的最大执行时间限制从30秒(默认)更改为300秒.

vim /etc/php5/fpm/php.ini
Run Code Online (Sandbox Code Playgroud)

组…

max_execution_time = 300
Run Code Online (Sandbox Code Playgroud)

在Apache中,运行PHP作为上述模块的应用程序就足够了.但在我们的案例中,我们需要在另外2个地方进行此更改.

PHP-FPM的变化

只有在您之前已经取消注释了request_terminate_timeout参数时才需要这样做.它默认被注释,并获取php.ini中找到的max_execution_time的值

编辑…

vim /etc/php5/fpm/pool.d/www.conf
Run Code Online (Sandbox Code Playgroud)

组…

request_terminate_timeout = 300
Run Code Online (Sandbox Code Playgroud)

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; 
}
Run Code Online (Sandbox Code Playgroud)

如果要增加服务器上所有站点的时间限制,可以编辑主nginx.conf文件:

vim /etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)

在http {..}部分添加以下内容

http {
    #...
        fastcgi_read_timeout 300; 
    #...
}
Run Code Online (Sandbox Code Playgroud)

重新加载PHP-FPM和Nginx

不要忘记这样做,以便您所做的更改将生效:

service php5-fpm reload
service nginx reload
Run Code Online (Sandbox Code Playgroud)

或试试这个

fastcgi_send_timeout 50;
fastcgi_read_timeout 50;
Run Code Online (Sandbox Code Playgroud)

fastcgi有自己的一组超时和检查,以防止它在锁定的进程中停止.如果你将php的执行时间限制设置为0(无限制)然后意外地创建了一个无限循环,他们会启动.或者,如果您运行除了PHP之外的其他一些应用程序,它们没有任何自己的超时保护而且失败了.