一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

使用Phalanger整合PHP和.Net

  英文原文:Integrating php with .NET Using Phalanger

  作者:Tomas Petricek 譯者:侯伯薇

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

  我們可以使用 Phalanger 創建組合 .NETphp 的解決方案,所采用的方式用標準的 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、正則表達式以及其他標準 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 程序庫。 這可以用于在 phpASP.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 進行了進一步優化。

  使用 ASP.NET 部署 php 應用程序

  Phalanger 應用程序的運行方式和 ASP.NET 應用程序完全相同。 這讓它具有了重要的性能優勢,特別是在 Windows 系統下,進程要比線程耗費更多資源。

  圖 2 顯示了運行 php 應用程序的不同可選方案。

  當使用標準 CGI 模式時,web 服務器會為每個進入的請求啟動新的進程。 在 Windows 下,這樣做的效率不高,它還阻止了共享位于共享內存中的狀態,也很難進行進程中緩存(in-process caching)。 當使用 FashCGI 模式時,web 服務器會重用進程,這樣它不需要為每個請求啟動新的進程。 然而,這還是無法共享內存中的狀態,因為不同的進程擁有不同的狀態。

圖2. 使用 CGI、FashCGI 和 Phalanger 運行 php

  Phalanger 的行為方式和所有 ASP.NET 應用一樣。 單獨的叫做應用池(Application Pool)的 ASP.NET 進程會處理所有進入的請求。 我們甚至可以在單一進程(應用池)中配置多個 php 應用程序(像多個 WordPress 的獨立實例)。 在進程中,會有多個線程,這些線程會被重用以處理單獨的請求。 在 Windows 下,線程要比過程更輕量級,所以這種解決方案更有效率,并且會消耗更少的內存。

  對于運行在單一進程中的應用程序,我們可以進行進一步的優化,并采用其它有趣的方案。 例如,Phalanger 會使用動態語言運行時(DLR)來做動態方法調用。 DLR 會使用與時間相適應的緩存機制,因此在幾次請求之后,DLR 就會“知道”應用程序使用的是哪個方法,并變得更快一些。 這只有在單一進程中處理請求的情況下才可能做到。

  在單一進程中運行所有代碼也意味著應用程序可以在內存中存儲全局狀態。 這可以用于實現與 WinCache 提供的 User Cache 類似的功能,但是不會有跨進程通信造成的負載。

  方案2: 把 WordPress 與 ASP.NET 整合

  php 的一點優勢就在于擁有大量優秀的開源 CMS 系統(WordPress、Joomla 等等)、表單應用程序(phpBB 及其他)和 wiki(Mediawiki 及其他),其中很多都通過了 Phalanger 的測試。

  這些應用通常會比 .NET 平臺下類似的程序包提供更多特性。 開發基于 ASP.NET 網頁的公司可能會面臨以下情況:

  • 它需要向現存的 ASP.NET 解決方案中添加 wiki、論壇或者博客,但是只有在 php 中存在合適的應用程序(例如,免費并且帶有所有必要特性)。
  • 應用程序可能會在子域下運行,但是它應該共享用戶數據庫。 此外,一旦用戶登錄到主頁,那么他就應該同時登錄到 wiki、論壇和博客上。

  ASP.NET 應用程序可以使用 ASP.NET 的成員管理(ASP.NET Membership),它還用來管理用戶、角色和功能的標準機制。 有了 Phalanger,我們就可以修改開源php 項目,從而使用同樣的機制。 下一部分會演示使用 WordPress 如何做到這一點。

  為 WordPress 實現 ASP.NET 成員管理插件

  如果你對代碼不感興趣,那么就可以略過這個部分,直接查看第三種情況。 但是,我們不會查看技術細節,只是對讓 php 調用 .NET 程序庫的 php 擴展做簡要的概述。

  我們可以使用插件輕松地自定義在 WordPress 管理用戶的方式。 管理用戶的插件需要實現一個 php 類,其中有各種成員函數。 其中最值得期待的功能就是身份驗證,它會獲得用戶名和密碼。 它應該填充當前用戶的信息,或者,當用戶不存在的時候,就會把名稱設置為 NULL。

  為了使用 .NET 中的 ASP.NET 成員管理來實現身份驗證功能,我們可以使用 System.Web.Security 命名空間中的功能。 靜態方法 Membership.ValidateUser 會檢查密碼是否正確,而 Membership.GetUser 會返回用戶的基本信息。 使用 Phalanger,我們可以訪問 .NET 對象,就像它是標準的 php 對象一樣,這樣實現驗證機制就很簡單了。 代碼 1 展示了簡化后的代碼。

  代碼 1 在 WordPress 插件中實現身份驗證功能的函數

import namespace System:::Web:::Security;

function authenticate (&$username,$password) {
global $errors;

// Test whether the password is correct
if (Membership::ValidateUser ($username,$password)) {
// Get information about the user and fill $userarray
$user = Membership::GetUser ($username);
$userarray['user_login'] = $user->UserName;
$userarray['user_email'] = $user->Email;
$userarray['display_name'] = $username;
$userarray['user_pass'] = $password;
// Loading of roles & profiles omitted for simplicity

// Update or create the user information in WordPress
if ($id = username_exists ($username)) {
$userarray['ID'] = $id;
wp_update_user ($userarray);
}
else
wp_insert_user ($userarray);
} else {
// Report error if the login failed
$errors->add ('user-rejected', 'Log-in failed!');
$username = NULL;
}
}

NET技術使用Phalanger整合PHP和.Net,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产91精品一区二区视色 | 一本久久a久久精品亚洲 | 精品视频久久久 | 国产高清国内精品福利99久久 | 国产精品麻豆免费版 | 69国产成人精品午夜福中文 | 91免费视频播放 | 淫啪 | 春色视频一区二区三区 | 一区二区三区 亚洲区 | 91精品一区二区三区在线 | 国产精品久久久香蕉 | 日韩综合nv一区二区在线观看 | 久草热在线观看 | 2021天天躁夜夜躁西西 | 夜夜未满十八勿进的爽爽影院 | 国产毛片在线看 | 国产精品国产午夜免费福利看 | 伊人热热久久原色播放www | 国产精品免费一区二区区 | 欧美激情15p | 国产精品久热 | 99视频热| 五月婷婷六月激情 | 亚洲国产天堂久久综合 | 欧美另类videosbestsex亚洲 | 亚洲一区二区三区在线网站 | 在线国产一区二区 | 综合成人在线 | 亚洲图片在线视频 | www一区二区 | 激情视频激情小说激情图片 | 国产一区二区精品久久 | 婷婷激情综合 | 精品国产精品国产偷麻豆 | 精品一区二区三区四区 | xxxxx在线| 四虎国产精品永久地址99 | 久草热在线 | 国产精品成人观看视频免费 | 久久93精品国产91久久综合 |