
利用FFI在PHP中调用C/Go SO库
以往在PHP中调用外部语言编写的SO库,需要编写PHP扩展。但从PHP 7.4版本开始,借助FFI(Foreign Function Interface),无需扩展即可直接调用SO库。
此方法的步骤如下:
FFI::cdef创建C数据结构的FFI绑定,并传入SO库路径。FFI::new创建一个C数据结构实例,作为函数参数或返回值。FFI::addr)。示例:
立即学习“PHP免费学习笔记(深入)”;
假设有一个C函数:
<code class="c">int get_timestamp(struct timeval *tv) {
gettimeofday(tv, NULL);
return tv->tv_sec;
}</code>使用FFI在PHP中调用该函数:
<code class="php"><?php
$ffi = FFI::cdef("
typedef long time_t;
struct timeval {
time_t tv_sec;
long tv_usec;
};
int get_timestamp(struct timeval *tv);
", "mylib.so");
$tv = $ffi->new("timeval");
$timestamp = $ffi->get_timestamp(FFI::addr($tv));
echo $tv->tv_sec . " " . $tv->tv_usec . PHP_EOL;
?></code>重要提示:
FFI目前仍处于实验阶段,稳定性有待进一步提升。
以上就是PHP 7.4 之后如何使用FFI无需扩展调用C/Go SO库?的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号