Qu’est-ce que FFI ?
Le module FFI (Foreign Function Interface) en PHP permet d’interagir directement avec des bibliothèques écrites en C sans avoir besoin d’extensions natives compilées. Introduit dans PHP 7.4, il offre la possibilité d’appeler des fonctions C, d’accéder à des variables globales et d’interagir avec des structures de données en mémoire native.
FFI est particulièrement utile pour :
- Utiliser des bibliothèques C existantes sans créer d’extensions PHP spécifiques.
- Accéder à des API système bas niveau.
- Optimiser des opérations critiques en performance en appelant du code natif.
Fonctionnalités du module FFI en PHP
Le module FFI permet :
- Déclarer et charger des bibliothèques C (
FFI::cdef()
,FFI::load()
). - Appeler des fonctions C directement depuis PHP.
- Accéder aux structures et types C (
struct
,union
,typedef
). - Lire et modifier des variables en mémoire partagée.
Exemple d’utilisation :
Appeler une fonction de la bibliothèque standard C
$ffi = FFI::cdef(" int printf(const char *format, ...); ", "libc.so.6"); // Linux (sur Windows, utiliser "msvcrt.dll") $ffi->printf("Bonjour depuis C !\n");
Manipulation de structures C
$ffi = FFI::cdef(" typedef struct { int x; int y; } Point; "); $point = $ffi->new("Point"); $point->x = 10; $point->y = 20; echo "Point: ({$point->x}, {$point->y})\n";
Avantages de FFI
- Accès direct aux bibliothèques C sans nécessiter d’extensions compilées.
- Amélioration des performances pour les calculs complexes ou les traitements bas niveau.
- Interopérabilité avec d’autres langages et API système.
- Utilisation flexible pour la manipulation de structures mémoire et la gestion de la mémoire partagée.
Inconvénients de FFI
- Risque de sécurité élevé : Une mauvaise utilisation peut entraîner des erreurs mémoire ou des failles de sécurité.
- Dépendant du système d’exploitation : Nécessite des bibliothèques spécifiques à chaque plateforme (Linux, Windows, macOS).
- Désactivé par défaut sur certains serveurs** pour des raisons de sécurité.
Conclusion
Le module FFI en PHP est un outil puissant qui permet d’exploiter directement des bibliothèques C pour améliorer les performances et interagir avec des API système. Toutefois, il doit être utilisé avec précaution, car un accès incorrect à la mémoire peut provoquer des erreurs critiques.
🔗 Références :
- Documentation officielle PHP FFI : php.net/ffi
- Wikipedia sur FFI : fr.wikipedia.org/wiki/Foreign_Function_Interface