Maison >développement back-end >tutoriel php >Qu'est-ce que le développement de modules php ? Introduction au développement simple de modules php
Dans certains scénarios nécessaires, nous devons développer nos propres fonctions PHP locales pour répondre à certains besoins spécifiques, et les nouvelles fonctions doivent exister dans le module PHP. Ce qui suit présente le développement de module PHP le plus simple : créez votre propre fonction say_hello($arg) pour afficher hello world : $arg.
Le développement du module PHP présenté dans ce document n'a pour but que de créer hello world. Je ne vais pas trop expliquer pourquoi cela est fait pour le moment, je présenterai l'anatomie suivante plus en détail.
Le module hello world-level peut être complété en quelques étapes simples :
Générer l'infrastructure du module
Modifier le code du module et ajouter la fonction say_hello
Modifier le fichier de configuration compilé
Générer la bibliothèque partagée du module
Configurer le module pour rendre le module efficace
Module de test
Entrez le répertoire ext sous le répertoire du code source php.
Exécutez ./ext_skel ––extname=sayhello (il y a un problème avec l'encodage « – » ici, veuillez ne pas le copier directement)
Sortie :
[root@myhost ext]# ./ext_skel –– extname=sayhello
Création du répertoire sayhello
Création des fichiers de base : config.m4 config.w32 .cvsignore sayhello.c php_sayhello.h CRÉDITS EXPERIMENTAL tests/001.phpt sayhello. php [terminé].
Pour utiliser votre nouvelle extension, vous devrez exécuter les étapes suivantes :
1 $ cd ..
2. sayhello/config.m4
3. $ ./buildconf
4 $ ./configure ––[with|enable]-sayhello
5. >
6 . $ ./php -f ext/sayhello/sayhello.php7 $ vi ext/sayhello/sayhello.c8. 🎜>Répétez les étapes 3 à 6 jusqu'à ce que vous soyez satisfait de ext/sayhello/config.m4 etl'étape 6 confirme que votremodule
est compilé en PHP. Ensuite, commencez à écrire. codez et répétez les deux dernières étapes aussi souvent que nécessaire.
Voyant que la sortie affichée indique que l'infrastructure du module a été générée, jetons un coup d'œil aux fichiers que contient le module généré :-rw-r–r – 1 root root 9 avril 2103 05:05 config.m4 //Compiler le fichier de configuration- rw-r–r– 1 root root 2103 9 avril 05:05 configuration .w32 🎜>
-rw-r–r– 1 racine racine 8 avril 05 :05 CRÉDITS //Informations sur l'auteur
-rw-r–r– 1 racine racine 0 9 avril 05:05 EXPÉRIMENTAL /Identification des informations sur la version bêta
-rw-r–r– 1 racine racine 2755 9 avril 05:05 php_sayhello.h //Fichier d'en-tête de définition du module
-rw-r–r– 1 root root 5294 9 avril 05:05 sayhello.c //Fichier d'implémentation du module
-rw-r–r– 1 root root 508 9 avril 05:05 sayhello.php //php utilisé pour tester le chargement du module Fichier
drwxr-xr-x 2 root root 4096 9 avril 05:05 tests //Répertoire des fichiers de test
À ce moment-là, le squelette du module est sorti, nous pouvons ensuite déplacer le target La fonction say_hello() a été ajoutée.
2. Implémentez la fonction say_hello()
Ouvrez le fichier php_sayhello.h du module et ajoutez la définition de la fonction c préparée pour php say_hello() :
PHP_FUNCTION(say_hello); //php Le code source définit de nombreuses macros pour l'ouverture du module, ce qui est assez pratique quand on s'y habitue
Maintenant, le code d'implémentation a également été écrit. Nous devons également enregistrer cette fonction dans la fonction locale PHP. Nous devons modifier sayhello_functions dans sayhello.c :
PHP_FUNCTION(say_hello){ char *arg = NULL; int arg_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) ==FAILURE) { //获取php代码的输入参数,方式与scanf差不多 return; } zend_printf("hello world : %s",arg); RETURN_STRINGL(arg, arg_len, 1); }3. Modifier le. fichier de configuration de compilation et ouvrez-le config.m4, supprimez le
zend_function_entry sayhello_functions[] = { PHP_FE(confirm_sayhello_compiled, NULL) /* For testing, remove later. */ PHP_FE(say_hello, NULL) //好,现在say_hello函数也注册了 {NULL, NULL, NULL} /* Must be the last line in sayhello_functions[] */ };commentaire
dnl PHP_ARG_ENABLE(sayhello, s'il faut activer le support sayhello ,dnl Assurez-vous que le commentaire est aligné :
dnl [ --enable-sayhello Activer le support sayhello])
dnl PHP_SUBST(SAYHELLO_SHARED_LIBADD)
4. Compiler des modules et générer des bibliothèques partagées
Ce que j'utilise ici est la méthode de génération de modules de bibliothèque dynamique, qui est beaucoup plus rapide que la compilation statique en PHP et est pratique pour le
débogageEntrez (cd) le dossier du module sayhello, exécutez phpInstallez phpize sous le chemin bin :
[root@myhost sayhello]# /opt/php_server/php/ bin/ phpizeConfiguration pour :
Version de l'API PHP : 20041225
Numéro d'API du module Zend : 20060613
Numéro d'API de l'extension Zend : 220060519
此时为模块编译的configure文件已经生成。继续生成Makefile文件:
[root@myhost sayhello]# ./configure –with-php-config=/opt/php_server/php/bin/php-config
……没问题的话是没有错误的
现在可以编译了:
make
代码没有问题的话不会有错的。
编译完,进行模块安装:
[root@myhost sayhello]# make install
Installing shared extensions: /opt/php_server/php/lib/php/extensions/no-debug-non-zts-20060613/
显示模块已经安装至/php安装路径/extensions/no-debug-non-zts-20060613/ 路径下了。
打开你的php.ini文件开始修改吧:
扩展路径设置:
修改extension_dir = “/php安装路径/lib/php/extensions/no-debug-non-zts-20060613″ //看看上述的模块安装路径就知道了
增加模块设置:
[sayhello]
extension=sayhello.so
ok 大功告成,重新启动你的php模块把。
写以下php测试代码执行:
<?php $a = say_hello("frank"); echo "<br>"; echo $a; ?>;
打开这个网页后显示:
hello world : frank
frank
成功运行,模块测试通过。
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!