从PHP调用.NET类的最佳方法是什么?

5
什么是连接PHP应用程序到位于.NET库中的逻辑的最佳选项?
自v5.0以来,PHP支持一个DOTNET类,它可以让我从PHP脚本调用.NET逻辑。但似乎存在许多问题-我无法可靠地将其与任意.NET类一起使用。文档有点简略,而且已记录的内容并不正确。互联网上关于这个类的问题很多,php.net上的错误报告也很多。
我已经能够通过COM互操作使PHP连接到.NET-但这需要.NET类是ComVisible的。据我所知,由于COM要求,这仅适用于Windows。
我听说过Phalanger项目,但不知道详细信息。它是否适用于任意PHP脚本?在Linux上工作吗?是否具有重型性能或运行时影响?

你觉得这样做有意义吗?还是说这是一种可以做但不应该做的事情?

编辑:我想了解一般情况:有各种各样的.NET类库可用,能够从不同的环境(包括PHP)中受益。例如加密、日志记录、数据访问、连接到HPC集群的客户端等。具体的实际情况是,有一个带有AES加密的ZIP库可在.NET中使用。


你能提供更多关于何时使用 .net 类的场景的信息吗?包括上下文和你想在 .net 类中使用什么。 - eglasius
4个回答

2
使用 .net 类和调用 .net 方法从 Phalanger 很容易,因为它是针对 .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 倍。

2
NetPhp是一个封装器,建立在com_dotnet扩展之上,可以在PHP中调用任何.Net程序集,即使它不可见于COM,并且可以与任何版本的.Net框架一起使用。

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


2

微软不提供或支持在Linux上运行.NET。如果您想在Linux上运行.NET代码,那么您应该看看Mono。我不知道PHP 5是否也支持Mono和Microsoft .NET。


我知道Mono。但我不知道PHP+Mono是否可行或有意义。 - Cheeso

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

2
COM 不是线程安全的,而 Web 应用程序是在多线程环境中工作的。因此我非常怀疑这是最好的方式。它可能是最简单的方式(并且在您的单用户开发系统上运行得非常好),但正如爱因斯坦所说:“要尽可能地简单,但不要过于简单”。 - Stefan Steiger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接