【问题标题】:Best way to call .NET classes from PHP?从 PHP 调用 .NET 类的最佳方式?
【发布时间】:2010-10-16 02:10:41
【问题描述】:

将 PHP 应用程序连接到 .NET 库中的逻辑的最佳选择是什么?

PHP,从 v5.0 开始,支持 a DOTNET class,这应该让我从 PHP 脚本调用 .NET 逻辑。但似乎有很多问题 - 我无法让它可靠地工作,使用任意 .NET 类。该文档有点苗条,并且 is 记录的内容并不真正正确。这门课网上的问题很多,php.net上的错误报告也很多。

我已经能够让 PHP 通过 COM 互操作与 .NET 连接 - 但这要求 .NET 类是 ComVisible。据我所知,由于 COM 要求,这仅适用于 Windows。

我听说过Phalanger project,但不知道很多细节。它适用于任意 PHP 脚本吗?在 Linux 上工作?它是否具有严重的性能或运行时影响?

这样做是否有意义,或者它是你可以做但你不应该做的事情之一?

编辑:我想听听一般情况:有各种各样的 .NET 类库可用,如果能够从包括 PHP 在内的不同环境中利用它们,那就太好了。示例可能是加密、日志记录、数据访问、HPC 集群的客户端。特定的直接场景是带有 AES 加密的 ZIP 库,可在 .NET 中使用。

【问题讨论】:

  • 您能否提供更多关于您想使用 .net 类的场景类型的信息?关于上下文和您想在 .net 类中使用的内容

标签: .net php com


【解决方案1】:

Microsoft 不提供或支持 Linux 上的 .NET。如果你不想在 Linux 上运行 .NET 代码,那么你应该看看 Mono。我不知道 PHP 5 是否支持 Mono 以及 MicroSoft.NET

【讨论】:

  • 我知道 Mono。但我不知道 PHP+Mono 是否有效或有意义。
【解决方案2】:

使用 .net 类并从 Phalanger 调用 .net 方法非常容易,因为它是 .NET 的 PHP 编译器。您可以查看这篇文章PHP for .NET: Introduction for .NET developers,该文章较旧(2007 年),因此可能很少有过时的示例,但原则适用。

在 Linux 上 Phalanger 在 Mono 上运行良好,这里最大的限制是你不能使用本地扩展(来自 PHP 发行版),它仅在 Windows 上受支持(Phalanger 中的扩展管理器是用 C++/CLI 构建的,它是'在 Mono 上不支持)。但您仍然可以使用一些可用的 Phalanger 托管扩展。

Phalanger 在实际版本(2011 年 2 月发布)的性能通过 FastCGI 比 PHP 5.3.5 快大约 2 倍。

【讨论】:

    【解决方案3】:

    NetPhp 是一个在 PHP 的 com_dotnet 扩展之上工作的包装器,因此您可以在 PHP 中调用任何 .Net 程序集,即使它不是 COM 可见的并且适用于任何版本的 .Net 框架。

    https://github.com/david-garcia-garcia/netphp

    【讨论】:

      【解决方案4】:

      我认为最好的方法是通过 COM 来实现。

      【讨论】:

      • COM 不是线程安全的,Web 应用程序是在多线程环境中工作的东西......所以我非常怀疑这是最好的方法。这可能是最简单的方法(并且在您的单用户开发系统上工作得非常出色),但正如爱因斯坦所说:让它尽可能简单,但并不容易。
      猜你喜欢
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2010-12-13
      • 2013-05-23
      • 2012-01-14
      • 2012-01-30
      • 1970-01-01
      相关资源
      最近更新 更多