首页 >
系统 >
windows
windows下 解决PHP-CGI 进程崩溃
时间:2018-07-21 18:20:56 点击: 来源: 作者:
使用nginx,碰到php 需要转发给 cgi程序。 关于FastCGI:全称 FastCGI Process Manager,是一种进程管理器,管理 cgi,市面上有很多进程管理器,PHP-FPM就是其中一种。PHP-FPM作为进程管理器,会监听端口,默认为9000,并且监听 ...
使用nginx,碰到php 需要转发给 cgi程序。
全称 FastCGI Process Manager,是一种进程管理器,管理 cgi,市面上有很多进程管理器,PHP-FPM就是其中一种。
PHP-FPM作为进程管理器,会监听端口,默认为9000,并且监听本机,只接收127.0.0.1
linux下通过 netstat -nlpt|grep php-fpm 查看,PHP-CGI 是PHP自带的FastCGI管理器,缺点:
- php-cgi更改 php.ini 配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。
- 直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程)
本篇只讲windows(64位)下,采用nginx,使用php-cgi解析,默认情况下,当 php-cgi 处理php 达到500次,就自动关闭,即不能解析PHP(这你妹也太坑了吧!都PHP7了,这个问题 还存在)
安装xxfpm管理器
下载地址:
或
用到的文件: pthreadGC2.dll , xxfpm.exe
1. xxfpm.exe,解压后可以和nginx放同一目录也可放其他目录 (文件在bin文件夹下)。
2. 找到 pthreadGC2.dll , 将这个文件复制到 C:/Windows/SysWOW64 目录(如果系统是32位的,将dll文件复制到 C:/Windows/System32 下);
3. 新建一个文件 registe.bat,和pthreadgc2.dll同目录,内容如下,完成后双击registe.bat文件运行下:
@echo 开始注册
copy pthreadgc2.dll %windir%/SysWOW64/
regsvr32 %windir%/SysWOW64/pthreadgc2.dll /s
@echo pthreadgc2.dll 注册成功
@pause
4.将下载的xxfpm.exe copy 到nginx目录下(这里以我的目录 d:/nginx 为例)。
5.下载 RunHiddenConsole.exe(用于后台运行nginx)并解压:
start_nginx.bat #文件说明:这里我们仍然以解压到nginx目录为例,-n后面为启动个数,php位置请根据情况调整
@echo off
set PHP_FCGI_MAX_REQUESTS=1000
echo Starting PHP FastCGI...
RunHiddenConsole d:/nginx/xxfpm.exe "d:/php/php-cgi.exe -c d:/php/php.ini" -n 5 -i 127.0.0.1 -p 9000
echo Starting nginx...
RunHiddenConsole d:/nginx/nginx.exe -p d:/nginx
exit
stop_nginx.bat
@echo off
echo Stopping nginx...
taskkill /F /IM nginx.exe > nul
echo Stopping PHP FastCGI...
taskkill /F /IM xxfpm.exe > nul
exit
6.现在运行 start_nginx.bat,等于同时开启5个php-cgi进程,因为我们传了参数 -n 为5,如果手动断掉一个,会发现又多出来一个,还是5个,
因为xxfpm会管理php-cgi,将其维持在5个php-cgi进程,防止cgi进程崩溃关闭。
”您可通过以下微信二维码,赞赏作者“