在我使用nginx和php-fpm之前,我使用了Apache,所以当我只想运行我的一个cron作业而没有时间执行限制时,我在PHP代码中使用了这些行:
set_time_limit(0);
ini_set('max_execution_time', 0);
但是在我从Apache迁移到nginx之后,这段代码不起作用。我知道如何更改nginx.conf
以增加最长执行时间。
但我想用PHP代码处理这个问题。有办法吗? 我想只指定一个可以在没有时间限制的情况下运行PHP代码的文件。
答案 0 :(得分:17)
试试这个:
使用 Nginx
增加PHP脚本执行时间您可以按照以下步骤增加超时值。 PHP默认为30秒。 :强>
如果要将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文件中更改它。