Archive

2021年1月23日 的Archive

如何同時在Apache運行多版本的php(在windows上)

2021年1月23日 尚無評論

本次升級最大的動作之一就是把先前一直想要升級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來達到運行多版本,廢話不多說,直接說我的作法:

  1. 到此連結 https://www.apachelounge.com/download/VC15/  下載mod_fcgid ,要注意你的VC版本,不合就自己換。
  2. 解開後mod_fcgid 後放到apahce modules目錄
  3. 修改apahce conf/httpd.conf加上

    • LoadModule fcgid_module modules/mod_fcgid.so
    • 解開 Include conf/extra/httpd-default.conf  
    • 如果 Include conf/extra/httpd-vhosts.conf 沒解開也一定要解開才行
  4. 修改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>
    
  5. 修改你的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>
    
    
  6. 再重啟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了,提供以下連結,讓有興趣的人可以去試試看(不過文章有點舊請要有心理準備)

Windows環境讓PHP4與PHP5共存,使用Apache

Categories: PHP Tags: ,