最近公司有个小活,帮客户升级一下系统软件版本,我一看好家伙,windows+apache+sqlserver+php。。。然后环境还是用的wamp的集成包糊弄的,这要升级apache和php版本。。。我去年买了个表。。。
但是活还是低干。。。
首先咱们把它那个集成包干掉(在集成包里能升级成功的大神,请留步教教我。。。)
裸安装的php,是没有守护进程来管理cgi进程的。默认情况下,当 php-cgi 处理php 达到500次,就自动关闭,即不能解析PHP,php7也有这个问题,所以,低想个办法让php别挂。
下载两样东西:
xxfpm,链接: https://pan.baidu.com/s/1wMEbjEb3RWdPO1QICchBLA 提取码: vk4e
RunHiddenConsole,链接: https://pan.baidu.com/s/1aUr8mZcgGZ8CGCcPE69W7w 提取码: t7fy
xxfpm是一个大哥在13年自己写的,相当于winidows版的fpm,管理php的cgi进程用的,它帮你负责phpcgi进程的保活。RunHiddenConsole这个是用来隐藏掉那个程序启动时出现的桌面窗口的,因为那个窗口会容易误操作关掉,一关掉进程就都挂了,主要解决误操作问题,相当于类似实现一个程序在后台执行的功能(这个东西其实不是太重要)。
这个方法的前提是64位系统,采用nginx,使用php-cgi解析。
xxfpm使用方式:
我们在一个地方创建一个文件夹,把这个xxfpm文件夹中的xxfpm.exe,还有RunHiddenConsole文件夹下的3个文件都放进来,以后控制nginx和php启动或关闭就在这里,打开start_nginx.bat这个文件(最好改个名,看他里边写啥就知道了),把里边的程序和文件的地址都换成自己实际的地址,最好用绝对路径,相对路径我没试过,不好说有木有问题,你可以试试。然后 双击这个文件就行了,看下是否都启动成功 打开dos窗口,执行 tasklist | findstr 程序名称(php-cgi、xxfpm、nginx),或者通过查看端口方式 netstat -ano | findstr 端口号(80、9000或自定义的cgi端口),查看对应程序是否启动,如果有些没启动成功,去看日志吧(如果记了的话)。
如果xxfpm运行报错:
到xxfpm下载文件夹中找pthreadGC2.dll,将这个文件复制到C:/Windows/SysWOW64目录(如果系统是32位的,将dll文件复制到C:\Windows\System32下),然后打开"开始-运行-输入regsvr32 pthreadgc2.dll,回车,如果还报错,新建一个文件 registe.bat,和pthreadgc2.dll同目录,内容:
@echo 开始注册
copy pthreadgc2.dll %windir%\SysWOW64\
regsvr32 %windir%\SysWOW64\pthreadgc2.dll /s
@echopthreadgc2.dll注册成功@pause
运行registe.bat,便会完成pthreadgc2.dll注册(如果32位的系统,请将SysWOW64替换为system32)。
完了就可以将这个文件删了。
备注:原文说要把xxfpm等一些文件放到nginx目录啥的,这个不需要啊,这个控制程序放在哪都行,批处理文件里的路径改好就行。start_nginx.bat文件中那个-n参数可以修改,控制生成多少个cgi进程的,默认5个(毕竟windows做生产环境还是有点扯,小项目凑合弄下跑着玩得了)。