【发布时间】:2011-02-21 01:11:13
【问题描述】:
我从 PHP 开始用于动态网页。我有一些用 ANSI C 编写的库,用于获取/设置参数和其他专有内容。我想知道,是否有一个简单的解决方案可以在 PHP 中使用包装器来调用这个函数?是否已经存在类/库?我自己做这件事的最佳做法是什么?我不想调用外部应用程序并使用标准输入/标准输出!
有一个简单的例子吗?我暂时不想深入阅读 Zend 文档,我只需要感受一下它的复杂性。
【问题讨论】:
我从 PHP 开始用于动态网页。我有一些用 ANSI C 编写的库,用于获取/设置参数和其他专有内容。我想知道,是否有一个简单的解决方案可以在 PHP 中使用包装器来调用这个函数?是否已经存在类/库?我自己做这件事的最佳做法是什么?我不想调用外部应用程序并使用标准输入/标准输出!
有一个简单的例子吗?我暂时不想深入阅读 Zend 文档,我只需要感受一下它的复杂性。
【问题讨论】:
SWIG 怎么样? http://www.swig.org/
【讨论】:
在http://pear.php.net/,我发现了一个名为“inline_c”的扩展。不幸的是,我没有得到维护。但看起来这将是我更喜欢的那种东西。
【讨论】:
你能把你的库打包成一个 DLL 吗?如果是这样,您可以通过 PHP 的 COM api 调用它们。
PHP COM 文档: http://us3.php.net/manual/en/book.com.php
示例代码:
<?php
$com = new COM("DynamicWrapper");
$com->Register("KERNEL32", "Beep", "i=ll", "f=s", "r=l");
$com->Beep(800, 10);
否则,您可以编写一个包含自定义包装函数的扩展(即,execute_through_wrapper('yourfunc'))。这是一个关于用 C 编写 php 函数的文档。
http://php.net/manual/en/internals2.funcs.php
编辑:
http://abhinavsingh.com/blog/2008/12/php-extensions-how-and-why/
这是一个关于用 C 编写扩展的快速教程。编写包装函数应该不会太难。一旦你创建了扩展,它就可以通过dl()动态加载(非常危险,并且已经被贬值了)。
http://us2.php.net/manual/en/function.dl.php
在您的情况下,这些是唯一的选择。没有 dll 加载程序(它是一个与 win32 相关的 api 调用)的 linux 等效项(.so 加载程序)。
【讨论】:
您也可以让gearman 充当中间人。
Gearman 提供了一个通用应用程序 将工作外包给其他人的框架 更好的机器或流程 适合做这项工作。它让你 并行工作,加载 余额处理,并调用 语言之间的功能。有可能 用于各种应用, 从高可用性网站到 数据库复制的传输 事件。换句话说,它是 神经系统如何分布 处理通信。
【讨论】: