Heim > Backend-Entwicklung > PHP-Tutorial > So schreiben Sie eine PHP-Erweiterung

So schreiben Sie eine PHP-Erweiterung

(*-*)浩
Freigeben: 2023-04-06 16:32:02
Original
4593 Leute haben es durchsucht

Warum C-Erweiterung verwenden?

C ist statisch kompiliert und seine Ausführungseffizienz ist viel höher als die von PHP-Code. Die Leistung desselben Operationscodes, der mit C entwickelt wurde, ist hunderte Male höher als die von PHP. Bei E/A-Vorgängen wie CURL hat die C-Erweiterung keinen offensichtlichen Vorteil, da der Zeitaufwand hauptsächlich auf IOWait liegt.

Außerdem wird die C-Erweiterung geladen, wenn der Prozess gestartet wird. Der PHP-Code kann nur die Daten des Anforderungslebenszyklus verarbeiten, und die C-Erweiterung kann in einem größeren Bereich betrieben werden.

Empfohlener Kurs: PHP-Tutorial.

So schreiben Sie eine PHP-Erweiterung

Schritt 1

Laden Sie den Quellcode von PHP herunter, z. B. php-5.4.16. Geben Sie nach der Dekomprimierung das Verzeichnis php-5.4.16ext ein. Geben Sie ./ext_skel –extname=myext ein, myext ist der Name der Erweiterung und das myext-Verzeichnis wird nach der Ausführung generiert.

ext_skel ist ein offiziell von PHP bereitgestelltes Tool zum Generieren von PHP-Erweiterungsskelettcode.

cd myext. Sie können mehrere Dateien wie php_myext.h, myext.c, config.m4 usw. sehen. config.m4 ist die Konfigurationsdatei des AutoConf-Tools, die zum Ändern verschiedener Kompilierungsoptionen verwendet wird.

Schritt 2

Ändern Sie config.m4, ändern Sie

dnl PHP_ARG_WITH(myext, for myext support,
dnl Make sure that the comment is aligned:
dnl [  --with-myext             Include myext support])
Nach dem Login kopieren

in

PHP_ARG_WITH(myext, for myext support,
[  --with-myext             Include myext support])
Nach dem Login kopieren

und darunter befindet sich ein –enable- myext bedeutet in den PHP-Kernel kompiliert. with wird als dynamische Linkbibliothek geladen.

Schritt 3

Ändern Sie php_myext.h und sehen Sie sich PHP_FUNCTION(confirm_myext_compiled) an. Dies ist der Erweiterungsfunktionsdeklarationsteil. Um die Deklaration anzuzeigen, wird eine Erweiterungsfunktion von myext_helloworld erstellt.

Ändern Sie dann myext.c, den Implementierungsteil der Erweiterungsfunktion.

const zend_function_entry myext_functions[] = {
        PHP_FE(confirm_myext_compiled,  NULL)           /* For testing, remove later. */
        PHP_FE(myext_helloworld,  NULL)
        PHP_FE_END      /* Must be the last line in myext_functions[] */
};
Nach dem Login kopieren

Der Code hier besteht darin, den Funktionszeiger bei der Zend-Engine zu registrieren und eine Zeile PHP_FE(myext_helloworld, NULL) hinzuzufügen (danach kein Semikolon einfügen).

Schritt 4

Fügen Sie den Ausführungscode von myext_helloworld am Ende von myext.c hinzu.

PHP_FUNCTION(myext_helloworld)
{
        char *arg = NULL;
	int arg_len, len;
	char *strg;
	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
		return;
	}
	php_printf("Hello World!\n");
	RETRUN_TRUE;
}
Nach dem Login kopieren

zend_parse_parameters wird verwendet, um die von PHP übergebenen Parameter zu akzeptieren, und das Makro RETURN_XXX wird verwendet, um Daten an PHP zurückzugeben.

Schritt 5

Führen Sie phpize, ./configure, make und make install nacheinander im myext-Verzeichnis aus. Ändern Sie dann php.ini und fügen Sie extension=myext.so hinzu.

Führen Sie php -r "myext_helloworld('test');" aus und geben Sie hello world aus!

Das obige ist der detaillierte Inhalt vonSo schreiben Sie eine PHP-Erweiterung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage