Menu

在同一台主機上同時運作 PHP4 與 PHP5

前段時間決定運用PHP5來開發最新的項目。由於很多程序還是用PHP4開發的,所以就涉及到如何同時調試PHP4和PHP5程序的問題了。經過一番試驗,終於找到一種簡單的方法,讓我可以方便的調試PHP4和PHP5程序。

基本設置

原理說穿了很簡單,就是讓IIS運行PHP4,然後讓Apache2運行PHP5。難點主要就是如何解決PHP4和PHP5使用各自php.ini的問題。

一、首先安裝配置IIS+PHP4

方法就不囉嗦了。然後在IIS中,將默認網站的TCP端口設置為8080,以避免和Apache發生衝突;


二、安裝Apache

(我裝的Apache 2.0.52)和PHP5。安裝PHP5時,不要把PHP5的php.ini複製到C:\Windows中,這樣會覆蓋掉PHP4的php.ini文件。只要把PHP5的php.ini放在PHP5安裝目錄裡面就行了;

 

三、配置Apache以支持PHP5:

LoadModule php5_module "d:/usr/local/php-5.0.3-Win32/php5apache2.dll"
AddType application/x-httpd-php .php
DirectoryIndex index.html index.php
PHPIniDir "d:/usr/local/php-5.0.3-Win32"

其中最重要的一條就是 PHPIniDir,用來指明php.ini文件所在位置(也就是PHP5的安裝目錄)。

按照上面的配置後,PHP4和PHP5就可以同時運行了。使用 http://localhost:8080/ 就是訪問IIS+PHP4,而 http://localhost/ 就是訪問Apache+PHP5。

 

進一步優化

現在對剛剛的設置進一步優化,避免訪問IIS+PHP4還要指定端口號的麻煩。

 

一、修改Apache配置文件,啟用Proxy模塊;

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

二、繼續修改Apache配置文件,讓Apache處理對IIS+PHP4的訪問;

ProxyPass /iis/ http://127.0.0.1:8080/
ProxyPassReverse /iis http://127.0.0.1:8080

這兩行配置告訴Apache,當處理以/iis路徑的請求時轉發到 http://127.0.0.1:8080/。由於Apache的代理功能對於訪問者來說是完全透明的,因此我們就可以使用下面的路徑分別訪問IIS+PHP4和Apache+PHP5:
http://localhost/iis/ 訪問IIS+PHP4
http://localhost/ 訪問Apache+PHP5

現在感覺就好多了,不用輸入端口號就可以很方便的訪問PHP4和PHP5程序了。

讓不同的虛擬主機分別使用PHP4和PHP5
按照上面的思路,還可以讓不同的虛擬主機使用不同版本的PHP。參考下面的配置:

上面的配置中,一個虛擬主機的域名是 blog.dualface.com。這個虛擬主機使用了PHP5,所以直接由Apache處理訪問請求。另一個虛擬主機是 dev.dualface.com,由Apache轉發到 http://127.0.0.1:8080/ 到處理。

ServerAdmin daut@dualface.com
DocumentRoot E:/www/dualface_dot_com
ServerName blog.dualface.com
ServerAlias dualface.com
DefaultLanguage zh-CN
AddDefaultCharset UTF-8

ServerAdmin daut@dualface.com
ServerName dev.dualface.com
DefaultLanguage zh-CN
AddDefaultCharset GB2312
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/

當然了,我們不一定非要用IIS+PHP4和Apache+PHP5這種組合,改為Apache+PHP4和Apache+PHP5也是可以的,只 不過多安裝一套Apache而已。而且利用這個技巧,不但可以讓虛擬主機使用不同的PHP,還可以讓IIS來運行ASP、ASP.NET程序、 Apache來處理靜態網頁和PHP程序,充分發揮Apache和IIS各自的強項。

另一文章:iis與apache,同時使用80端口的解決辦法

http://hi.baidu.com/sdxlh007/blog/item/d900a810bcacc701203f2e44.html

為調試程序,本機安裝iis與apache,無法同時使用80端口,現給出解決方法:

方法一:

IIS5,多IP下共存,IIS為192.168.0.1,apache為192.168.0.2 原文地址
c:\Inetpub\Adminscripts
cscript adsutil.vbs set w3svc/disablesocketpooling true
該命令反饋如下disablesocketpooling : (BOOLEAN) True
重啟IIS
Inetpub\AdminScripts>cscript adsutil.vbs set w3svc/disablesocketpooling true
由於 DisableSocketPooling 在 IIS 6.0 元數據庫架構 (MBSchema.xml) 中被定義為有效屬性,所以,您仍然可以使用 Adsutil.vbs 設置該屬性,但這種設置不起作用。IIS 6.0 中的功能是新增的核心級別驅動程序 HTTP.sys 的一部分。要配置 HTTP.sys,您必須使用 Httpcfg.exe

方法二:

IIS6,多IP下共存,IIS為192.168.0.1,apache為192.168.0.2 原文地址
到2003的CD下的 support/tools/Support.cab。解壓出httpcfg.exe文件,COPY到windows/system32/目錄下,用法自己看幫助

命令行

綁定到某IP: httpcfg set iplisten -i 192.168.0.1
即命令使用IIS的只監聽指定的IP及端口
查看綁定: httpcfg query iplisten 
刪除綁定: httpcfg delete iplisten -i 192.168.0.1

命令行
net stop Apache2
net stop iisadmin /y
net START Apache2
net START w3svc

保證iis下的ip設置為全局默認,Apache中httpconf設置listen 192.168.0.2:80,就應該可以兩個服務同時運行,相互不衝突了。
IIS的訪問地址為http://192.168.0.1,Apache訪問地址為http://192.168.0.2

方法三:

網上常用的單IP共用80端口方法,不過不推薦,只是使用Apache的代理,速度有影響將apache設為使用80端口,IIS使用其它端口,比如81,然後將apache作為IIS的代理。

在httpd.conf裡面,取消下面四行的註釋:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

然後建立一個虛擬主機,將該域名的所有訪問轉向81端口。

ServerName iloves.vicp.net
ProxyPass / http://localhost:81/
ProxyPassReverse / http://localhost:81/

這樣,對外就可以只需要一個端口,即可同時使用apache和IIS的功能了 

類推,使用第二種方法,你可以在IIS上配置PHP4,Apache2中配置PHP5,只需要IIS中安裝PHP4,把php.ini複製到\windows目錄即可,這個就不用說了吧,Apache2中,只要把PHP5的php.ini放在PHP5安裝目錄裡面就行了

配置Apache以支持PHP5:

LoadModule php5_module "D:/PHPServer/PHP5/php5apache2.dll"
AddType application/x-httpd-php .php
DirectoryIndex index.html index.php
PHPIniDir "D:/PHPServer/PHP5"

其中最重要的一條就是 PHPIniDir,用來指明php.ini文件所在位置,即PHP5的安裝目錄,注意所有目錄的應該改為D:/PHPServer/PHP5這種格式, 而非D:\PHPServer\PHP5,IIS的訪問地址為http://192.168.0.1,Apache訪問地址為http: //192.168.0.2