2011-01-21 188 views
25

我們網站的一部分是用PHP完成的,我們網站的一部分是用ASP.Net完成的。我們只是安裝了安裝了IIS 7.5的Windows Server 2008 R2的新Web服務器。PHP和ASP.Net可以在IIS 7.5中的同一個網站中運行嗎?

我知道IIS 7+支持PHP,但PHP和ASP.Net可以在IIS中的單個網站中並行運行,或者我必須爲PHP頁面和一個PHP頁面設置一個網站ASP.Net頁面的網站?

+0

應該可以使用這兩個處理程序,但您可能需要使用明確的擴展名例如.aspx和.php。 – tomasmcguinness 2011-01-21 17:24:06

+0

你可以用明確的擴展來闡述你的意思嗎? – Aaron 2011-01-21 17:28:57

回答

20

您應該可以在同一個站點上運行,但請確保該站點的AppPool運行「經典」ASP.NET池配置。默認的AppPool通過ASP.NET路由所有的東西,並且你不會希望爲你的PHP頁面。

除此之外,你應該沒問題。查詢字符串,文件和後端數據庫將是在頁面之間共享數據的最佳方式。

0

是的,這不會是一個問題。即使一些Windows共享主機也提供PHP計劃 - Windows Hosting PHP

+1

我知道你可以在IIS的Windows上運行PHP,但是我的問題是你可以在IIS的同一個WEB站點上運行PHP和ASP.Net。 – Aaron 2011-01-21 17:50:51

+0

Agh ...對不起..... – Wazzzy 2011-01-21 18:01:11

0

ASP and PHP可以用在windows系統上。只要他們完全分開,不相互依賴。例如,使用查詢字符串(i.e file.php?var=1&var2=bla)當您需要將這些變量傳輸到ASP文件時,事情會變得雜亂,反之亦然。

所以只要2個系統完全相互獨立,那麼它應該可以正常工作。

您還可能發現一些與cookies不兼容會話。這些也可以通過但不容易。

+0

問題是關於在同一個SITE中同時運行ASP.NET和PHP,而不僅僅是在同一個框中。由於它們共享AppPool和IIS工作進程,因此在這種情況下它們不是「完全分離」的。 – 2011-01-21 18:23:10

8

是的,你可以在同一個網站下使用兩者。由於文件擴展名被映射到特定的外部進程,因此它們被獨立調用。你甚至可以使用Asp.Net通過在IIS中實現通配符映射(我知道6/7有這個,不確定約5)來使用FormsAuthentication保護.php文件。在他們之間混合數據是棘手的,因爲他們將有單獨的外部進程,從而分離會話。大多數cookie都可以在兩者間讀取,但安全cookies不會。

1

是,PHP可以無縫地實現到ASP.NET 3.5/4.0

轉到http://phalanger.codeplex.com/(或http://www.php-compiler.net/),並下載最新版本的Phalanger的。安裝到Visual Studio中,瞧!

Phalanger - 編譯PHP爲.NET

歡迎Phalanger - 全功能的PHP運行&編譯器 .NET /單聲道框架。 Phalanger是PHP的現代開源實現 ,與大量現有的PHP代碼兼容。在 除此之外,Phalanger還爲PHP應用程序開發人員提供了大量新的 可能性;從提高性能和使用現代環境,到利用無縫的獨特.NET集成。

0

ASP。NET和PHP支持

使用您選擇的語言的選擇 開發,部署和輕鬆管理Web應用程序。從ASP.NET到PHP,IIS7爲世界上最流行的Web應用程序提供了一個功能強大且靈活的Web服務器環境。

(來源:http://www.iis.net/overview/choice/aspnetandphpsupport

我試圖把一個test.php文件(conent:<?php phpinfo(); ?>),以現有的ASP.NET網站(使用真正的服務器在https://somee.com)。我知道ASP.NET和PHP一起工作。

瞭解更多:
http://www.w3schools.com/aspnet/webpages_php.asp
https://technet.microsoft.com/en-us/library/hh994592.aspx

0

您可以在同一網站上同時運行,但不能彼此交談,除非你設置某種消息系統或共享storage.They基本上是完全不同性質的應用。

另一種可能性是從PHP調用.NET代碼:

一段代碼寫在C#這樣的:

string javascript = ""; 
Microsoft.Ajax.Utilities.Minifier m = new Microsoft.Ajax.Utilities.Minifier(); 
Microsoft.Ajax.Utilities.CodeSettings settings = new Microsoft.Ajax.Utilities.CodeSettings(); 
settings.OutputMode = Microsoft.Ajax.Utilities.OutputMode.SingleLine; 
settings.PreserveFunctionNames = false; 
string minified = m.MinifyJavaScript(javascript, settings); 

看起來像這樣在PHP:

$minifier = netMinifier::Minifier_Constructor(); 
$settings = netCodeSettings::CodeSettings_Constructor(); 
$csssettings = \ms\Microsoft\Ajax\Utilities\netCssSettings::CssSettings_Constructor(); 
$settings->OutputMode(\ms\Microsoft\Ajax\Utilities\netOutputMode::SingleLine()); 
$settings->PreserveFunctionNames(FALSE); 
$settings->QuoteObjectLiteralProperties(TRUE); 
$result = $minifier->MinifyStyleSheet($css, $csssettings, $settings)->Val(); 

來自:

http://www.drupalonwindows.com/en/blog/calling-net-framework-and-net-assemblies-php

3

當然可以,但要注意這一點:

如果你在文件夾上你的「根」和asp.net應用一個WordPress下它

(例如http://root.com/aspnetapp1/), ,如果您按照these suggestions關於wordpress中永久鏈接的「urlrewrite」,如果您嘗試在apsnetapp1中配置「通配符處理程序」,則可能會遇到麻煩。

爲了避免問題,WordPress的根應用程序的web.config中還必須有一個設置:

<location path="." inheritInChildApplications="false"> 
    <system.webServer> 
... 
    </system.webServer> 
</location> 

否則,你的通配符處理程序將永遠不會提高,因爲從根本index.php文件將捕獲所有請求到URL像:http://root.com/aspnetapp1/api/ *

相關問題