如何同時在Apache運行多版本的php(在windows上)
本次升級最大的動作之一就是把先前一直想要升級PHP的念想給實現了,因為目前這台是PHP5,而且上面還有其它服務在運行不方便直接升級
所以就只好在同一個apahce實作同時間運行多版本的PHP了
一開始看了一些文件,原本是想用最單純的方式 VirtualHost 再搭配使用不同版本的PHP engine ,看似可以,網路上好像也有蠻多人有類似這樣的說法
但實測結果,這是不可行的,至少在windows 環境下是不可行的,因為會遇到 這個警訊「Only first PHPINIDir directive honored per configuration tree – subsequent ones ignored」
因為php.ini 的路徑只能設定一個,就算在VirtualHost 裡設定也不行,只要出現兩次也會報錯,但因為php5 和php7差異太大,如果是同php5.5 or php5.6,那採用同一個 php.ini或許還是可行,但看來這方向就要調整才行。
後來改採 Apache FastCGI ASF module的整合方式,利用執行CGI的方式執行PHP來達到運行多版本,廢話不多說,直接說我的作法:
- 到此連結 https://www.apachelounge.com/download/VC15/ 下載mod_fcgid ,要注意你的VC版本,不合就自己換。
- 解開後mod_fcgid 後放到apahce modules目錄
-
修改apahce conf/httpd.conf加上
- LoadModule fcgid_module modules/mod_fcgid.so
- 解開 Include conf/extra/httpd-default.conf
- 如果 Include conf/extra/httpd-vhosts.conf 沒解開也一定要解開才行
-
修改conf/extra/httpd-default.conf 加上以下片斷在最下方
FcgidInitialEnv PATH "c:/php-5/;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;" FcgidInitialEnv SystemRoot "C:/Windows" FcgidInitialEnv SystemDrive "C:" FcgidInitialEnv TEMP "C:/WINDOWS/Temp" FcgidInitialEnv TMP "C:/WINDOWS/Temp" FcgidInitialEnv windir "C:/WINDOWS" FcgidIOTimeout 64 FcgidConnectTimeout 16 FcgidMaxRequestsPerProcess 1000 FcgidMaxProcesses 50 FcgidMaxRequestLen 8131072 # Location of php.ini FcgidInitialEnv PHPRC "c:/php-5/" FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000 <Files ~ "\.php$"> AddHandler fcgid-script .php FcgidWrapper "c:/php-5/php-cgi.exe" .php Options +ExecCGI </Files>
-
修改你的conf/extra/httpd-vhosts.conf 在你準備要用PHP7的domain Virtual Host之中加上以下設定
FcgidInitialEnv PHPRC "c:/php-7" <Files ~ "\.php$"> php_flag engine off AddHandler fcgid-script .php FcgidWrapper "c:/php-7/php-cgi.exe" .php </Files>
- 再重啟Apache,就完成啦,實測一下兩個不同的domain 就分別顯示不同的版本
目前大多人的寫法都是把多版本PHP運行都利用mod_fcgid搭配VirtualHost 來實現,但我這裡的作法就是和別人不一樣,原本的PHP作法我都不動,我是直接在想要的VirtualHost domain 加上mod_fcgid 來實現運行指定的PHP版本 ,我發現這樣用之後Include conf/extra/httpd-default.conf 這個不使用 也不用加也不會有任何影響
另外,原本在測試使用基本方式達到運行多版本的PHP,卡在php.ini 設定上,我有發現有文章提及不設定php.ini DIR Path,改指向使用php 程式路徑中的ini,利用windows PATH參數指定搜尋的路徑,可能是一條可行的路,不過我都試成功了就不再多花時間去TRY了,提供以下連結,讓有興趣的人可以去試試看(不過文章有點舊請要有心理準備)
近期留言