windows下 解決PHP-CGI 進程崩潰


PHP是世界上最好的語言,但需要PHP解析器
Apache下通過mod_php.so和php相連,
如果使用nginx,碰到php 需要轉(zhuǎn)發(fā)給 cgi程序

關(guān)于FastCGI
全稱 FastCGI Process Manager,是php-cgi的升級版,市面上有很多進程管理器,PHP-FPM就是其中一種。

PHP-FPM作為進程管理器,會監(jiān)聽端口,默認為9000,并且監(jiān)聽本機,只接收127.0.0.1
linux下通過 netstat -nlpt|grep php-fpm 查看

PHP-CGI 是PHP自帶的解釋器,缺點:

  1. php-cgi更改 php.ini 配置后需重啟php-cgi才能讓新的php-ini生效,不可以平滑重啟
  2. 直接殺死php-cgi進程,php就不能運行了。(PHP-FPM和Spawn-FCGI就沒有這個問題,守護進程會平滑從新生成新的子進程)

本篇只講windows(64位)下,采用nginx,使用php-cgi解析
默認情況下,當(dāng) php-cgi 處理php 達到500次,就自動關(guān)閉,即不能解析PHP(這你妹也太坑了吧!都PHP7了,這個問題 還存在)

采用xxfpm,管理FastCGI進程.下載地址:https://github.com/78/xxfpm,在此非常感謝這位大哥

安裝xxfpm管理器

  1. 首先安裝 xxfpm.exe

  2. 如果出現(xiàn)報錯缺少pthreadgc2.dll,請看下面幾步
    1. 下載里找到 pthreadGC2.dll
    2.


    3. 將這個文件復(fù)制到C:/Windows/SysWOW64目錄(如果系統(tǒng)是32位的,將dll文件復(fù)制到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位的系統(tǒng),請將system32替換為system32)。完了就可以將這個文件刪了(不是刪除windows目錄下哈)

  3. 將下載的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 每個進程處理的最大請求數(shù),或設(shè)置為 Windows 環(huán)境變量
    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.現(xiàn)在運行 start_nginx.bat,等于同時開啟5個php-cgi進程,因為我們傳了參數(shù) -n 為5

8.如果我們手動斷掉一個,會發(fā)現(xiàn)又多出來一個,還是5個。
這是因為xxfpm會管理php-cgi,將其維持在5個php-cgi進程,防止cgi進程崩潰關(guān)閉。
還有一點注意,監(jiān)聽端口注意與nginx的配置文件相同。

有錯誤不足地方,希望大家批評指出??!

All down ,Enjoy Your Coding

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容