从php加载c库
在最近的一个项目中,我非常需要lib-tre匹配库 但是,该项目是用php编写的,并且该库没有php绑定 我曾尝试用谷歌搜索如何为c libs创建接口,但我只找到了从php加载c库,php,c,interface,tre-library,Php,C,Interface,Tre Library,在最近的一个项目中,我非常需要lib-tre匹配库 但是,该项目是用php编写的,并且该库没有php绑定 我曾尝试用谷歌搜索如何为c libs创建接口,但我只找到了dl函数,该函数只允许加载php扩展 我遗漏了什么?编写一个将tre公开给PHP的扩展(或者找到一个已经公开了的扩展)。一个好的起点是 请注意,您将无法在大多数托管服务上加载扩展。如果不存在“php绑定”,您将不得不开发它们 这是通过PHP扩展来实现的,例如: 用于与MySQL通信的绑定libmysql库(使用PHP,因为PHP 7
dl
函数,该函数只允许加载php扩展
我遗漏了什么?编写一个将tre公开给PHP的扩展(或者找到一个已经公开了的扩展)。一个好的起点是 请注意,您将无法在大多数托管服务上加载扩展。如果不存在“php绑定”,您将不得不开发它们 这是通过PHP扩展来实现的,例如:
- 用于与MySQL通信的绑定libmysql库(使用PHP,因为PHP 7.4扩展FFI(外部函数接口)是捆绑的,但默认情况下是禁用的
值得注意的是,在撰写本文时,该扩展仍被认为是实验性的,即其接口可能会在不另行通知的情况下更改
例子
调用libc的
: 非CLI SAPIs 默认情况下,FFI仅在PHP的CLI SAPI中工作。对于其他SAPI,如FPM,有以下选项:printf()
- 通过OPcache()或
- 设置为
(慢速)true
$ffi = FFI::cdef('int printf(const char *format, ...);', 'libc.so.6'); $ffi->printf('It %s!%s', 'works', PHP_EOL);