PHP:如何调用标准库函数

8
我正在学习用PHP创建动态网页。我有一些用ANSI C编写的库,用于获取/设置参数和其他专有功能。我想知道,是否有一个简单的解决方案来使用PHP内部的包装器调用这些函数?是否已经存在类/库?如果要自己实现,最佳实践是什么?我不想调用外部应用程序并使用stdin/stdout!
是否有一个简单的示例可用?我现在不想深入研究Zend文档,我只需要了解其复杂性。

可能是从PHP调用C/C++库函数的重复问题 - Harry Johnston
4个回答

8

你能将你的库打包成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);

否则,您可以编写一个包含自定义包装函数的扩展程序(即,执行_through_wrapper('yourfunc'))。这是关于在C中编写php函数的文档。

http://php.net/manual/en/internals2.funcs.php

Edit:
http://abhinavsingh.com/blog/2008/12/php-extensions-how-and-why/

这是一个关于用C语言编写扩展的快速教程。撰写包装函数不应该太难。一旦创建了扩展,可以通过dl()进行动态加载(非常危险且已弃用)。

http://us2.php.net/manual/en/function.dl.php

在您的情况下,那些是唯一的选项。Linux没有.dll加载器的等效物(.so加载器)(这是一个与win32相关的api调用)。


我忘了提到,我们的操作系统是Linux,但是应该可以为这些库构建一个共享库。 - Andi
谢谢John,读这篇文章花了一些时间,我猜写一个扩展程序并不是太复杂! - Andi
你可以很容易地用C语言为你的库编写一个扩展,如果你只需要通过调用你的C库方法来获取一些数据,那么这应该只需要15分钟的工作时间。 - Abhinav Singh

2
您还可以让gearman充当中介。
Gearman提供了一个通用的应用程序框架,将工作分配给其他更适合完成工作的机器或进程。它允许您并行处理工作,平衡负载,以及在不同语言之间调用函数。它可用于各种应用程序中,从高可用性的网站到数据库复制事件的传输。换句话说,它是分布式处理通信的神经系统。

哇 - 这对我来说完全是新的!它看起来像是一个轻量级的RPC客户端/服务器框架,不是吗?也许对于一个小应用程序来说有点过度杀伐,但对于一个复杂的系统来说可能非常有用。我可以将其用于PHP、C、C++等多个进程之间的通信吗? - Andi

1

0
http://pear.php.net/ 我发现了一个叫做 "inline_c" 的扩展。不幸的是,它已经没有维护了。但是看起来这正是我喜欢的那种东西。

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