首页 > 文章列表 > PHP如何通过FFI直接调用C/Go编写的SO库?

PHP如何通过FFI直接调用C/Go编写的SO库?

241 2025-03-26

PHP如何通过FFI直接调用C/Go编写的SO库?

PHP利用FFI直接调用C/Go编写的SO库

PHP通常需要编写扩展来调用C/Go编写的SO库。然而,PHP 7.4版本引入了FFI(外部函数接口),允许在无需编写扩展的情况下直接调用已编译的SO库。

调用C语言SO库示例

以下代码演示如何使用FFI调用C语言编写的SO库:

$ffi = FFI::cdef("
    typedef unsigned int time_t;
    typedef unsigned int suseconds_t;

    struct timeval {
        time_t      tv_sec;
        suseconds_t tv_usec;
    };

    struct timezone {
        int tz_minuteswest;
        int tz_dsttime;
    };

    int gettimeofday(struct timeval *tv, struct timezone *tz);
", "libc.so.6");

$tv = $ffi->new("struct timeval");
$tz = $ffi->new("struct timezone");
var_dump($ffi->gettimeofday(FFI::addr($tv), FFI::addr($tz)));
var_dump($tv->tv_sec);
var_dump($tz);

调用Go语言SO库

目前,PHP尚不支持直接调用Go语言编写的SO库。

来源:1740455116