【发布时间】:2010-04-04 11:02:49
【问题描述】:
在最近的一个项目中,我真的需要 lib tre 匹配库。
但是项目是 php 的,并且库没有 php 绑定。
我尝试在谷歌上搜索如何为 c 库创建接口,但我发现的只是 dl 函数,该函数接缝仅加载 php 扩展。
我错过了什么?
【问题讨论】:
标签: php c interface tre-library
在最近的一个项目中,我真的需要 lib tre 匹配库。
但是项目是 php 的,并且库没有 php 绑定。
我尝试在谷歌上搜索如何为 c 库创建接口,但我发现的只是 dl 函数,该函数接缝仅加载 php 扩展。
我错过了什么?
【问题讨论】:
标签: php c interface tre-library
如果不存在“php 绑定”,那么您将不得不开发它们 ;-)
这是通过 PHP 扩展 完成的——例如:
mysql extension,用于与 MySQL 通信,绑定 libmysql 库(使用 PHP
curl extension,它是 curl 库的包装器
如果您想了解有关编写 PHP 扩展的更多信息,这些链接可能会让您感兴趣:
(请注意,这不是一件容易的事——但如果你被要求......好吧^^;有些人会说这不是那么难)
而且,如果你真的对这个主题很感兴趣,并准备花一些钱,你可以买这本书Extending and Embedding PHP (some pages are available as preview on Google Books 也是) ;它被认为是对这个主题感兴趣的书(事实上,我前段时间就买了它,而且,在我看来,这确实是一本有趣的书) em>
顺便说一句,那本书的作者也是我链接到的前四篇文章的作者;-)
【讨论】:
编写一个将 tre 暴露给 PHP 的扩展(或找到一个已经这样做的扩展)。一个好的起点是here。
请注意,您将无法在大多数托管服务上加载您的扩展程序。
【讨论】:
自 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);
默认情况下,FFI 仅适用于 PHP 的 CLI SAPI。对于 FPM 等其他 SAPI,有以下选项:
ffi.enable 设置为true(慢)。【讨论】: