🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
此扩展允许在纯PHP中加载共享库(.DLL或.so),调用C函数以及访问C数据结构,而无需深入了解Zend扩展API,也无需学习第三本“中级”语言。公共API被实现为具有多个静态方法(其中一些可以动态调用)和重载对象方法的单类[FFI](https://www.php.net/manual/en/class.ffi.php),这些方法执行与C数据的实际交互。 > **注意事项**: > > FFI扩展不会使经典的PHP扩展API失效。它仅用于与C函数和数据结构的临时接口。 **提示** 当前,访问FFI数据结构比访问本地PHP数组和对象要慢得多(大约2倍)。因此,使用FFI扩展来提高速度没有任何意义。但是,使用它减少内存消耗可能很有意义。 >[danger]**警告** FFI很危险,因为它允许在非常低的级别上与系统接口。FFI扩展仅应由具有C和使用过的C API知识的开发人员使用。为了最大程度地降低风险,可以使用[ffi.enable](https://www.php.net/manual/en/ffi.configuration.php#ini.ffi.enable)php.ini指令来限制FFI API的使用。 此扩展是*实验性*的。 此扩展的表象,包括其函数名称以及其他此扩展的相关文档都可能在未来的 PHP 发布版本中未通知就被修改。使用本扩展风险自担 。 这个扩展需要安装 `libffi` 库 为了启用FFI扩展,PHP必须配置——with- FFI . windows用户必须在PHP .ini中包含php\_ffi.dll来启用FFI扩展 ## **运行时配置** | 名字 | 默认 | 可修改范围 | 更新日志 | | --- | --- | --- | --- | | [ffi.enable](https://www.php.net/manual/zh/ffi.configuration.php#ini.ffi.enable) | "preload" | PHP\_INI\_SYSTEM |  允许启用(*“ true”*)或禁用(*“ false”*)FFI API使用,或仅将其限制为CLI SAPI和预加载的文件(*“ preload”*)。FFI API限制仅影响[FFI](https://www.php.net/manual/en/class.ffi.php)类,而不影响[FFI \\ CData](https://www.php.net/manual/en/class.ffi-cdata.php)对象的重载函数。这意味着可以在预加载的文件中创建一些[FFI \\ CData](https://www.php.net/manual/en/class.ffi-cdata.php)对象,然后直接在PHP脚本中使用它们 | | [ffi.preload](https://www.php.net/manual/zh/ffi.configuration.php#ini.ffi.preload) | "" | PHP\_INI\_SYSTEM |  允许在启动过程中预加载FFI绑定,如果设置了[opcache.preload\_user](https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.preload-user),则无法使用[FFI :: load()进行加载](https://www.php.net/manual/en/ffi.load.php)。该指令接受分隔的文件名列表。可以通过调用[FFI :: scope()](https://www.php.net/manual/en/ffi.scope.php)来访问预加载的绑定。**`DIRECTORY_SEPARATOR`** |