(為什麼說類似,因為好像 php-fpm 沒有 windows 版,而且好像 windows 的 php 中的 php-cgi.exe 就是為了讓 windows 有 php-fpm 而用的)
所以接下來有幾個重點,主要是要讓 apache 2.4.39 x64 在使用 VirtualHost 的情況下,讓走 80 port 跑 php 7.3.7 x64 ,而 8080 port 跑 php 5.2.17 x86
前置作業說明:
- apache 2.4.39 x64 + php 7.3.7 x64 我是用 xampp ,然後再去 php 網站找到 5.2.17 x86 回來放進 xampp 資料夾中
- 我不特別講 apache vhost 的設定,反正這個 google 一下資料就很多,所以下面的「操作」我是以 vhost 已經分別可以讓 80, 8080 的網頁服務執行成功的情況下來講的
- 因為我是分 80, 8080 來跑 vhost ,所以記得 httpd.conf 的 listen 要加 80, 8080
操作:
- 請將LoadModule fcgid_module modules/mod_fcgid.so
FcgidInitialEnv PHPRC "{path}\\xampp\\{php}"
AddHandler fcgid-script .php
FcgidWrapper "{path}/xampp/{php}/php-cgi.exe" .php
放進 vhost 80, 8080 設定中 - 因為 xampp 會在 apache/conf/extra/httpd-xampp.conf 中宣告 PHPRC 的環境變數,所以我會建議把此檔中宣告環境變量的部份也貼到 vhost 中,然後把 httpd-xampp.conf 宣告環境變量的部份用 # 註解起來…或者也可以刪掉;不過複制到各 vhost 底下後,記得要把 PHPRC 也用 # 註解起來,因為有可能跟 FcgidInitialEnv PHPRC 衝突
- 如果以上兩個都正常的話,原則上在啟動 xampp-control 的 apache service 時應該不會失敗,然後會看到 bind 80, 8080 兩個 port …執行 php 應該會正常,建議可以在各別的 documentroot 下各放有 phpinfo() 的 php 檔來看結果,若設定成功的話,就可以在 80 看到 php 7.3.6 ,而 8080 看到 php 5.2.17 …
註1:請留意 {path} 指的是 xampp 所在的路徑,放在 c 槽下, {path} = c:\\ ;而 {php} 就是 php.exe 的所在地的資料夾名…像上面我有提到我有兩個版本的 php 要跑 cgi ,因為 php7 我是用 xampp 的,所以它的所在資料夾名就是 php ,然後我把下載的 php5.2.17 我下載解壓後放在 xampp/php5.2.17 中,所以在 8080 port 的 vhost 我 PHPRC 的 {php} 就是 php5.2.17
註3:理論上應該可以把這種方式改成不同的 Directory 下的 php 走不同的 php-cgi version 才對,應該不一定要用 vhost 來達成,因為這樣不費浪費 port…找時間再來試
註4:xampp 在 apache/conf/extra/httpd-xampp.conf 會有不少的設定,我建議是全搬到你主要要用的 php 版本的那個 vhost 下放,例如我主要要使用的環境是 localhost:80 php7 的這個 vhost ,所以我就把 httpd-xampp.conf 中的設定都搬到 localhost:80 php7 這個 vhost 中…不過我自己也不是這樣搬,而是把 httpd-xampp.conf 中的設定都加上 # 註解,然後把會用到的再搬進 localhost:80 php7 這個 vhost 中,像我搬了 env_module 中的東西,然後把 PHPRC, PHP_PEAR_SYSCONF_DIR 給 # 起來、然後把 alias_module 中 phpmyadmin 的部分給搬進來,但記住,因為 php 的執行已經改成 php-cgi 的方式了,所以 alias 中的 directory 要給與「Options ExecCGI」的設定,不然 phpmyadmin 會一直出現 403
以上
(在 windows 用以上方式來跑 php fastcgi 唯一的問題是,php-cgi.exe 很常會執行完後不會自己結束,會覺得不舒服的就自行用工作管理員將之停止執行)
沒有留言:
張貼留言