Écrire des extensions pour PHP

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
55
Mois de parution
juillet 2011
Spécialité(s)


Résumé
PHP est un langage de scripting de haut niveau, dynamiquement typé qui propose une sémantique objet. Il est construit au dessus de C (langage de bas niveau, statiquement typé), reposant sur des structures et des types définis dans l'API Zend Engine 2.0.PHP Possède une collection de fonctions très impressionnante qui servent à répondre à des besoins algorithmiques classique et couvrent un très large spectre fonctionnel. Cependant, il peut arriver que dans certains cas, les script exécutés soient particulièrement long car le nombre d'instructions demandées est excessivement important et qu'aucune optimisation de code, en restant dans le cadre de PHP, ne puisse améliorer les performances.Dans ce cas, écrire cet algorithme en C en gérant soi-même les ressources peut permettre de ne pas faire exploser la consommation mémoire ou de rendre le traitement plus rapide. Une autre bonne raison d'écrire des extensions C est le fait de vouloir utiliser une librairie externe.Pour cela, il faut disposer d'un bon niveau en C, et en optimisation de code, puis connaître les bases de l'interaction entre C et PHP.

1. API Zend Engine 2.0

1.1 Créer un module

Qu'est-ce qu'un module PHP ? Basiquement, il s'agit d'une collection de fonctions réunies sous une même dénomination. D'une manière plus complète, il faut aller voir la structure C qui représente un module PHP :

typedef struct _zend_module_entry zend_module_entry;

struct _zend_module_entry {

 unsigned short size;

 unsigned int zend_api;

 unsigned char zend_debug;

 unsigned char zts;

Ces quatre premiers éléments sont standards et permettent d'avoir des informations sur la manière dont le module sera traité par le cœur de PHP.

char *name;

Nom du module :

zend_function_entry *functions;

Liste de fonctions :

int (*module_startup_func)(INIT_FUNC_ARGS);

 int (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS);

 int (*request_startup_func)(INIT_FUNC_ARGS);

 int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS);

Ceci permet de créer des hooks de manière à intervenir à des moments clés de l'exécution du script.

void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS);

Permet...

Cet article est réservé aux abonnés. Il vous reste 98% à découvrir.
S'abonner à Connect
  • Accédez à tous les contenus de Connect en illimité
  • Découvrez des listes de lecture et des contenus Premium
  • Consultez les nouveaux articles en avant-première
Je m'abonne


Article rédigé par

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous