使用Phalanger整合PHP和.NET

來源:互聯網
上載者:User

Phalanger是一種PHP語言編譯器,也是針對.NET的PHP運行時。它可以用於把PHP web項目編譯成.NET位元組碼,並在Windows中使用IIS或 者在Linux上使用Mono和Apache作為ASP.NET應用程式來執行。然而,Phalanger不僅僅是把已經存在的PHP應用編譯到.NET中。

我們可以使用Phalanger建立組合.NET和PHP的解決方案,所採用的方式用標準的PHP解譯器是不可能做到的。有了Phalanger擴充,PHP 程式可以直接使用.NET類,而.NET程式(比方說用C#編寫的)也可以動態地調用PHP指令碼,或者使用在PHP中實現的函數和類【6】。

本文中,我麼會簡要地介紹Phalanger,然後查看三種使用方式情節。我們會討論如何整合PHP應用程式和.NET;如何高效地在Windows上運 行PHP應用程式,以及如何使用PHP作為ASP.NET的視圖引擎(view engine)。

Phalanger簡介

Phalanger已經存在一段時間了。第一版Phalanger是於2003年在布拉格的查爾斯大學作為軟體項目建立的。稍後就開始了2.0版本的開 發,並且於2006年在CodePlex作為開源項目發布。微軟支援了這個項目一段時間,後來一位Phalanger開發人員加入微軟,並從事動態語言運 行時方面的工作。

Phalanger相關活動在2008年恢複,這多虧有了與Jadu的合作,它使用Phalanger為在PHP中開發的CMS構建了.NET版本。從2010年開始, Phalanger的開發主要由DEVSENSE提供資金支援,它也為Phalanger提供了商業支援。最近發布的版本Phalanger 2.1【7】,其中提升了與 標準PHP實現的相容性,在動態操作的實現過程中利用了DLR,並提供了PHP和其他.NET語言(像C#、F#和Visual Basic)之間的互通性。

Phalanger的組件

Phalanger包括多個部分獨立的組件,可以用來開發運行在.NET上的PHP應用程式,並使用.NET或Mono來運行它們:

Phalanger編譯器Phalanger會把PHP原始碼編譯成.NET程式集,它可以使用.NET JIT(Just-in-time編譯器,它會為當前平台產生本地 代碼)執行。編譯後的PHP代碼會使用Phalanger運行時和動態語言運行時,從而提供了PHP語言動態特性的高效率實現。

Phalanger運行時和類庫Phalanger運行時提供了對數組之類PHP特性的實現。Phalanger還包含了針對I/O、Regex以及其他標準PHP 類庫的.NET實現。

本地擴充在32位Windows平台上,Phalanger可以通過本地的橋接程式使用所有現存的PHP 4擴充。儘管這會帶來一些運行時負載,但這 讓我們不需要額外工作就可以運行某些PHP應用程式。

託管的擴充 通過封裝.NET中提供的類似功能,PHP擴充也可以重新實現。這些擴充可以是由任何.NET語言編寫,並提供很好的效能。 Phalanger中包含多個擴充,包括SPL、JSON、SimpleXML、MySQL和MS SQL的提供者。DEVSENSE【9】還提供了附加的擴充,像Memcached 、映像和cURL等。

與Visual Studio的整合Phalanger還與Visual Studio整合(最近的更新支援Visual Studio 2010)。整合功能添加了針對PHP檔案的顏 色反白和智能提示功能,讓我們可以調試使用Phalanger啟動並執行PHP應用程式。

Phalanger使用案例

Phalanger在很大程度上與PHP 5相容,可以運行大量開源的PHP項目,包括WordPress和MediaWiki。我們可以使用它把這些項目整合 到.NET生態系統中,也可以開發新的項目,它會兼有PHP和.NET的優勢。在本文剩下的內容中,我們會討論以下三種使用案例:

方案1: 高效運行PHP應用程式。使用PHalanger在Windows上編譯的PHP應用程式的效能,要比通過FastCGI使用標準PHP解譯器啟動並執行高 。這使得選擇Phalanger在Windows環境中部署PHP很具有吸引力。

方案2: 把WordPress與ASP.NET整合。使用Phalanger編譯的PHP代碼能夠調用所有.NET程式庫。這可以用於在PHP和ASP.NET應用程式之 間共用使用者資料庫或者其他資料。

方案3: 從ASP.NET應用程式中調用PHP。PHP的靈活性對於編寫指令碼或者編寫web應用程式的表現層非常有用。有了Phalanger,我們就 可以在.NET中開發應用程式,並使用PHP作為指令碼語言或者視圖引擎。

以下三個部分會詳細討論各種方案。我們首先會給出概覽,然後查看一些技術細節,它會說明Phalanger中讓你感興趣的內容。

方案1: 高效運行PHP應用程式

Phalanger之所以能夠高效地運行PHP應用程式,是因為以下兩個原因。首先,它會編譯PHP原始碼,而不是解釋它;其次,它會把應用 作為ASP.NET應用程式運行,那會在Windows下提供額外的效能優勢。

使用Phalanger和.NET編譯PHP

編譯過程如圖1所示。正如圖上所顯示的,Phalanger會把PHP原始碼編譯成.NET IL(中繼語言),那是與架構獨立的低級位元組碼。編譯 後的代碼會使用PHP核心庫(Phalanger的一部分)和動態語言運行時(DLR)來執行標準的PHP操作。當應用程式啟動時,.NET JIT(just -in-time)編譯器會把這些組件轉換為針對當前處理器架構最佳化過的本地代碼。

圖1. 使用Phalanger把PHP原始碼編譯成本地代碼的過程

正如Phalanger評測顯示【10】,使用Phalanger編譯的WordPress在Windows下的效能比通過FashCGI使用標準PHP解譯器的好,也比通過 WinCache使用PHP的稍好一些。然而,評測沒有測試Phalanger最新的版本,它使用DLR進行了進一步最佳化。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.