PHP FFI 允许在 PHP 脚本中嵌入 C 代码

Zend 的 Dmitry Stogov 通过允许 PHP 执行嵌入式 C 代码扩展了 PHP 的领域。 这将允许完全访问本地 C 函数,变量以及数据结构。

PHP FFI 允许在 PHP 脚本中嵌入 C 代码

解决方案 PHP FFI 作为实验性扩展提供,但要求 PHP 7.3 的开发版本。 该解决方案还不能用于生产,但它构建在坚实的基础之上,使用 FFI(外部函数接口)库 libffi,允许高级语言生成代码。

输入:

<?php$libc = new FFI(" 


    int printf(const char *format, ...); 


    char * getenv(const char *); 


    unsigned int time(unsigned int *); 


 


    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");$libc->printf("Hello World from %s!\n", "PHP"); 


var_dump($libc->getenv("PATH")); 


var_dump($libc->time(null));$tv = $libc->new("struct timeval");$tz = $libc->new("struct timezone");$libc->gettimeofday($tv, $tz); 


var_dump($tv->tv_sec, $tv->tv_usec, $tz);?> 

将输出:

Hello World from PHP! 


string(135) "/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/dmitry/.local/bin:/home/dmitry/bin"int(1523617815) 


int(1523617815) 


int(977765) 


object(CData)#3 (2) { 


  ["tz_minuteswest"]=> 


  int(-180) 


  ["tz_dsttime"]=> 


  int(0) 


} 

相关推荐