Maison  >  Article  >  développement back-end  >  Comment développer des extensions PHP7 avec VS2015 (vs14)

Comment développer des extensions PHP7 avec VS2015 (vs14)

醉折花枝作酒筹
醉折花枝作酒筹avant
2021-06-22 09:18:141868parcourir

Cet article vous présentera comment utiliser VS2015 (vs14) pour développer des extensions PHP7. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Comment développer des extensions PHP7 avec VS2015 (vs14)

Travail de préparation avant développement :

VS (j'utilise 2013)

Cygwin (adresse de téléchargement : http://www.cygwin .com/)

IIS7.5 équipé d'un environnement d'exécution PHP (utilisé pour les tests)

Programme compilé php et code source précompilé, j'utilise la dernière version 7.0 (Télécharger. adresse : http://windows.php.net/download#php-7.0)

Chemin du programme compilé : E: vs_c++testphpextphp-7.0.5-src

Chemin du code source avant compilation : E: vs_c++testphpextphp-7.0.5-nts-Win32-VC14-x86

Étapes :

1. Installer Cygwin

Comment développer des extensions PHP7 avec VS2015 (vs14)

Installer depuis le réseau

Comment développer des extensions PHP7 avec VS2015 (vs14)

Le lecteur C est installé par défaut

Comment développer des extensions PHP7 avec VS2015 (vs14)

Téléchargez le cache comme vous le souhaitez, installez-le comme vous le souhaitez N'oubliez pas de le supprimer lorsque vous avez terminé. Je le mets sur le bureau

Comment développer des extensions PHP7 avec VS2015 (vs14)

Comment développer des extensions PHP7 avec VS2015 (vs14)

En Chine, choisissez simplement http : //mirrors.163.com. Passez à l'étape suivante jusqu'à la fin.

2. Recherchez le répertoire du code source php. Le mien est (E:vs_c++testphpextphp-7.0.5-src, il sera utilisé pour représenter le répertoire du code source ci-dessous), ouvrez E:vs_c++. testphpextphp-7.0.5-srcextext_skel_win32 .php

Comment développer des extensions PHP7 avec VS2015 (vs14)

Changez ceci dans votre répertoire d'installation cygwin. Le mien est le lecteur C, il n'est donc pas nécessaire de le modifier.

3. Exécutez cmd, entrez E: vs_c++testphpextphp-7.0.5-srcext, exécutez php.exe ext_skel_win32.php --extname=test, où test représente votre extension php.

Comment développer des extensions PHP7 avec VS2015 (vs14)

Ouvrez E:vs_c++testphpextphp-7.0.5-srcext et vous verrez un dossier de test Ceci est votre extension.

4. Ouvrez VS et sélectionnez "Fichier" - "Nouveau" - "Créer un répertoire à partir du code existant"

Comment développer des extensions PHP7 avec VS2015 (vs14)

Sélectionnez C++

Comment développer des extensions PHP7 avec VS2015 (vs14)

Sélectionnez ici le chemin de votre dossier d'extension php et nommez le projet

Comment développer des extensions PHP7 avec VS2015 (vs14)

Sélectionnez "Utiliser Visual Studio" et sélectionnez le type de projet "Bibliothèque de liens dynamiques (DLL) Project" passera par défaut à l'étape suivante jusqu'à ce qu'il soit terminé.

Comment développer des extensions PHP7 avec VS2015 (vs14)

5. Il y aura de nombreuses erreurs lorsque vous l'ouvrirez pour la première fois.

Comment développer des extensions PHP7 avec VS2015 (vs14)

Changez d'abord la configuration de la solution du projet en Release

Comment développer des extensions PHP7 avec VS2015 (vs14)

Cliquez avec le bouton droit sur les propriétés du projet, C/C++, Général , Répertoires d'inclusion supplémentaires, modifiez

Comment développer des extensions PHP7 avec VS2015 (vs14)

et ajoutez les répertoires sources PHP suivants (les répertoires réels sont soumis aux propres répertoires du développeur) :

E: vs_c++ testphpextphp-7.0.5-src

E:vs_c++testphpextphp-7.0.5-srcmain

E:vs_c++testphpextphp-7.0.5-srcTSRM

E :vs_c++testphpextphp-7.0.5-srcZend

Cliquez droit sur les propriétés du projet, C/C++, préprocesseur, définition du préprocesseur, modifiez, ajoutez les variables suivantes :

ZEND_DEBUG=0

PHP_EXTENSION

PHP_WIN32

ZEND_WIN32

HAVE_TEST=1 (la partie rouge ici doit être remplacée par le nom de votre extension, pas le vôtre) extension, php ne le reconnaîtra pas)

COMPILE_DL_TEST (La partie rouge ici doit être remplacée par le nom de votre extension, sinon php ne la reconnaîtra pas)

ZTS (l'ajout de cette variable active la sécurité des threads, ne pas l'ajouter signifie désactiver la sécurité des threads. Vous pouvez juger s'il faut ajouter cette variable selon que le php que vous avez compilé est thread-safe. ps : j'ai subi une perte à cause de non répondant. PHP ne reconnaît pas l'extension)

Comment développer des extensions PHP7 avec VS2015 (vs14)

Générez la solution Le message d'erreur indique que "config.w32.h" est introuvable. .h" dans le répertoire du fichier de code source. h", recherchez "config.w32.h.in" dans le dossier E:vs_c++testphpextphp-7.0.5-srcwin32build et copiez ce fichier dans le dossier E:vs_c++ testphpextphp-7.0.5-srcmain, supprimez le ".in" suivant

et générez à nouveau la solution, affichant le message d'erreur LNK1120

erreur 7 erreur LNK1120 : 5 commandes externes non résolues E : vs_c++testphpextphp-7.0.5-srcexttestReleasephptest.dll 1 1 phptest

cliquez avec le bouton droit sur les propriétés du projet, le connecteur, l'entrée, les dépendances supplémentaires, modifiez, mettez le chemin vers php5.lib (ce fichier est dans le programme dossier après la compilation de php, dans le dossier dev du répertoire racine)

Remarque : Pour que l'extension corresponde à l'environnement d'exécution PHP, elle doit être basée sur la version compilée de votre environnement d'exécution PHP (php7 .0.5 est compilé par VC14), dans E: vs_c Ajoutez :

#define PHP_COMPILER_ID "VC14"

au fichier config.w32.h dans le dossier ++testphpextphp-7.0.5-srcmain Ouvrez E:vs_c++testphpextphp-. 7.0.5-srcexttestest.c

Trouvez ce morceau de code :

PHP_FUNCTION(confirm_test_compiled)
{
    char *arg = NULL;
    int arg_len, len;
    char *strg;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
        return;
    }

    len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "test", arg);
    RETURN_STRINGL(strg, len, 0);
}

Remplacez confirm_test_compiled par test_echo

Trouvez à nouveau ce morceau de code :

const zend_function_entry test_functions[] = {
    PHP_FE(confirm_test_compiled,    NULL)        /* For testing, remove later. */
    PHP_FE_END    /* Must be the last line in test_functions[] */
};

Remplacez confirm_test_compiled à l'intérieur par test_echo

Générez la solution, trouvez votre propre extension php phptest.dll dans le dossier Release du répertoire racine du projet, copiez-la dans le dossier ext de php et configurez dans php.ini :

extension=phptest.dll

Redémarrez IIS, créez un nouveau site et créez-y un nouveau fichier test.php

<?php 
echo test_echo("123");

Exécutez et obtenez le résultat :

Comment développer des extensions PHP7 avec VS2015 (vs14)

Cette fonction test_echo est notre propre fonction personnalisée. Vous pouvez également développer votre propre extension en fonction de vos besoins pour améliorer les performances de PHP.

Apprentissage recommandé : Tutoriel vidéo php

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer