Maison  >  Article  >  développement back-end  >  Comment écrire une extension php

Comment écrire une extension php

(*-*)浩
(*-*)浩original
2019-05-13 14:34:184552parcourir

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.

Comment écrire une extension 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn