Hướng dẫn php ffi rust
Giới thiệuĐược đề xuất từ RFC: PHP RFC: FFI - Foreign Function Interface, PHP FFI đã chính thức được chấp nhận và trở thành một extension của PHP từ phiên bản PHP 7.4. FFI cho phép bạn sử dụng các thư viện shared library (các file
PHP FFI còn đang được phát triển và có tiềm năng ứng dụng cao, một vài ví dụ:
Thử dùng PHP FFIĐể sử dụng PHP FFI, cách đơn giản là sử dụng docker PHP 7.4:
Sau đó chạy các lệnh để cài đặt FFI extension:
Kiểm tra lại xem FFI extension đã được load chưa bằng lệnh:
=> Output:
Theo mặc định FFI được enable trong các trường hợp sau:
Tuy nhiên có thể thiết lập lại thông qua giá trị
Ví dụLoad thư viện có sẵnVí dụ đơn giản đầu tiên đó là load thư viện
Ngoài cách sử dụng Tạo file header
Định nghĩa Load FFI:
Trông có vẻ sáng sủa hơn vì chúng ta đã tách việc định nghĩa function cần binding thành 1 file riêng biệt đúng theo cú pháp của C. Tự tạo thư việnTrong ví dụ này chúng ta sẽ tạo một thư viện C và sau đó load vào PHP qua FFI. Để tạo 1 thư viện đơn giản, cần có những file sau:
File
File
Tiếp theo chúng ta sẽ compile thành shared libary
Tiếp theo là test với PHP:
Bạn có thể tham khảo thêm cách biên dịch shared library tại bài viết https://platform.sh/blog/2020/php-fun-with-ffi-just-enough-c/ Ví dụ với libuuidPHP có một vài thư viện để generate UUID. Một trong số đó là sử dụng PECL UUID extension. Bạn có thể đọc code của nó trên
GitHub. Extension đảm nhiệm vai trò binding PHP functions với Đây là luồng hoạt động khi chúng ta gọi function
Tính năng của FFI thể hiện ở việc thay thế layer "UUID extension" bằng code PHP trực tiếp. Trong thư viện
Chúng ta sẽ tạo file
header để FFI load bằng cách copy file
Đến đây, tương tự như các ví dụ trên, ta có thể gọi các function
Ở đây chúng ta sử dùng function Tham khảo thêm tại: https://github.com/jolicode/ffi-uuid Ngoài ra mình cũng thử nghịch với lib của VLC để thử chơi mp3 bằng PHP nhưng chưa được, bạn nào có ý tưởng thì chia sẻ nhé => https://www.reddit.com/r/PHP/comments/gdgvyg/poc_php_ffi_and_libvlc/Kết luậnChúng ta đã thực hiện việc binding thư viện bên ngoài khá dễ dàng với PHP FFI. Cảm ơn các bạn đã đọc và hy vọng bài viết có thể giúp bạn có cái nhìn ban đầu về FFI và nghĩ ra được nhiều ứng dụng hơn với FFI. Reference:
|