Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie c/c, um PHP-Erweiterungen unter Windows zu entwickeln

Verwenden Sie c/c, um PHP-Erweiterungen unter Windows zu entwickeln

WBOY
WBOYOriginal
2016-08-08 09:29:041210Durchsuche

1: Erforderliche Tools:

cygwin, eine Unix-ähnliche Simulationsumgebung, die auf der Windows-Plattform läuft
PHP-Quellcode (komprimiertes Paket)
PHP-Binärdatei, bei der es sich um PHP handelt, das unter Windows
installiert ist vs2008 oder höher (vs2010, vs2013)
win32build.rar und bindlib_win32.rar (hauptsächlich zum Generieren von config.win32.h)

Zwei: Konfigurationsprozess

1: Entpacken Sie den PHP-Quellcode. Darin befindet sich ein ext-Verzeichnis. Das Verzeichnis ist für die Entwicklung von PHP-Erweiterungen verantwortlich. Das Verzeichnis enthält alle Standard-Erweiterungsquellcodes sowie zwei Dateien:
ext_skel_win32.php und ext_skel-Dateien
ext_skel ist eine Shell zum Erstellen von Erweiterungen und kann nicht unter Windows ausgeführt werden, daher benötigen Sie Cygwin, um eine Unix-Umgebung zu simulieren

2: Nach der Dekomprimierung müssen wir unser eigenes Erweiterungsverzeichnis im ext-Verzeichnis generieren
Wir geben direkt die Befehlszeile mit win r cmd ein, springen dann mit cd in das ext-Verzeichnis und geben den folgenden Befehl ein:
php ext_skel_win32.php –extname=myext oder
php.exe ext_skel_win32.php –extname=myext

Hier können leicht Fehler auftreten
Zunächst einmal: PHP und PHP.exe beziehen sich auf PHP, das unter Windows installiert ist. In seinem Stammverzeichnis befindet sich PHP.exe, das zum Parsen von PHP-Dateien verwendet wird. Daher müssen wir das installierte PHP-Verzeichnis auf die Umgebungsvariable festlegen.
Zweitens: Wenn Cygwin nicht installiert oder Cygwin nicht eingerichtet ist, tritt der folgende Fehler auf. Daher müssen wir cygwin installieren und dann ext_skel_win32.php im ext-Verzeichnis des PHP-Quellcodes öffnen. Es gibt eine Variable namens $cygwin_path = „c:/cygwin/bin“; ändern Sie sie in das Verzeichnis, das Sie installiert haben Versuchen Sie es noch einmal.

Wenn Sie immer noch eine Fehlermeldung erhalten, schauen Sie sich bitte dieses Bild an, um zu sehen, ob Sie einen Fehler gemacht haben.

Wenn Folgendes passiert, nachdem alles abgeschlossen ist, bedeutet dies, dass das Erweiterungsverzeichnis (Skelett) erfolgreich erstellt wurde

Das darin enthaltene Verzeichnis Es sieht so aus, die beiden Dateien, die wir ändern müssen, sind (wie durch den Pfeil angezeigt)

3: Abhängige php5ts.lib hinzufügen
Kopieren Sie php5ts.lib im Dev-Verzeichnis des PHP-Binärpakets in Ihr Erweiterungsverzeichnis

4: (1) Ändern Sie die Datei php_hello.h
Erweitern Sie die neue Funktion: Fügen Sie eine Zeile PHP_FUNCTION(hello);
nach der Zeile PHP_FUNCTION(confirm_myhello_compiled); (2) Ändern Sie die hello.c-Datei
Fügen Sie eine Zeile zum Array zend_function_entry myhello_functions[] hinzu

<code>1. zend_function_entry myhello_functions[] = {  
2.     PHP_FE(confirm_myhello_compiled,    NULL)        /* For testing, remove later. */  
3.     PHP_FE(hello, NULL) // 新增的行  
4.     {NULL, NULL, NULL}    /* Must be the last line in myhello_functions[] */  
5. };  
</code>

Fügen Sie unsere neue Funktion nach PHP_FUNCTION(confirm_myhello_compiled) hinzu

<code>1. PHP_FUNCTION(hello){  
2.     php_printf(”Hello C extension”);  
3. }  
4. 
</code>

5: Erstellen Sie die DLL-Erweiterungsdatei
Der nächste Schritt besteht darin, die Erweiterungsdatei mit vs2008 zu kompilieren, den Kompilierungsmodus Release_TS auszuwählen und dann die Kompilierung zu starten, oder ext/hello über die Befehlszeile einzugeben und msdev hello.dsp /MAKE „hello – Win32“ auszuführen „Release_TS“ Bei Erfolg wird php_hello.dll in Release_TS generiert, dem Verzeichnis auf derselben Ebene wie ext.
Zu diesem Zeitpunkt sind die Hauptaufgaben grundsätzlich erledigt, allerdings treten hier auch am häufigsten Fehler auf.
Der häufigste Fehler ist, dass die Include-Datei „../main/config.win32.h“ nicht geöffnet werden kann. Daher wird im Hauptordner keine solche Datei angezeigt.
Entpacken Sie daher sowohl win32build.rar als auch bindlib_win32.rar in das Verzeichnis win32/build im PHP-Quellcode und fügen Sie win32/build zur Umgebungsvariablen
hinzu Geben Sie cmd ein, um zum PHP-Quellcodeverzeichnis zu springen, und geben Sie
ein cscript /nologo configure.js –with-php-build="../win32build" –without-libxml –disable-odbc Nach dem Drücken der Eingabetaste wird möglicherweise

angezeigt, was bedeutet, dass dies der Fall ist Keine Suche. cl.exe, daher müssen wir das bin-Verzeichnis im installierten vs2008-Verzeichnis zur Umgebungsvariablen hinzufügen. Wenn Sie es erneut ausführen, wird möglicherweise immer noch ein Fehler gemeldet Kann das Bild nicht finden. . Die allgemeine Bedeutung ist, dass der C-Compiler mindestens vc9.0 (vs2008) ist. Versuchen Sie daher, den Compiler

von vs2008 oder höher zu verwenden, um die Ausführung fortzusetzen:

Diese Datei kann in Microsoft Visual Studio ausgeführt werden. Suchen Sie sie im Verzeichnis 10.0Common7IDE und kopieren Sie sie in das VCbin-Verzeichnis. Führen Sie die Anweisung weiterhin erfolgreich aus. Generieren Sie die Datei config.win32.h im Hauptverzeichnis des D:php-Quellcodes.

Öffnen Sie config.win32.h: Finden Sie darin

Wenn Sie mit vc10 kompilieren, müssen Sie es in

ändern

Endlich das Problem gelöst, kompilieren. . Bei Erfolg DLL generieren,
Aber ich bin immer noch auf Kompilierungsprobleme gestoßen, schwerwiegender Fehler c1902: Der Programmdatenbankmanager stimmt nicht überein. .
Es war wirklich schwierig, das gleiche Problem im CSDN-Forum über Baidu zu finden und es schließlich so zu lösen.
mspdbsrv.exe oder mspdbcore.dll fehlt oder ihre Version unterscheidet sich von der von mspdb80.dll. Stellen Sie sicher, dass die gleiche Version dieser drei Dateien im System installiert ist.
Kopieren Sie diese drei Dateien aus dem Common7IDE-Verzeichnis im VC-Installationsverzeichnis in den VCbin im Installationsverzeichnis
Alle Probleme wurden gelöst und ich habe php_hello.dll erfolgreich kompiliert

6: Schließlich haben wir es in das ext-Verzeichnis unter dem binären PHP-Verzeichnis kopiert, php.ini geöffnet und extension=php_hello.dll hinzugefügt
Starten Sie Apache neu und testen Sie Ihre Funktionen.

PS: Die Funktion, die ich damals getestet habe, war cock()

Ausgabeergebnis:

Dies ist das Ende. . . Es war wirklich verrückt, an dieser Sache zu arbeiten. Glücklicherweise habe ich viele Male geduldig versucht, das Problem zu lösen, und es gelang mir schließlich. Ich habe alle Probleme, auf die ich gestoßen bin, als Referenz veröffentlicht. PHP-Erweiterungen machen ziemlich viel Spaß, wir können unsere eigenen PHP-Funktionen entwickeln. Voraussetzung ist jedoch, dass c/c gut erlernt werden muss. . . Nehmen Sie sich auf jeden Fall Zeit und wünschen Sie allen viel Erfolg~

Das Obige stellt die Entwicklung von PHP-Erweiterungen mit C/C unter Windows vor, einschließlich einiger inhaltlicher Aspekte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP-CachingNächster Artikel:PHP-Caching