5

在最近的一个项目中,我真的需要 lib tre 匹配库。

但是该项目是在 php 中的,并且该库没有 php 绑定。

我试图用谷歌搜索如何为 c 库创建一个接口,但我发现的只是dl接缝只加载 php 扩展的函数。

我错过了什么?

4

3 回答 3

7

如果不存在“ php 绑定”,看起来您将不得不开发它们;-)

这是通过PHP 扩展完成的——例如:

  • 用于与 MySQL 通信的mysql扩展名,绑定 libmysql 库(使用 PHP <= 5.2)
  • curl扩展,这是一个围绕 curl 库的包装器
  • 还有很多其他...


如果您想了解有关编写 PHP 扩展的更多信息,这些链接可能会让您感兴趣:(
请注意,这不是一件容易的事——但如果您需要......好吧^^;有些人会说这并不难)

而且,如果你对这个主题真的很感兴趣,并准备花一些钱,你可以购买这本书扩展和嵌入 PHP 有些页面也可以在 Google Books 上预览对这个主题感兴趣的时候可以考虑看书(其实我前段时间就买了,我觉得确实是一本有趣的书)

顺便说一句,那本书的作者也是我链接到的前四篇文章的作者;-)

于 2010-04-04T11:17:19.543 回答
1

编写一个将 tre 暴露给 PHP 的扩展(或找到一个已经这样做的扩展)。一个好的起点就在这里

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

于 2010-04-04T11:12:17.313 回答
0

自 PHP 7.4 起,扩展FFI(外部函数接口)被捆绑,但默认禁用。

应该注意的是,在撰写本文时,该扩展仍然被认为是实验性的,即它的界面可能会更改,恕不另行通知。

例子

调用 libc 的printf()

$ffi = FFI::cdef('int printf(const char *format, ...);', 'libc.so.6');

$ffi->printf('It %s!%s', 'works', PHP_EOL);

非 CLI SAPI

默认情况下,FFI 仅适用于 PHP 的 CLI SAPI。对于 FPM 等其他 SAPI,有以下选项:

  • 通过 OPcache 使用预加载(示例)或
  • 设置ffi.enabletrue(慢)。

进一步阅读

于 2020-12-07T20:59:35.523 回答