简体   繁体   中英

Loading c libraries from php

in a recent project I've come really need the lib tre matching library.

However the project is in php, and there are no php bindings for the library.

I've tried to google how to create an interface for c libs, but all I found was the dl function which seams to load only php extensions.

What am I missing?

If no " php bindings " exist, it looks like you'll have to develop them ;-)

This is done via a PHP extension -- such as, for example :

  • the mysql extension , that's used to communicate with MySQL, binding the libmysql library (with PHP <= 5.2)
  • The curl extension , that's a wrapper arround the curl library
  • and so many others...


If you want to learn more about writing PHP extensions, those links will probably interest you :
(Note that it's not quite an easy task -- but if you are required to... well ^^ ; and some would say it's not that hard )

And, if you are really interested by the subject, and ready to spend some money on it, you could buy the book Extending and Embedding PHP ( some pages are available as preview on Google Books too) ; It's considered as the book to read when interested on this subject (In fact, I've bought it some time ago, and, in my opinion, it is indeed an interesting read)

BTW, the author of that book is also the author of the first four articles I linked to ;-)

Write an extension that exposes tre to PHP (or find one that already does). A good starting point is here .

Be warned that you won't be able to load your extension on most hosting services.

Since PHP 7.4 the extension FFI (Foreign Function Interface) is bundled, but disabled by default.

It should be noted that as of this writing the extension is still considered EXPERIMENTAL, ie its interface may change without notice.

Example

Calling libc's printf() :

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

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

Non-CLI SAPIs

By default FFI only works in PHP's CLI SAPI. For other SAPIs like FPM there are the following options:

Further reading

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM