从php加载c库

从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

在最近的一个项目中,我非常需要lib-tre匹配库

但是,该项目是用php编写的,并且该库没有php绑定

我曾尝试用谷歌搜索如何为c libs创建接口,但我只找到了
dl
函数,该函数只允许加载php扩展


我遗漏了什么?

编写一个将tre公开给PHP的扩展(或者找到一个已经公开了的扩展)。一个好的起点是

请注意,您将无法在大多数托管服务上加载扩展。

如果不存在“php绑定”,您将不得不开发它们

这是通过PHP扩展来实现的,例如:


  • 用于与MySQL通信的绑定libmysql库(使用PHP,因为PHP 7.4扩展FFI(外部函数接口)是捆绑的,但默认情况下是禁用的

    值得注意的是,在撰写本文时,该扩展仍被认为是实验性的,即其接口可能会在不另行通知的情况下更改

    例子 调用libc的
    printf()

    非CLI SAPIs 默认情况下,FFI仅在PHP的CLI SAPI中工作。对于其他SAPI,如FPM,有以下选项:

    • 通过OPcache()或
    • 设置为
      true
      (慢速)
    进一步阅读

    我想这意味着,没有像python ctypes模块这样的东西可以直接与C代码接口。这个SWIG的东西呢?对不起,不知道SWIG的东西:我听说过,但我自己从来没有用过;;关于ctypes,我想没有太多:我知道的唯一类似的东西是FFI()最后一个版本是alpha,2004年…;;在PHP中,使用外部库的标准方法是在其周围编写一个包装器作为扩展。链接已消失。Marcelo,是否要更新或删除此答案?
    $ffi = FFI::cdef('int printf(const char *format, ...);', 'libc.so.6');
    
    $ffi->printf('It %s!%s', 'works', PHP_EOL);