Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist PHP-Modulentwicklung? Einführung in die einfache PHP-Modulentwicklung

Was ist PHP-Modulentwicklung? Einführung in die einfache PHP-Modulentwicklung

伊谢尔伦
伊谢尔伦Original
2017-06-22 13:30:214597Durchsuche

In einigen notwendigen Szenarien müssen wir unsere eigenen lokalen PHP-Funktionen entwickeln, um bestimmte Anforderungen zu erfüllen, und die neuen Funktionen müssen im PHP-Modul vorhanden sein. Im Folgenden wird die einfachste PHP-Modulentwicklung vorgestellt: Erstellen Sie Ihre eigene Funktion say_hello($arg), um „Hallo Welt“ auszugeben: $arg.

Die in diesem Dokument vorgestellte PHP-Modulentwicklung dient nur dazu, Hallo Welt zu machen. Ich werde vorerst nicht zu viel darüber erzählen, warum dies getan wird, sondern die nachfolgende Anatomie detaillierter vorstellen.

Das Modul „Hallo Welt“ kann durch Befolgen einiger einfacher Schritte abgeschlossen werden:

Generieren Sie die Modulinfrastruktur

Ändern Sie den Modulcode und fügen Sie die Funktion say_hello hinzu

Ändern Sie die kompilierte Konfigurationsdatei

Generieren Sie eine gemeinsam genutzte Modulbibliothek

Konfigurieren Sie das Modul, um das Modul wirksam zu machen

Testmodul

1. Modulgrundlagen generieren

Geben Sie das ext-Verzeichnis unter dem PHP-Quellcodeverzeichnis ein.
Führen Sie ./ext_skel ––extname=sayhello aus (hier stimmt etwas mit der „–“-Kodierung nicht, bitte kopieren Sie sie nicht direkt)
Ausgabe:

[root@myhost ext]# ./ext_skel –– extname=sayhello

Verzeichnis sayhello erstellen

Basisdateien erstellen: config.m4 config.w32 .cvsignore sayhello.c php_sayhello.h CREDITS EXPERIMENTAL tests/001.phpt sayhello. php [fertig].

Um Ihre neue Erweiterung zu verwenden, müssen Sie die folgenden Schritte ausführen:

1. sayhello/config.m4

3. $ ./buildconf

4 >

6 . $ ./php -f ext/sayhello/sayhello.php

7. $ vi ext/sayhello/sayhello.c

8 🎜>Wiederholen Sie die Schritte 3–6, bis Sie mit ext/sayhello/config.m4 zufrieden sind und

Schritt 6 bestätigt, dass Ihr

Modul

in PHP kompiliert ist. Beginnen Sie dann mit dem Schreiben

Code programmieren und die letzten beiden Schritte so oft wie nötig wiederholen.

Da die Anzeige anzeigt, dass die Modulinfrastruktur generiert wurde, schauen wir uns an, welche Dateien das generierte Modul enthält:

-rw-r–r – 1 root root 2103 Apr 9 05:05 config.m4                                                      //Konfiguration kompilieren. Datei

-rw-r–r– 1 root root 2103 Apr 9 05:05 config .w32                                                                      5:05 CREDITS           //Autoreninformationen

-rw-r–r– 1 root root 0 9. April 05:05 EXPERIMENTELL            /Beta-Versionsinformationsidentifizierung

-rw-r–r– 1 Root Root 2755 9. April 05:05 php_sayhello.h //Moduldefinitions-Header-Datei

-rw-r–r– 1 Root Root 5294 9. Apr. 05:05 sayhello.c //Modulimplementierungsdatei

-rw-r–r– 1 Root Root 508 9. Apr. 05:05 sayhello.php //php wird zum Testen des Modulladens verwendet Datei

drwxr-xr-x 2 root root 4096 9. April 05:05 Tests //Testdateiverzeichnis

Zu diesem Zeitpunkt ist das Grundgerüst des Moduls herausgekommen, wir können es als nächstes verschieben Ziel Die Funktion say_hello() wurde hinzugefügt.

2. Implementieren Sie die Funktion say_hello()

Öffnen Sie die Datei php_sayhello.h des Moduls und fügen Sie die für php say_hello() vorbereitete c-Funktionsdefinition hinzu:

PHP_FUNCTION(say_hello); //php Der Quellcode definiert viele Makros zum Öffnen von Modulen, was sehr praktisch ist, wenn Sie sich daran gewöhnt haben

Nachdem wir es hinzugefügt haben, werden wir die spezifische Implementierung von PHP_FUNCTION (say_hello) in say_hello.c hinzufügen:

Jetzt wurde auch der Implementierungscode geschrieben. Wir müssen sayhello_functions in sayhello.c ändern:

3. Ändern Sie die Kompilierungskonfigurationsdatei


und öffnen Sie config.m4. Entfernen Sie das
Kommentarzeichen

„dnl“ vor dem folgenden Inhalt:
PHP_FUNCTION(say_hello){
char *arg = NULL;
int arg_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) ==FAILURE) {  //获取php代码的输入参数,方式与scanf差不多
return;
}
zend_printf("hello world : %s",arg);
RETURN_STRINGL(arg, arg_len, 1);
}

dnl PHP_ARG_ENABLE(sayhello, ob die Sayhello-Unterstützung aktiviert werden soll ,

zend_function_entry sayhello_functions[] = {
PHP_FE(confirm_sayhello_compiled,    NULL)        /*
 For testing, remove later. */
PHP_FE(say_hello,    NULL)        //好,现在say_hello函数也注册了
{NULL, NULL, NULL}  
  /* Must be the last line in sayhello_functions[] */
};
dnl Stellen Sie sicher, dass der Kommentar ausgerichtet ist:

dnl [ --enable-sayhello Sayhello-Unterstützung aktivieren])

dnl PHP_SUBST(SAYHELLO_SHARED_LIBADD)

4. Kompilieren Sie Module und generieren Sie gemeinsam genutzte Bibliotheken

Was ich hier verwende, ist die Modulgenerierungsmethode der dynamischen Bibliothek, die viel schneller ist als die statische Kompilierung in PHP und praktisch für das

Debuggen

ist ( Bei der Verwendung wird die dynamische Bibliothek nicht mit der dl()-Funktion von PHP geladen, die später verwendet werden kann.

Geben Sie (cd) den Sayhello-Modulordner ein und führen Sie PHP aus.

Installieren Sie

phpize unter dem Pfad bin:

[root@myhost sayhello]# /opt/php_server/php/ bin/ phpize

Konfiguriert für:

PHP-API-Version: 20041225

Zend-Modul-API-Nr.: 20060613

Zend-Erweiterungs-API-Nr.: 220060519

此时为模块编译的configure文件已经生成。继续生成Makefile文件:

[root@myhost sayhello]# ./configure –with-php-config=/opt/php_server/php/bin/php-config

……没问题的话是没有错误的

现在可以编译了:

make

代码没有问题的话不会有错的。

编译完,进行模块安装:

[root@myhost sayhello]# make install
Installing shared extensions:     /opt/php_server/php/lib/php/extensions/no-debug-non-zts-20060613/

显示模块已经安装至/php安装路径/extensions/no-debug-non-zts-20060613/ 路径下了。

5、配置模块,使其被加载

打开你的php.ini文件开始修改吧:

扩展路径设置:

修改extension_dir = “/php安装路径/lib/php/extensions/no-debug-non-zts-20060613″ //看看上述的模块安装路径就知道了

增加模块设置:

[sayhello]
extension=sayhello.so

ok 大功告成,重新启动你的php模块把。

6、测试模块

写以下php测试代码执行:

<?php
$a = say_hello("frank");
echo "<br>";
echo $a;
?>;

打开这个网页后显示:

hello world : frank
frank

成功运行,模块测试通过。

Das obige ist der detaillierte Inhalt vonWas ist PHP-Modulentwicklung? Einführung in die einfache PHP-Modulentwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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