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.
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
Installer depuis le réseau
Le lecteur C est installé par défaut
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
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
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.
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"
Sélectionnez C++
Sélectionnez ici le chemin de votre dossier d'extension php et nommez le projet
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é.
5. Il y aura de nombreuses erreurs lorsque vous l'ouvrirez pour la première fois.
Changez d'abord la configuration de la solution du projet en Release
Cliquez avec le bouton droit sur les propriétés du projet, C/C++, Général , Répertoires d'inclusion supplémentaires, modifiez
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)
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 :
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!