本文目录一览:
- PHP-Fcgi下PHP的执行时间设置方法
- 使用spawn-fcgi,怎么增加php的进程数量
- php5.4.6 (fpm-fcgi)指的什么意思?偶是菜鸟~求指点
- [什么是CGI,FastCGI,PHP-CGI,PHP-FPM,Spawn-FCGI](#什么是cgifastcgiphp-cgiphp-fpm spawn-fcgi)
- php-fcgi.sock怎么增加
PHP-Fcgi下PHP的执行时间设置方法
昨天,一个程序需要导出500条数据,结果发现到150条时,Nginx报出504 Gateway Timeout错误,原来PHP-Fcgi下的设置执行时间与isapi的不同。 一般情况下设置PHP脚本执行超时的时间:
一、在php.ini里面设置
max_execution_time = 1800
二、通过PHP的ini_set
函数设置
ini_set("max_execution_time", "1800");
三、通过set_time_limit
函数设置
set_time_limit(1800);
问题排查记录:
昨天一个程序在导出数据时,Nginx 报出 504 Gateway Timeout 错误。观察发现大约在30秒时超时,虽然 php.ini
中的 max_execution_time
已设置为 300 秒:
max_execution_time = 300
测试页面如下:
echo 'aaa';
set_time_limit(0);
sleep(40);
echo 'aa';
依然超时,说明 set_time_limit
没有生效。
检查 php-fpm.conf
,发现以下配置:
<value name="request_terminate_timeout">30s</value>
根据官方文档说明,request_terminate_timeout
是单个请求的最大执行时间,如果 PHP 脚本没有在 max_execution_time
内完成,则会触发此设置,默认为 5s
,设置为 0s
表示关闭。
最终将 request_terminate_timeout
设置为 0s
,问题解决:
<value name="request_terminate_timeout">0s</value>
补充: 如果前端的 Nginx 使用了 upstream 负载均衡,还需要修改以下参数:
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
使用spawn-fcgi,怎么增加php的进程数量
spawn-fcgi
原本是 Lighttpd 的一部分,现在可以独立使用。它用于启动和管理 FastCGI 进程。
安装 spawn-fcgi
- 32位系统:
rpm -ivh http://centos.alt.ru/repository/centos/5/i386/spawn-fcgi-1.6.3-1.el5.i386.rpm
- 64位系统:
rpm -ivh http://centos.alt.ru/repository/centos/5/x86_64/spawn-fcgi-1.6.3-1.el5.x86_64.rpm
启动 php-cgi 进程
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u apache -g apache -f /usr/bin/php-cgi
参数说明:
-f
:指定 FastCGI 程序路径。-a
:绑定 IP 地址。-p
:绑定端口。-s
:绑定 Unix Socket 路径。-C
:指定产生的 FastCGI 进程数,默认为 5。-P
:指定 PID 文件路径。-u
和-g
:指定运行用户和用户组。
设置开机启动
将上述命令添加到 /etc/rc.local
文件中,实现开机自动启动。
php5.4.6 (fpm-fcgi)指的什么意思?偶是菜鸟~求指点
如果你是新手,建议直接使用集成环境如 XAMPP 或 WampServer。
PHP-FPM 是什么?
PHP-FPM(FastCGI Process Manager)是一个 PHP FastCGI 管理器,专为 PHP 设计。它最初是 PHP 源码的一个补丁,后来被官方集成到 PHP 5.3.3 及以上版本中。
特点:
- 更好的内存和进程管理。
- 支持平滑重载配置。
- 不容易崩溃,无需额外监控。
- 使用
--enable-fpm
参数启用。
对比 Spawn-FCGI:
- Spawn-FCGI 是一个通用的 FastCGI 管理器,最初属于 Lighttpd。
- PHP-FPM 在性能和稳定性上优于 Spawn-FCGI。
什么是CGI,FastCGI,PHP-CGI,PHP-FPM,Spawn-FCGI
CGI(Common Gateway Interface)
CGI 是 HTTP 服务器与后端程序通信的标准接口,每次请求都会 fork 一个新进程,性能较低。
FastCGI
FastCGI 是 CGI 的改进版,常驻内存,避免频繁 fork,性能更高,支持分布式计算。
PHP-CGI
PHP 自带的 FastCGI 实现,功能简单,适合轻量级使用。
PHP-FPM
PHP-FPM 是 PHP 的 FastCGI 管理器,提供更好的进程管理、内存控制和配置热加载,是官方推荐的方式。
Spawn-FCGI
一个通用的 FastCGI 管理器,原属于 Lighttpd,现已独立。适合多种语言,但不如 PHP-FPM 稳定。
php-fcgi.sock怎么增加
Nginx 与 PHP-FPM 通过 php-fcgi.sock
通信,如果该文件出现问题,会导致 502 Bad Gateway 错误。
生成与权限问题:
php-fcgi.sock
在 PHP 启动时生成,关闭时清除。- 默认权限为
rw-rw--
,用户和组为root
。 - 可以在
php-fpm.conf
中配置权限和用户组。
示例配置:
<value name="listen">/var/run/php-fcgi.sock</value>
<value name="listen.owner">www-data</value>
<value name="listen.group">www-data</value>
<value name="listen.mode">0660</value>
确保 Nginx 配置中使用相同的 socket 路径:
fastcgi_pass unix:/var/run/php-fcgi.sock;