我从PHP开始动态网页。我有一些用ANSI C编写的库来获取/设置参数和其他专有的东西。我想知道,是否有一个简单的解决方案在PHP中使用包装器来调用这个函数?是否已存在类/库?在我自己做这个的最佳做法是什么?我不想调用外部应用程序并使用stdin / stdout!
是否有简单的例子?我现在不想深入了解Zend文档,我只需要感受复杂性。
答案 0 :(得分:6)
您可以将库打包到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加载器没有linux等价物(.so loader)(与win32相关的api调用)。
答案 1 :(得分:2)
您也可以gearman充当中间人。
Gearman提供了一个通用的应用程序 将工作分配给其他人的框架 机器或过程更好 适合做这项工作。它允许你 要并行工作,加载 平衡处理,并打电话 语言之间的功能。有可能 用于各种应用, 从高可用性网站到 数据库复制的传输 事件。换句话说,就是这样 神经系统如何分配 处理沟通。
答案 2 :(得分:1)
SWIG是什么? http://www.swig.org/
答案 3 :(得分:0)
在http://pear.php.net/我找到了一个名为“inline_c”的扩展程序。不幸的是我没有得到维护。但看起来这将是我更喜欢的东西。