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

黄舟
Libérer: 2023-03-15 07:10:01
original
2052 Les gens l'ont consulté


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
Copier après la connexion

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
Copier après la connexion

vous trouverez le fichiers suivants :

config.m4  config.w32  CREDITS  EXPERIMENTAL  helloworld.c  helloworld.php  php_helloworld.h  tests
Copier après la connexion

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])
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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

php -d enable_dl=On myfile.php
Copier après la connexion

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.
Copier après la connexion

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’未声明(在此函数内第一次使用)
Copier après la connexion

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[] */};
Copier après la connexion

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;
}
Copier après la connexion

Parcourez à nouveau la compilation :

./configure --enable-helloworld && make && make install
Copier après la connexion

Testez si c'est vraiment réussi :

php -d enable_dl=On -r "dl('helloworld.so');helloworld();"//输出Hello World!
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal