Loading c libraries from php
Asked Answered
D

3

5

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?

Drinking answered 4/4, 2010 at 11:2 Comment(0)
A
7

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 ;-)

Amaranth answered 4/4, 2010 at 11:17 Comment(2)
I guess that means, there is no such thing like the python ctypes module for directly interfacing C code.. What about this SWIG thing?Drinking
Sorry, no idea about the SWIG thing : I've heard about it, but never used it myself ;;; about ctypes, I don't think there's much : the only thing like that I know about is FFI ( pecl.php.net/package/ffi ) and the last version was an alpha, in 2004... ;;; the standard way of using an external library, in PHP, is to write an extension as a wrapper arround it.Amaranth
L
1

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.

Lighthearted answered 4/4, 2010 at 11:12 Comment(1)
Link has disappeared. Marcelo, would you like to update or remove this answer?Ablution
S
1

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, i.e. 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

Steiger answered 7/12, 2020 at 20:59 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.