PHP-FFI 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
PHP-FFI 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议: 未知
开发语言: C/C++ PHP 查看源码 »
操作系统: 跨平台
收录时间: 2018-04-20
提 交 者: 达尔文

FFI PHP 扩展提供了一种调用本地函数,访问本地变量和创建/访问用 C 语言定义的数据结构的简单方法。 扩展的 API 非常简单,并通过以下示例及其输出来演示:

<?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)
}

FFI::__constructor() 有两个参数(都是可选的)。 第一个是 C 声明的集合,第二个是 DSO 库。 由第一个参数定义的所有变量和函数都绑定到 DSO 库中相应的本地符号,然后可以作为FFI对象方法和属性访问。 C 类型的参数,返回值和变量会自动转换为 PHP 类型(如果可能)。 否则,它们被封装在一个特殊的 CData 代理对象中,并可能被元素访问。

在某些情况下(例如,通过指针传递 C 结构),我们可能需要创建一个真正的 C 数据结构。 这可以使用 FFF::new() 方法。 它需要一个 C 类型定义,并且可以重用由 FFI::__constructor() 定义的 C 类型和标签。

也可以使用 FFI::new() 作为静态方法来创建任意 C 数据结构。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

PHP-FFI 的相关博客

PHP FFI - 一种全新的PHP扩展方式

本文转自鸟哥博客:https://www.laruence.com/2020/03/11/5475.html 随着PHP7.4而来的有一个我认为非常有用的一个扩展,PHP F...

PHP 7.4 前瞻:FFI 新特性

FFI扩展已经通过RFC,正式成为PHP 7.4核心扩展。 什么是FFI FFI(Foreign Function Interface),即外部函数接口,是指在一种...

PHP FFI详解 - 一种全新的PHP扩展方式

https://www.laruence.com/2020/03/11/5475.html 本文地址: https://www.laruence.com/2020/03/11/5475.html 转载请注明出处 ...

PHP FFI详解 - 一种全新的PHP扩展方式

本文地址: https://www.laruence.com/2020/03/11/5475.html 转载请注明出处 随着PHP7.4而来的有一个我认为非常有用的一个扩展...

PHP FFI详解 - 一种全新的PHP扩展方式

https://www.laruence.com/2020/03/11/5475.html 本文地址: https://www.laruence.com/2020/03/11/5475.html 转载请注明出处 ...

PHP FFI详解 - 一种全新的PHP扩展方式

本文地址: https://www.laruence.com/2020/03/11/5475.html 转载请注明出处 随着PHP7.4而来的有一个我认为非常有用的一个扩展...

PHP FFI详解-一种全新的PHP扩展方式

本文地址: https://www.laruence.com/2020/03/11/5475.html 转载请注明出处 随着PHP7.4而来的有一个我认为非常有用的一个扩展...

Rust FFI 编程 - FFI 概述

FFI(Foreign Function Interface)是这样一种机制:用一种编程语言写的程序能调用另一种编程语言写的函数(routines)。 FF...

让PHP能够调用C的函数-FFI扩展

让PHP能够调用C的函数-FFI扩展 在大型公司中,一般会有很多编程语言的配合。比如说让 Java 来做微服务层,用 C++ 来进行底层运...

PHP FFI详解——一种全新的PHP扩展方法

随着PHP7.4而来的有一个我认为非常有用的一个扩展:PHP FFI(Foreign Function interface),引用一段PHP FFI RFC中的一段描述...

PHP-FFI 的相关问答

还没有任何问答,马上提问

评论 (3)

加载中
emm 还行
2019/10/31 19:55
回复
举报
能用于哪些场景啊
2018/08/22 14:13
回复
举报
打分: 力荐
这个不错
2018/08/22 13:10
回复
举报
更多评论
3 评论
6 收藏
分享
返回顶部
顶部