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
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.php7. $ vi ext/sayhello/sayhello.c8 🎜>Wiederholen Sie die Schritte 3–6, bis Sie mit ext/sayhello/config.m4 zufrieden sind undSchritt 6 bestätigt, dass IhrModul
in PHP kompiliert ist. Beginnen Sie dann mit dem SchreibenCode 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 Dateidrwxr-xr-x 2 root root 4096 9. April 05:05 Tests //TestdateiverzeichnisZu 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
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 PHP_SUBST(SAYHELLO_SHARED_LIBADD)
4. Kompilieren Sie Module und generieren Sie gemeinsam genutzte BibliothekenWas 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/ phpizePHP-API-Version: 20041225Zend-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/ 路径下了。
打开你的php.ini文件开始修改吧:
扩展路径设置:
修改extension_dir = “/php安装路径/lib/php/extensions/no-debug-non-zts-20060613″ //看看上述的模块安装路径就知道了
增加模块设置:
[sayhello]
extension=sayhello.so
ok 大功告成,重新启动你的php模块把。
写以下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!