Heim >Backend-Entwicklung >PHP7 >So entwickeln Sie PHP7-Erweiterungen mit VS2015 (vs14)
In diesem Artikel erfahren Sie, wie Sie PHP7-Erweiterungen mit VS2015 (vs14) entwickeln. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Vorbereitende Arbeiten vor der Entwicklung:
VS (ich verwende 2013)
Cygwin (Download-Adresse: http://www.cygwin.com/)
IIS7.5 ausgestattet mit PHP-Betriebsumgebung (zum Testen verwendet). )
php-kompiliertes Programm und Quellcode vor der Kompilierung, ich verwende die neueste Version 7.0.5 (Download-Adresse: http://windows.php.net/download#php-7.0)
kompilierter Programmpfad: E: vs_c+ +testphpextphp-7.0.5-src
Quellcodepfad vor der Kompilierung: E:vs_c++testphpextphp-7.0.5-nts-Win32-VC14-x86
Schritte:
1. Installation Cygwin
Installieren aus dem Netzwerk
Laufwerk C ist standardmäßig installiert
Laden Sie den Cache nach Belieben herunter. Denken Sie daran, ihn nach der Installation zu löschen. Ich lege ihn auf den Desktop
In China Wählen Sie einfach http://mirrors.163.com und fahren Sie bis zum Ende mit dem nächsten Schritt fort.
2. Finden Sie das PHP-Quellcodeverzeichnis, das mir gehört (E:vs_c++testphpextphp-7.0.5-src, dies wird unten zur Darstellung des Quellcodeverzeichnisses verwendet) und öffnen Sie E:vs_c++testphpextphp-7.0.5 -srcextext_skel_win32.php
Ändern Sie dies in Ihr Cygwin-Installationsverzeichnis. Meins ist das Laufwerk C, es besteht also keine Notwendigkeit, es zu ändern.
3. Führen Sie cmd aus, geben Sie E ein: vs_c++testphpextphp-7.0.5-srcext, führen Sie php.exe ext_skel_win32.php --extname=test aus, wobei test Ihre PHP-Erweiterung darstellt.
Öffnen Sie E: vs_c++testphpextphp-7.0.5-srcext und Sie sehen einen Testordner. Dies ist Ihre Erweiterung.
4. Öffnen Sie VS und wählen Sie „Datei“ – „Neu“ – „Verzeichnis aus vorhandenem Code erstellen“
Wählen Sie C++
Wählen Sie hier den Pfad Ihres PHP-Erweiterungsordners aus und geben Sie ihn dem Projekt. Benennen Sie ihn
und wählen Sie „Visual Studio verwenden“ und wählen Sie „Dynamic Link Library (DLL)-Projekt“ als Projekttyp. Der nächste Schritt ist der Standard bis zur Fertigstellung.
5. Beim ersten Öffnen werden viele Fehler auftreten. Als nächstes beginnen wir mit der Konfiguration.
Ändern Sie zunächst die Konfiguration der Projektlösung in „Release“
Klicken Sie mit der rechten Maustaste auf die Projekteigenschaften, C/C++, Allgemein, zusätzliche Include-Verzeichnisse, bearbeiten Sie
und fügen Sie die folgenden PHP-Quellcodeverzeichnisse hinzu ( das eigentliche Verzeichnis beginnt mit Das eigene Verzeichnis des Entwicklers hat Vorrang): 7.0.5- srcTSRM
E:vs_c++testphpextphp-7.0.5-srcZend
Rechtsklick auf Projekteigenschaften, C/C++, Präprozessor, Präprozessordefinition, Bearbeiten, Hinzufügen der folgenden Variablen:
ZEND_DEBUG=0
PHP_EXTENSION
PHP_WIN32
ZEND_WIN32
HAVE_TEST
=1 (Der rote Teil hier muss in Ihren Erweiterungsnamen geändert werden. Wenn Sie ihn nicht in Ihren Erweiterungsnamen ändern, wird PHP ihn nicht erkennen it)
COMPILE_DL_TEST
(Der rote Teil hier muss in Ihren Erweiterungsnamen geändert werden. Wenn Sie ihn nicht in Ihren Erweiterungsnamen ändern, wird PHP ihn nicht erkennen)
ZTS (Das Hinzufügen dieser Variablen aktiviert die Thread-Sicherheit. Wenn Sie sie nicht hinzufügen, wird die Thread-Sicherheit deaktiviert. Sie können beurteilen, ob diese Variable hinzugefügt werden soll, je nachdem, ob das von Ihnen kompilierte PHP thread-sicher ist. PS: Ich habe hier einen Verlust erlitten, weil ich es getan habe antwortet nicht darauf, was dazu führte, dass PHP fehlschlug.
Generieren Sie die Lösung. Die Fehlermeldung zeigt an, dass „config.w32.h“ nicht gefunden werden kann das Quellcode-Dateiverzeichnis, in E: vs_c++testphpextphp-7.0 Suchen Sie „config.w32.h.in“ im Ordner .5-srcwin32build, kopieren Sie diese Datei nach E:vs_c++testphpextphp-7.0.5-srcmain Ordner, entfernen Sie das „.in“ am Ende
und generieren Sie es erneut Lösung, Fehlermeldung LNK1120 anzeigen
Fehler 7 Fehler LNK1120: 5 ungelöste externe Befehle E: vs_c++testphpextphp-7.0.5-srcexttestReleasephptest.dll 1 1 phptest
Rechtsklick auf Projekteigenschaften, Connector, Eingabe, Abhängigkeiten anhängen, bearbeiten, den Pfad zu php5.lib eingeben (diese Datei befindet sich im PHP-kompilierten Programmordner, im Dev-Ordner des Stammverzeichnisses)
Hinweis: In Damit die Erweiterung mit der PHP-Laufumgebung übereinstimmt, muss sie auf basieren. Fügen Sie für die kompilierte Version Ihrer PHP-Laufumgebung (php7.0.5 wird von VC14 kompiliert) Folgendes hinzu:
#define PHP_COMPILER_ID "VC14"
zur Datei config.w32.h im E: vs_c++testphpextphp-7.0.5-srcmain-Ordner. Öffnen Sie E: vs_c++testphpextphp-7.0.5-srcexttesttest.c des Codes noch einmal:
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); }Ändern Sie secure_test_compiled in test_echo
Generieren Sie die Lösung, suchen Sie Ihre eigene PHP-Erweiterung phptest.dll im Release-Ordner des Projektstammverzeichnisses, kopieren Sie sie in den ext-Ordner von PHP und konfigurieren Sie sie in php.ini:
extension=phptest.dll
Starten Sie IIS neu, erstellen Sie eine neue Site, erstellen Sie darin eine neue test.php-Datei
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[] */ };Führen Sie es aus und erhalten Sie das Ergebnis:
Diese test_echo-Funktion ist unsere Sie können auch Ihre eigene Erweiterung entsprechend Ihren Anforderungen entwickeln, um die PHP-Leistung zu verbessern.
Empfohlenes Lernen:
php-Video-TutorialDas obige ist der detaillierte Inhalt vonSo entwickeln Sie PHP7-Erweiterungen mit VS2015 (vs14). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!