The Foreign Function Interface (FFI) is a simple way to call any native functions, access variables or create data structures defined in original C language.
The solution is in the experimental extension that could be already used in PHP 7.3+; the library is libffi and allows a high level languages to generate C code. The github page is: https://github.com/dstogov/php-ffi. An example usage is provided below:
//php code $libc = new FFI(" //start of C code int printf(const char *format, ...); const char * getenv(const char *); unsigned int time(unsigned int *); typedef unsigned int time_t; typedef unsigned int suseconds_t; struct timeval { time_t tv_sec; suseconds_t tv_usec; }; struct timezone { int tz_minuteswest; int tz_dsttime; }; int gettimeofday(struct timeval *tv, struct timezone *tz); //end of C code ", "libc.so.6"); $libc->printf("Hello World from %s!\n", "PHP"); var_dump($libc->getenv("PATH")); var_dump($libc->time(null)); $tv = $libc->new("struct timeval"); $tz = $libc->new("struct timezone"); $libc->gettimeofday(FFI::addr($tv), FFI::addr($tz)); var_dump($tv->tv_sec, $tv->tv_usec, $tz); //will output Hello World from PHP! string(135) "/usr/lib64/qt-3.3/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/adam/.local/bin:/home/adam/bin" int(1523617815) int(1523617815) int(977765) object(FFI\CData:)#3 (2) { ["tz_minuteswest"]=> int(-180) ["tz_dsttime"]=> int(0) }
Reference
PHP 7 News & Updates v7.0 – 7.4 Book https://www.amazon.com/PHP-News-Updates-v7-0-7-4/dp/1727202481/
Rate this artcile
[Total: 1 Average: 5]