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

Qu'est-ce que le développement de modules php ? Introduction au développement simple de modules php

伊谢尔伦
伊谢尔伦original
2017-06-22 13:30:214693parcourir

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

1. Générer les bases du module

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.php

7 $ vi ext/sayhello/sayhello.c

8. 🎜>Répétez les étapes 3 à 6 jusqu'à ce que vous soyez satisfait de ext/sayhello/config.m4 et

l'étape 6 confirme que votre

module

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

Après l'avoir ajouté, nous ajouterons l'implémentation spécifique de PHP_FUNCTION (say_hello) dans say_hello.c :


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

caractère "dnl" avant le contenu suivant :

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ébogage

( en cours d'utilisation, la bibliothèque dynamique n'est pas chargée avec la fonction dl() de PHP, qui pourra être utilisée ultérieurement.

Entrez (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/ 路径下了。

5、配置模块,使其被加载

打开你的php.ini文件开始修改吧:

扩展路径设置:

修改extension_dir = “/php安装路径/lib/php/extensions/no-debug-non-zts-20060613″ //看看上述的模块安装路径就知道了

增加模块设置:

[sayhello]
extension=sayhello.so

ok 大功告成,重新启动你的php模块把。

6、测试模块

写以下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!

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