首页 > 系统 > windows > 正文

windows下 解决PHP-CGI 进程崩溃
2018-07-21 18:20:56   来源:   评论:0 点击: 收藏

PHP是世界上最好的语言,但需要PHP解析器Apache下通过mod_php so和php相连,如果使用nginx,碰到php 需要转发给 cgi程序关于FastCGI:全
使用nginx,碰到php 需要转发给 cgi程序。
 
关于FastCGI
全称 FastCGI Process Manager,是一种进程管理器,管理 cgi,市面上有很多进程管理器,PHP-FPM就是其中一种。
PHP-FPM作为进程管理器,会监听端口,默认为9000,并且监听本机,只接收127.0.0.1
linux下通过 netstat -nlpt|grep php-fpm 查看,PHP-CGI 是PHP自带的FastCGI管理器,缺点:
  1. php-cgi更改 php.ini 配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。
  2. 直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程)
 
本篇只讲windows(64位)下,采用nginx,使用php-cgi解析,默认情况下,当 php-cgi 处理php 达到500次,就自动关闭,即不能解析PHP(这你妹也太坑了吧!都PHP7了,这个问题 还存在)
解决方法:采用xxfpm,管理FastCGI进程.下载地址:https://github.com/78/xxfpm,在此非常感谢这位大哥。
 
安装xxfpm管理器

 
下载地址:
https://github.com/78/xxfpm
http://mirror.cnop.net/web/nginx/windows/xxfpm-master.zip
用到的文件: 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)并解压:
下载地址 : http://mirror.cnop.net/web/nginx/windows/RunHiddenConsole.zip
 
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进程崩溃关闭。
 
 

相关热词搜索:进程

上一篇:windows免密码登陆linux
下一篇:Windows 命令使用7zip解压和压缩