windows下 解決PHP-CGI 程序崩潰
PHP是世界上最好的語言,但需要PHP解析器
Apache下通過mod_php.so和php相連,
如果使用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管理器,缺點:
- php-cgi更改
php.ini
php-ini
生效,不可以平滑重啟 - 直接殺死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管理器
-
首先安裝
xxfpm.exe
-
如果出現報錯缺少pthreadgc2.dll,請看下面幾步
1. 下載裡找到pthreadGC2.dll
2.
3. 將這個檔案複製到C:/Windows/SysWOW64目錄(如果系統是32位的,將dll檔案複製到C:\Windows\System32下);
4. 然後開啟"開始-執行-輸入regsvr32 pthreadgc2.dll
5. 新建一個檔案registe.bat
,和pthreadgc2.dll
同目錄@echo 開始註冊 copy pthreadgc2.dll %windir%\SysWOW64\ regsvr32 %windir%\SysWOW64\pthreadgc2.dll /s @echo pthreadgc2.dll註冊成功 @pause
6.執行
registe.bat
,便會完成pthreadgc2.dll
註冊(如果32位的系統,請將system32替換為system32)。完了就可以將這個檔案刪了(不是刪除windows目錄下哈) -
將下載的
xxfpm.exe
copy 到nginx目錄下,
4.需要下載 RunHiddenConsole.exe
,地址 連結:https://pan.baidu.com/s/1o94QWdW 密碼:rcbj
5.新建start_nginx.bat
@echo off
REM Windows 下無效
REM set PHP_FCGI_CHILDREN=5
REM 每個程序處理的最大請求數,或設定為 Windows 環境變數
set PHP_FCGI_MAX_REQUESTS=1000
echo Starting PHP FastCGI...
RunHiddenConsole C:/wnmp/nginx/xxfpm/xxfpm.exe "C:/wnmp/php/php-cgi.exe -c C:/wnmp/php/php.ini" -n 5 -i 127.0.0.1 -p 9000 echo Starting nginx... RunHiddenConsole C:/wnmp/nginx/nginx.exe -p C:/wnmp/nginx exit
6.新建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
7.現在執行 start_nginx.bat
,等於同時開啟5個php-cgi程序,因為我們傳了引數 -n 為5
8.如果我們手動斷掉一個,會發現又多出來一個,還是5個。
這是因為xxfpm
會管理php-cgi,將其維持在5個php-cgi
程序,防止cgi程序崩潰關閉。
還有一點注意,監聽埠注意與nginx的配置檔案相同。
作者:Fuzhengpei
連結:https://www.jianshu.com/p/1f2d4b1ca10d
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。 原文連結: https://www.jianshu.com/p/1f2d4b1ca10d