是否可以使用PHP的C ++二进制文件

时间:2009-04-01 13:20:12

标签: php

是否有可能编写一些C或C ++代码并编译为二进制文件,然后使用这些二进制文件与PHP?是否也可以使用C和C ++编写php库?

如果是这样,请告诉我该怎么办?

8 个答案:

答案 0 :(得分:14)

PHP在设计上是模块化的 - 它由“引擎”和许多扩展组成,其中一些是必不可少的(例如“标准”扩展),有些是可选的。它们可以动态编译或加载(通过php.ini设置或dl()函数)。

如果您愿意学习API,可以在C / C ++中轻松编写自己的PHP扩展。从有关如何"hack the Zend Engine"

的文档开始

答案 1 :(得分:12)

您可能需要查看SWIG,这是一个包装库的通用工具,以便可以从各种语言中调用它们。 SWIG支持PHP,Perl和Lua(我个人使用的目标)也是如此。引自SWIG website的功能列表:

  

SWIG目前生成包装代码   对于十八个不同的目标   语言:

     
      
  • Allegro CL
  •   
  • C#
  •   
  • CFFI
  •   
  • CLISP
  •   
  •   
  • 狡诈
  •   
  • 爪哇
  •   
  • 的Lua
  •   
  • Modula一3
  •   
  • 的MzScheme
  •   
  • OCAML
  •   
  • 八度
  •   
  • 的Perl
  •   
  • PHP
  •   
  • 的Python
  •   
  • - [R
  •   
  • 红宝石
  •   
  • 的Tcl
  •   
  • UFFI
  •   
     

除此之外,解析树   可以导出为XML和Lisp   s表达式。实验工作是   也可用于派克模块。

它的一些功能依赖于每种语言包装器生成器中的后端支持,但通常它提供了易于使用的包装器,用于将所有普通数据值类型传入和传出函数。在目标语言具有概念的情况下,它通常也可以映射对象模型。

答案 2 :(得分:7)

您可以使用system()函数在php中使用C ++编译的代码,并通过操作系统调用您的程序(就像在命令行中一样)。

答案 3 :(得分:3)

可以用C ++编写php扩展(但你也必须编写C facade)。这不是微不足道的,而且我会说,如果你要求而不是查看PHP代码,你就不太熟悉C以及PHP如何在里面工作,并且由于它的文档很糟糕,对你来说这是一个坏主意用C语言编写库。

编辑:有一些关于zend的基本教程。 http://devzone.zend.com/node/view/id/1021,正如我正在调查的那样,也许自PHP时代以来文档发生了变化:)

答案 4 :(得分:3)

您可以使用几乎任何语言编写扩展,并通过动态链接库与PHP一起使用。

答案 5 :(得分:2)

您可以构建php可以加载的共享对象扩展。在http://devzone.zend.com/node/view/id/1021

上有一个简短的教程

答案 6 :(得分:1)

您可以使用C / C ++编写代码并将其编译为EXE。然后你可以调用exec();来自PHP并执行代码。

答案 7 :(得分:0)

PHP正在从预构建的库中调用函数来完成许多工作。如果您有一个用C或C ++编写的自己的库,您可以为它创建PHP绑定,然后像其他任何PHP函数一样从其余的PHP代码中调用它。

以Mcrypt函数为例,这只是libMyCrypt库的PHP包装器。

有趣的是,“因为它在企业应用程序中真的需要”。 PHP当前库集中缺少什么?