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

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

专注于为中小企业提供网站制作、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业凉山州免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了1000多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

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

输入:

 
 
 
  1.     int printf(const char *format, ...); 
  2.     char * getenv(const char *); 
  3.     unsigned int time(unsigned int *); 
  4.  
  5.     typedef unsigned int time_t; 
  6.     typedef unsigned int suseconds_t; 
  7.  
  8.     struct timeval { 
  9.         time_t      tv_sec; 
  10.         suseconds_t tv_usec; 
  11.     }; 
  12.  
  13.     struct timezone { 
  14.         int tz_minuteswest; 
  15.         int tz_dsttime; 
  16.     }; 
  17.  
  18.     int gettimeofday(struct timeval *tv, struct timezone *tz);     
  19. ", "libc.so.6");$libc->printf("Hello World from %s!\n", "PHP"); 
  20. var_dump($libc->getenv("PATH")); 
  21. var_dump($libc->time(null));$tv = $libc->new("struct timeval");$tz = $libc->new("struct timezone");$libc->gettimeofday($tv, $tz); 
  22. var_dump($tv->tv_sec, $tv->tv_usec, $tz);?> 

将输出:

 
 
 
  1. Hello World from PHP! 
  2. 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) 
  3. int(1523617815) 
  4. int(977765) 
  5. object(CData)#3 (2) { 
  6.   ["tz_minuteswest"]=> 
  7.   int(-180) 
  8.   ["tz_dsttime"]=> 
  9.   int(0) 

FFI 目前的数据结构访问还比较缓慢,比访问原始 PHP 数组和对象的速度慢大约 4 倍。现阶段的速度虽然不太乐观,但还是可以帮助节省内存和资金的。

随着 PHP FFI 后续的不断优化,性能还会不断提升。

文章名称:PHPFFI允许在PHP脚本中嵌入C代码
标题URL:http://www.mswzjz.cn/qtweb/news37/230737.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能