1. 程式人生 > >windows下 解決PHP-CGI 程序崩潰

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管理器,缺點:

  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管理器

  1. 首先安裝 xxfpm.exe

  2. 如果出現報錯缺少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目錄下哈)

  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 每個程序處理的最大請求數,或設定為 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