
利用FFI在PHP中调用C/Go SO库
以往在PHP中调用外部语言编写的SO库,需要编写PHP扩展。但从PHP 7.4版本开始,借助FFI(Foreign Function Interface),无需扩展即可直接调用SO库。
此方法的步骤如下:
创建FFI绑定: 使用FFI::cdef创建C数据结构的FFI绑定,并传入SO库路径。创建C数据结构: 使用FFI::new创建一个C数据结构实例,作为函数参数或返回值。调用C函数: 通过FFI接口调用C函数,并传入C数据结构实例的地址(FFI::addr)。访问C数据: 根据需要访问C数据结构的字段,或将整个结构转换为PHP值。
示例:
立即学习“PHP免费学习笔记(深入)”;
假设有一个C函数:
int get_timestamp(struct timeval *tv) { gettimeofday(tv, NULL); return tv->tv_sec;}
使用FFI在PHP中调用该函数:
new("timeval");$timestamp = $ffi->get_timestamp(FFI::addr($tv));echo $tv->tv_sec . " " . $tv->tv_usec . PHP_EOL;?>
重要提示:
FFI目前仍处于实验阶段,稳定性有待进一步提升。
以上就是PHP 7.4 之后如何使用FFI无需扩展调用C/Go SO库?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1384264.html
微信扫一扫
支付宝扫一扫