Maison >développement back-end >tutoriel php >Introduction détaillée à Hello World dans l'extension php

Introduction détaillée à Hello World dans l'extension php

黄舟
黄舟original
2017-08-14 09:26:032046parcourir


Avant-propos

C'est un mémo que je voulais écrire depuis longtemps. Il existe des centaines d'articles sur l'écriture d'extensions PHP, mais beaucoup. d'entre eux sont très vieux. Certains exemples ne fonctionnent pas. C'est un peu gênant.
Cet article est utilisé pour enregistrer vos propres notes sous forme de mémo.

Texte

1. Téléchargez le package d'installation php

Adresse de téléchargement : lien rapide de téléchargement php
Cet article sélectionne le package d'installation php-5.6.7.
Après cela, installez php.

2. Créez un squelette étendu

//跑到ext目录cd php-5.6.7/ext///执行一键生成骨架的操作./ext_skel --extname=helloworld

Si vous voyez l'invite suivante indiquant le résultat de la création
Introduction détaillée à Hello World dans lextension php

cd helloworld
ls

vous trouverez le fichiers suivants :

config.m4  config.w32  CREDITS  EXPERIMENTAL  helloworld.c  helloworld.php  php_helloworld.h  tests

3. Modifiez le fichier de configuration étendu config.m4

Supprimez le dnl avant le code suivant. (dnl est équivalent à // de php)

##动态编译选项,通过.so的方式链接,去掉dnl注释PHP_ARG_WITH(helloworld, for helloworld support,
Make sure that the comment is aligned:
[  --with-helloworld             Include helloworld support])##静态编译选项,通过enable来启用,去掉dnl注释PHP_ARG_ENABLE(helloworld, whether to enable helloworld support,
Make sure that the comment is aligned:
[  --enable-helloworld           Enable helloworld support])

Généralement, vous pouvez choisir l'un des deux (cela dépend de vos préférences personnelles, le commentaire d'activation doit être supprimé dans ce tutoriel).

4. Effectuez un test de compilation

phpize
./configure --enable-helloworldmakemake install

Puis ajoutez une extension au php.ini

vim /usr/local/php/etc/php.ini// 添加扩展extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/"extension = "helloworld.so"// 重启php-fpm/etc/init.d/php-fpm restart

Retournez dans le dossier où l'extension a été écrite et exécutez le commande test

php -d enable_dl=On myfile.php

Voir les mots suivants indique que la victoire n'est pas loin :

confirm_helloworld_compiled

Congratulations! You have successfully modified ext/helloworld/config.m4. Module helloworld is now compiled into PHP.

confirm_helloworld_compiled est une fonction de test générée automatiquement par ext_skel.

ps : Si deux versions de php sont installées localement et que l'extension est écrite en php7, vous risquez de rencontrer les problèmes suivants :

/mydata/src/php-7.0.0/ext/helloworld/helloworld.c: 在函数‘zif_confirm_helloworld_compiled’中:
/mydata/src/php-7.0.0/ext/helloworld/helloworld.c:58: 错误:‘zend_string’未声明(在此函数内第一次使用)
/mydata/src/php-7.0.0/ext/helloworld/helloworld.c:58: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
/mydata/src/php-7.0.0/ext/helloworld/helloworld.c:58: 错误:所在的函数内也只报告一次。)
/mydata/src/php-7.0.0/ext/helloworld/helloworld.c:58: 错误:‘strg’未声明(在此函数内第一次使用)

Cause : L'environnement de compilation n'est pas php7.
Solution : Il n'y a pas de type zend_string dans php5, remplacez-le par char ou modifiez l'environnement de votre version php en php7

5 Créez la fonction helloworld

Modifiez helloworld.c, ajoutez le. Fonction implémentée suivante

##zend_function_entry helloworld_functions 补充要实现的函数const zend_function_entry helloworld_functions[] = { 
    PHP_FE(confirm_helloworld_compiled, NULL)       /* For testing, remove later. */
    PHP_FE(helloworld,  NULL)       /* 这是补充的一行,尾巴没有逗号 */
    PHP_FE_END  /* Must be the last line in helloworld_functions[] */};

Recherchez "PHP_FUNCTION(confirm_helloworld_compiled)", démarrez une autre fonction pour écrire l'entité fonction :

PHP_FUNCTION(helloworld) {    php_printf("Hello World!\n");
    RETURN_TRUE;
}

Parcourez à nouveau la compilation :

./configure --enable-helloworld && make && make install

Testez si c'est vraiment réussi :

php -d enable_dl=On -r "dl('helloworld.so');helloworld();"//输出Hello World!

Succès !

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