Maison >développement back-end >tutoriel php >Comment écrire une extension php
Pourquoi utiliser l'extension C ?
C est compilé statiquement et son efficacité d'exécution est bien supérieure à celle du code PHP. Les performances du même code d'opération, développé en C, seront des centaines de fois supérieures à celles de PHP. Pour les opérations IO telles que CURL, parce que la consommation de temps est principalement sur IOWait, l'extension C n'a aucun avantage évident.
De plus, l'extension C est chargée au démarrage du processus. Le code PHP ne peut exploiter que les données du cycle de vie de la requête, et l'extension C peut fonctionner dans une plage plus large.
Cours recommandés : Tutoriel PHP.
Étape 1
Téléchargez le code source de PHP, tel que php-5.4.16. Après décompression, entrez dans le répertoire php-5.4.16ext. Entrez ./ext_skel –extname=myext, myext est le nom de l'extension et le répertoire myext sera généré après l'exécution.
ext_skel est un outil officiellement fourni par PHP pour générer du code squelette d'extension PHP.
cd monext. Vous pouvez voir plusieurs fichiers tels que php_myext.h, myext.c, config.m4, etc. config.m4 est le fichier de configuration de l'outil AutoConf, utilisé pour modifier diverses options de compilation.
Étape 2
Modifiez config.m4, remplacez
dnl PHP_ARG_WITH(myext, for myext support, dnl Make sure that the comment is aligned: dnl [ --with-myext Include myext support])
par
PHP_ARG_WITH(myext, for myext support, [ --with-myext Include myext support])
et il y a un –enable- en dessous myext signifie compilé dans le noyau php. with est chargé en tant que bibliothèque de liens dynamiques.
Étape 3
Modifiez php_myext.h et voyez PHP_FUNCTION(confirm_myext_compiled); Ceci est la partie de déclaration de la fonction d'extension. Vous pouvez ajouter une ligne de PHP_FUNCTION(myext_helloworld); pour indiquer la déclaration. Une fonction d'extension de myext_helloworld est créée.
Modifiez ensuite myext.c, qui est la partie implémentation de la fonction d'extension.
const zend_function_entry myext_functions[] = { PHP_FE(confirm_myext_compiled, NULL) /* For testing, remove later. */ PHP_FE(myext_helloworld, NULL) PHP_FE_END /* Must be the last line in myext_functions[] */ };
Le code ici consiste à enregistrer le pointeur de fonction sur le moteur Zend et à ajouter une ligne de PHP_FE(myext_helloworld, NULL) (n'incluez pas de point-virgule après).
Étape 4
Ajoutez le code d'exécution de myext_helloworld à la fin de myext.c.
PHP_FUNCTION(myext_helloworld) { char *arg = NULL; int arg_len, len; char *strg; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) { return; } php_printf("Hello World!\n"); RETRUN_TRUE; }
zend_parse_parameters est utilisé pour accepter les paramètres transmis par PHP, et la macro RETURN_XXX est utilisée pour renvoyer des données à PHP.
Étape 5
Exécutez phpize, ./configure, make, make install en séquence dans le répertoire myext. Modifiez ensuite php.ini et ajoutez extension=myext.so
Exécutez php -r "myext_helloworld('test');" et affichez hello world !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!