Heim >Backend-Entwicklung >PHP-Tutorial >Generierung und Kompilierung von PHP-Erweiterungen

Generierung und Kompilierung von PHP-Erweiterungen

高洛峰
高洛峰Original
2016-11-17 14:20:111505Durchsuche

Lassen Sie mich zunächst erklären, dass es zwei Kompilierungsmethoden für PHP-Erweiterungen gibt:
Methode 1: Kompilieren Sie die Erweiterung direkt beim Kompilieren von PHP
Methode 2: Die Erweiterung wird in eine .so-Datei kompiliert und konfiguriert in php.ini Ladepfad;

Die Schritte zum Erstellen und Kompilieren einer PHP-Erweiterung werden unten erklärt:
Laden Sie den PHP-Quellcode herunter, entpacken Sie ihn und starten Sie den Vorgang im Stammverzeichnis des Quellcodes ,
1. Verwenden Sie ext_skel, um das Erweiterungsframework wie folgt zu generieren:

➜ php-5.6.24 cd ~/Downloads/tmp/php-5.6.24➜ php-5.6.24 cd ext
➜ ext ./ext_skel --extname=myfirstext

Nachdem ext_skel ausgeführt wurde, wird der Entwickler zu weiteren Schritten aufgefordert. Dieser Schritt ist der erste der beiden erweiterten Schritte Kompilierungsmethoden wie folgt:

To use your new extension, you will have to execute the following steps:

 $ cd ..
 $ vi ext/plogger/config.m4
 $ ./buildconf
 $ ./configure --[with|enable]-plogger
 $ make
 $ ./sapi/cli/php -f ext/plogger/plogger.php
 $ vi ext/plogger/plogger.c
 $ make

2. Ändern Sie die Datei ext/myfirstext/config.m4
Konzentrieren Sie sich beim Einstellen auf den Code von Zeile 10-18, der zum Aktivieren dieser erweiterten Befehlsoption verwendet wird ./configure und löschen Sie die DNL von Zeile 16 und Zeile 18. Verstehen Sie DNL als Kommentarzeichen.

dnl Otherwise use enable:
16 dnl PHP_ARG_ENABLE(myfirstext, whether to enable myfirstext support,
dnl Make sure that the comment is aligned:
dnl [ --enable-myfirstext Enable myfirstext support])
20 if test "$PHP_MYFIRSTEXT" != "no"; then
dnl Write more examples of tests here...

Die beiden oben genannten Schritte werden im Folgenden vorgestellt.
Methode 1: Kompilieren Sie die Erweiterung direkt beim Kompilieren von PHP Code-Stammverzeichnis Führen Sie ./buildconf wie folgt im Verzeichnis aus
4. Führen Sie ./configure –enable-myfirstext im Quellcode-Stammverzeichnis aus
Um die Kompilierungszeit zu verkürzen, können Sie festlegen, dass bestimmte Module währenddessen nicht kompiliert werden die Konfigurationsphase, wie zum Beispiel:

./configure --without-iconv --enable-debug --enable-myfirstext --disable-cgi --enable-cli --without-pear --disable- xml --without-mysql


5. Führen Sie make

im Quellcode-Stammverzeichnis aus. Führen Sie nach erfolgreicher Kompilierung nicht make install aus, da zu diesem Zeitpunkt die Erweiterung vorhanden ist myfirstext wurde erfolgreich kompiliert und die entsprechende PHP-Binärdatei wurde generiert. Sie befindet sich in ./sapi/cli/php

Methode 2: Die Erweiterung wird in eine .so-Datei kompiliert und der Ladepfad wird konfiguriert in php.ini

3. Führen Sie den phpize-Befehl im Erweiterungsverzeichnis ext/myfirstext/ aus.
4. Führen Sie den Befehl ./configure –enable-myfirstext/aus make im Erweiterungsverzeichnis ext/myfirstext/
Nach der Ausführung von make wird es unter ext/myfirstext/modules generiert. Konfigurieren Sie die entsprechende .so-Datei in php.ini und laden Sie diese Datei.

Überprüfen Sie, ob die Erweiterung erfolgreich geladen wurde

Führen Sie ./sapi/cli/php -f ext/myfirstext/myfirstext.php aus

Oder listen Sie alle Erweiterungen über php -m auf, um zu sehen, ob es myfirstext gibt . Führen Sie den Befehl aus: ./sapi/cli/php -m |. Wenn die obige Überprüfung bestanden wurde, bedeutet dies, dass die Erweiterung erfolgreich kompiliert wurde. Aber bisher habe ich den C-bezogenen Code nicht bearbeitet. Alles wird standardmäßig von ext_skel generiert. Überprüfen Sie, welche Funktionen diese Erweiterung myfirstext enthält. Wie folgt:

➜ php-5.6.24 ./sapi/cli/php -r 'print_r(get_extension_funcs("myfirstext"));'

OK, soweit bekannt Generierung, Konfiguration und Kompilierung des PHP-Erweiterungsframeworks. Als nächstes müssen wir der Erweiterung myfirstext eine eigene Funktion hinzufügen.

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