在PHP中使用C/C++代码而无需编写扩展

5

我读到可以通过编写扩展来在PHP中使用C/C++代码。是否有更简单的方法,例如使用魔术包装或类似的东西(我必须说,我听过这个词,但不太了解包装器是什么)。

6个回答

5
编译 PHP 扩展并不难。它有一个小的 API,就像 C 程序有 main 函数和如何将变量传递给该函数一样。

我明白了,所以我不需要重新编写代码或类似的事情吗? - sameold
不,这有点像编写内核驱动程序。你必须遵循一些规则。 - Micromega

5

没有。

PHP只解析PHP代码,不解析C或其后代语言,如C++。

如果您想在PHP中包含C代码,比如一些用C编写的函数,那么它必须在扩展中被调用并编译。

包装器是围绕代码的代码。大多数语言,如Delphi、VB等,都有本地代码创建,然后调用外部API函数,在此过程中处理所需的任何类型转换或参数修复。


4

同类产品中,tcc 可以用作 C 语言解释器。你可以安装它,然后从 PHP 中向其发送 C 语言程序 :)

$output = `echo -e '#include <stdio.h>\nint main(void) { printf("Hello, World!\\n"); return 0;}' | tcc -run -`;

你能给我推荐一下你喜欢的关于这个主题的教程吗?希望它可靠而且不太复杂。 - sameold
这并不是真正将PHP和C集成在一起。使用这种解释器的解决方案可以使它们保持独立。只需阅读C和/或PHP教程和/或手册即可。在决定使用tcc之前,我尝试了几个C解释器。 - pmg

3

不能在PHP代码内部编写C或C++代码。唯一的方法是编写PHP扩展程序。另外,你可以查看HipHop-PHP,它可以将任何PHP代码转换为高度优化的C++代码(由Facebook开发)。


1
也许他可以编写一个扩展程序使其成为可能?就像内联汇编一样。 - Micromega
内联汇编在C语言中可行是因为C语言会直接被编译成汇编代码,而PHP不会。PHP会转化为一些字节码,这些字节码与汇编代码相差甚远。 - halfdan

1
根据您想要做什么,您可以将代码编译为可执行文件,然后通过php启动它,例如通过exec-function函数。
如果这不够用,恐怕您需要研究创建扩展 - 但如果您已经了解c或c ++,那并不难。

1

声明一下:
是的,你可以使用FFI扩展来实现:

<?php
// create FFI object, loading libc and exporting function printf()
$ffi = FFI::cdef(
    "int printf(const char *format, ...);", // this is a regular C declaration
    "libc.so.6");
// call C's printf()
$ffi->printf("Hello %s!\n", "world");
?>

它将返回

Hello world!

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