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、正则表达式以及其他标准 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 环境中部署