故事背景是这样的,有一套项目,服务器端是用C#写的,为了完成某种事情,它需要使用到一个组件,这个组件很小但很重要,很不巧的是,这个这个组件是用PHP语言写的,如果为了使用这个组件而专门搭建一个PHP的环境显得有点高射炮打蚊子(况且还有其他不可预见的阻力)。或许有读者会提出“抗议”:不是PHP写的么,直接看源码翻译出一份C#版的不就行了?然而事实并不如想象的美好,总之就是短期内无法这么做了。

如今的C#已经非常强大了,它除了可以做我们普通的站点开发、桌面开发和原生的Windows Phone、应用商店开发,还可以做其他诸如IOS、安卓开发;也通过用CLR来托起一个JVM(这里指IKVM.NET)来跑Java应用程序,当然也可以通过把PHP编译成IL来跑PHP的网站程序了。

本篇中,我们就如何进行PHP与C#混合编程作如下讨论:

  (1)、PHP与C#的胶水:“Phalanger”

  (2)、牛刀小试跑跑PHP

  (3)、如何添加PHP类库

  (4)、C#与PHP混合互调

  (5)、美丽如玫瑰,采摘须谨慎

本文中的示例代码请点击这里进行下载。


1、什么是Phalanger

 什么事Phalanger,最简单的概括就是,它能够把PHP编译成DLL供我们C#调用。

Phalanger的官网是:http://www.php-compiler.net/

我们要做混合编程,首先得先从官网那里下载一个安装包。

如玫瑰一般的PHP与C#混合编程

 下载下来之后,打开压缩包,双击Setup开始安装。

如玫瑰一般的PHP与C#混合编程

把这些都给安装了,前面两个必装,最后一个是模板文件,不想装就不装,已经安装的话它会写着“Already installed”。由图中,我们可以得知一个信息,那就是它只支持Framework 4.0。

把上面的东西安装好之后,我们需要的“胶水”就得到了。

 

2、在.NET里面跑一个php

嗯,phpinfo(),我没有猜出,这个函数应该是各位读者们第一个敲的,也是搭建完PHP环境之后必敲写的一个函数。我们也牛刀小试一番,试试执行这个函数。

我们先创建一个空的WebApplication

如玫瑰一般的PHP与C#混合编程

然后添加一个PHP文件,由于我们没有直接的PHP文件添加,所以我们随便添加了一个内容少一点的文件,然后改它的后缀为php并删光里面的代码。

如玫瑰一般的PHP与C#混合编程

写上我们的代码(还带有智能提示,先进!!!):

如玫瑰一般的PHP与C#混合编程

然后按下“F5”

如玫瑰一般的PHP与C#混合编程 然后就奇迹般的出现了我们想要的页面。

 

3、添加PHP的类库

事实上,即使我们是写原生的PHP,我们都需要使用到大量的PHP库,譬如MySQL库、GD库、CURL库等。在这里当然也不例外,我们也需要使用那些库。不过在这里,我们所使用的库并不是PHP/ext中的那些库,而是Phalanger给我们准备好的库,它们随着Phalanger的安装一同安装到我们的电脑当中,有兴趣的读者可以翻开GAC目录,里面会多了很多php打头的文件夹,那些就是与Phalanger相关的库了。

如玫瑰一般的PHP与C#混合编程

 需要使用哪个库,就自行的在WebConfig的phpNet节点下添加,譬如我需要用MySQL的库,则在WebConfig这样配置

<?xml version="1.0" encoding="utf-8"?>

<!--
  有关如何配置 ASP.NET 应用程序的详细消息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>

  <phpNet>
    <classLibrary>
      <add assembly="PhpNetMySql, Version=3.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03" section="mysql"/>
    </classLibrary>
  </phpNet>

</configuration>
Web.Config

相关文章: