Maison  >  Article  >  développement back-end  >  Développement d'extension PHP : écriture de la première extension hello world

Développement d'extension PHP : écriture de la première extension hello world

不言
不言original
2018-04-13 16:16:243284parcourir

Le contenu de cet article est de partager avec vous l'écriture de la première extension hello world dans le développement d'extensions PHP. Elle a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer

L'extension PHP est destinée aux avancés. Programmeurs PHP Une des compétences qu'il faut comprendre Pour un développeur d'extensions PHP débutant, comment peut-il développer une extension mature et entrer dans le domaine avancé du développement PHP ? Cette série de didacticiels de développement vous guidera étape par étape, de l'entrée aux étapes avancées.
Cette série de tutoriels est développée sous Linux (centos est recommandé), la version PHP est 5.6, et il est supposé que vous avez une certaine expérience de Linux, du fonctionnement git et de la fondation c/c++.
Si vous avez des questions et avez besoin de communiquer, veuillez rejoindre le groupe d'échange technique QQ 32550793 pour communiquer avec moi.

Nous utilisons le framework PHP-CPP facile à utiliser pour développer des extensions PHP. Si vous avez une certaine expérience d'exploitation Linux et des bases C++, suivez les étapes ci-dessous, je pense que vous pouvez créer les vôtres en moins de 10. minutes Le premier se développe.
Les opérations de démonstration suivantes sont toutes effectuées sur le système Linux CentOS et la série php5.6 a été installée à l'avance.

1. Téléchargez et installez PHP-CPP

Si vous souhaitez utiliser PHP-CPP pour compiler votre propre extension php, vous devez d'abord télécharger le code source de PHP-CPP et compiler et installez-le.
PHP-CPP dispose de deux codes sources de framework, appelés PHP-CPP (nouvelle version) et PHP-CPP-LEGACY.
PHP-CPP (nouvelle version) convient au développement d'extensions PHP-7, et PHP-CPP-LEGACY convient au développement de 5. Des extensions pour chaque version de PHP sont disponibles.
Nos opérations ci-dessous prennent PHP-CPP-LEGACY comme exemple.

Si vous connaissez la commande git, vous pouvez taper la commande git suivante directement sur la ligne de commande du terminal.

# git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP-LEGACY.git

Peu importe si vous ne connaissez pas git. Vous pouvez directement ouvrir l'URL de l'entrepôt github du code source avec un navigateur, télécharger le package compressé du code source et le décompresser. L'URL est
https://github.com/CopernicaM….

Une fois le téléchargement terminé, entrez dans le répertoire du code source de PHP-CPP-LEGACY et tapez la commande make pour compiler le code source. Une fois la compilation terminée, les bibliothèques de classes pertinentes requises pour les extensions de développement seront. généré.

# make

Exécutez ensuite la commande make install pour installer la bibliothèque de classes générée et les fichiers d'en-tête de développement associés dans le système Linux. Vous pouvez compiler l'extension ultérieurement sans configurer les fichiers d'en-tête et les répertoires de bibliothèque de classes automatiquement connectés.

# sudo make install

2. Téléchargez la première extension helloworld

Le code source de la première extension helloworld a été préparé sur github Vous pouvez le cloner directement avec la commande git ou le télécharger manuellement.

# git clone https://github.com/elvisszhang/phpcpp_helloworld.git

Entrez dans le répertoire du code source helloworld, ouvrez main.cpp, vous pouvez voir la structure de code suivante, qui ont toutes été ajoutées avec des commentaires chinois.
La plus importante est la fonction get_module, qui est la fonction d'entrée de l'extension.

#include <phpcpp.h>
#include <iostream>

//这是PHP里面可以调用的接口函数
void say_hello()
{
    //输出一段欢迎
    Php::out << "hello world from my first extension" << std::endl;
}

/**
 *  告诉编译器get_module是个纯C函数
 */
extern "C" {
    
    /**
     *  本函数在PHP进程一打开就会被访问,并返回一个描述扩展信息的PHP结构指针
     */
    PHPCPP_EXPORT void *get_module() 
    {
        // 必须是static类型,因为扩展对象需要在PHP进程内常驻内存
        static Php::Extension extension("helloworld", "1.0.0");
        
        //这里可以添加你要暴露给PHP调用的函数
        extension.add<say_hello>("say_hello");
        
        // 返回扩展对象指针
        return extension;
    }
}

test.php est un morceau de code php utilisé pour les tests étendus.

<?php
say_hello();

3. Compilez la première extension helloworld

La compilation de cette extension est très simple, entrez simplement la commande make sur la ligne de commande du terminal.

# make
g++ -Wall -c -O2 -std=c++11 -fpic -o main.o main.cpp
g++ -shared -o helloworld.so main.o -lphpcpp

Comme prévu, vous verrez le fichier d'extension helloworld.so dans le répertoire source. Vous constaterez que ce fichier est très petit, seulement 14 Ko.
Mais maintenant, si vous tapez la commande php -m, vous constaterez que l'extension helloworld n'est pas incluse dans le module PHP, car nous ne l'avons pas installée dans l'environnement d'exploitation PHP.

4. Installez la première extension helloworld

Ici, nous présenterons temporairement la méthode d'installation manuelle de l'extension.

  • Étape 1 : Utilisez d'abord la commande php-config pour déterminer l'emplacement où l'extension est stockée

# php-config --extension-dir
/usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226

Celui indiqué ci-dessus est sur mon serveur L'emplacement d'installation de l'extension peut varier en fonction de la configuration de votre serveur.

  • Étape 2 : Copiez ensuite helloworld.so dans le répertoire de stockage de l'extension.

# cp helloworld.so /usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226/
  • Étape 3 : Modifiez le fichier php.ini et activez l'extension helloworld

Ouvrez php. ini, ajoutez les éléments de configuration suivants et ajoutez une nouvelle ligne n'importe où dans php.ini.

extension = helloworld.so
  • Étape 4 : Confirmez que l'extension helloworld a été installée avec succès

Utilisez la commande php -m pour afficher tous les php actuellement Extension installée.

# php -m | grep helloworld
helloworld

À en juger par la réponse de la ligne de commande ci-dessus, l'extension helloworld a été installée avec succès.

  • Étape 5 : Exécutez test.php pour confirmer que la fonction enregistrée peut être utilisée

Toujours dans le répertoire de code source étendu, exécutez le commande suivante

# php test.php
hello world from my first extension

À en juger par la réponse de la ligne de commande ci-dessus, la fonction say_hello que nous avons enregistrée avec PHP via l'extension a été exécutée avec succès. Cela ne semble-t-il pas très simple, mais l'extension actuelle ne peut que le faire. tu dis bonjour et tu ne peux rien faire de sérieux ? Quant aux Huit Classiques, nous l'améliorerons plus tard pour qu'il puisse faire plus de choses.

Références

Installation de PHP-CPP et bonjour tout le monde
Tutoriel du site officiel de PHP-CPP

Recommandations associées :

Développement d'extensions PHP Comparaison et introduction des technologies de développement associées

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