Zend 的 Dmitry Stogov 通过允许 PHP 执行嵌入式 C 代码扩展了 PHP 的领域。 这将允许完全访问本地 C 函数,变量以及数据结构。
Zend 的 Dmitry Stogov 通过允许 PHP 执行嵌入式 C 代码扩展了 PHP 的领域。 这将允许完全访问本地 C 函数,变量以及数据结构。
解决方案 PHP FFI 作为实验性扩展提供,但要求 PHP 7.3 的开发版本。 该解决方案还不能用于生产,但它构建在坚实的基础之上,使用 FFI(外部函数接口)库 libffi,允许高级语言生成代码。
输入:
- <?php$libc=newFFI("
- intprintf(constchar*format,...);
- char*getenv(constchar*);
- unsignedinttime(unsignedint*);
- typedefunsignedinttime_t;
- typedefunsignedintsuseconds_t;
- structtimeval{
- time_ttv_sec;
- suseconds_ttv_usec;
- };
- structtimezone{
- inttz_minuteswest;
- inttz_dsttime;
- };
- intgettimeofday(structtimeval*tv,structtimezone*tz);
- ","libc.so.6");$libc->printf("HelloWorldfrom%s!\n","PHP");
- var_dump($libc->getenv("PATH"));
- var_dump($libc->time(null));$tv=$libc->new("structtimeval");$tz=$libc->new("structtimezone");$libc->gettimeofday($tv,$tz);
- var_dump($tv->tv_sec,$tv->tv_usec,$tz);?>
将输出:
- HelloWorldfromPHP!
- 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 后续的不断优化,性能还会不断提升。
©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经