【问题标题】:PHP: How To Call Standard Library FunctionsPHP:如何调用标准库函数
【发布时间】:2011-02-21 01:11:13
【问题描述】:

我从 PHP 开始用于动态网页。我有一些用 ANSI C 编写的库,用于获取/设置参数和其他专有内容。我想知道,是否有一个简单的解决方案可以在 PHP 中使用包装器来调用这个函数?是否已经存在类/库?我自己做这件事的最佳做法是什么?我不想调用外部应用程序并使用标准输入/标准输出!

有一个简单的例子吗?我暂时不想深入阅读 Zend 文档,我只需要感受一下它的复杂性。

【问题讨论】:

标签: php c function call


【解决方案1】:

SWIG 怎么样? http://www.swig.org/

【讨论】:

    【解决方案2】:

    http://pear.php.net/,我发现了一个名为“inline_c”的扩展。不幸的是,我没有得到维护。但看起来这将是我更喜欢的那种东西。

    【讨论】:

      【解决方案3】:

      你能把你的库打包成一个 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 加载程序)。

      【讨论】:

      • 我忘了说,我们的操作系统是这个项目的Linux。但是应该可以为这个库构建一个共享库。
      • 感谢John,看了这篇文章花了一些时间,我想写一个扩展并不太复杂!
      • 你可以很容易地用 C 语言为你的库编写一个扩展,如果你只需要通过调用你的 c 库的方法来获取一些数据,这应该是 15 分钟的工作.....
      【解决方案4】:

      您也可以让gearman 充当中间人。

      Gearman 提供了一个通用应用程序 将工作外包给其他人的框架 更好的机器或流程 适合做这项工作。它让你 并行工作,加载 余额处理,并调用 语言之间的功能。有可能 用于各种应用, 从高可用性网站到 数据库复制的传输 事件。换句话说,它是 神经系统如何分布 处理通信。

      【讨论】:

      • 哇——这对我来说是全新的!它看起来像一个轻量级的 RPC 客户端/服务器框架,不是吗?对于小型应用程序可能有点矫枉过正,但对于复杂的系统,它可能非常有用。我可以将它用于多个进程之间的通信,用 PHP、C、C++ 等编写?
      猜你喜欢
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 2018-06-11
      • 2015-10-13
      • 2018-01-21
      • 2012-02-24
      相关资源
      最近更新 更多