前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP FFI 允许在 PHP 脚本中嵌入原始 C 代码

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

作者头像
猿哥
发布2019-07-25 23:02:22
1K0
发布2019-07-25 23:02:22
举报
文章被收录于专栏:Web技术布道师

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

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

输入:

代码语言:javascript
复制
<?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);?>

将输出:

代码语言:javascript
复制
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)}

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

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

原文: react-etc.net 编译:开源中国

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP技术大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档