Heim > Backend-Entwicklung > PHP-Tutorial > Detaillierte Einführung in die PHP-Erweiterung „Hello World'.

Detaillierte Einführung in die PHP-Erweiterung „Hello World'.

黄舟
Freigeben: 2023-03-15 07:10:01
Original
2018 Leute haben es durchsucht


Vorwort

Dies ist ein Memo, das ich schon lange schreiben wollte. Es gibt Hunderte von Artikeln zum Schreiben von PHP-Erweiterungen, aber viele von ihnen sind sehr alt. Einige Beispiele funktionieren nicht. Es ist ein bisschen peinlich.
Dieser Artikel dient dazu, eigene Notizen als Memo festzuhalten.

Text

1. Laden Sie das PHP-Installationspaket herunter

Download-Adresse: PHP-Download-Schnelllink
In diesem Artikel wird das PHP-5.6.7-Installationspaket ausgewählt.
Danach installieren Sie PHP.

2. Erstellen Sie ein erweitertes Skelett

//跑到ext目录cd php-5.6.7/ext///执行一键生成骨架的操作./ext_skel --extname=helloworld
Nach dem Login kopieren

Wenn Sie die folgende Eingabeaufforderung sehen, die das Erstellungsergebnis anzeigt
Detaillierte Einführung in die PHP-Erweiterung „Hello World.

cd helloworld
ls
Nach dem Login kopieren

finden Sie das Folgende Dateien:

config.m4  config.w32  CREDITS  EXPERIMENTAL  helloworld.c  helloworld.php  php_helloworld.h  tests
Nach dem Login kopieren

3. Ändern Sie die erweiterte Konfigurationsdatei config.m4

Entfernen Sie die dnl vor dem folgenden Code. (dnl entspricht phps //)

##动态编译选项,通过.so的方式链接,去掉dnl注释PHP_ARG_WITH(helloworld, for helloworld support,
Make sure that the comment is aligned:
[  --with-helloworld             Include helloworld support])##静态编译选项,通过enable来启用,去掉dnl注释PHP_ARG_ENABLE(helloworld, whether to enable helloworld support,
Make sure that the comment is aligned:
[  --enable-helloworld           Enable helloworld support])
Nach dem Login kopieren

Im Allgemeinen können Sie eine von beiden auswählen (es hängt von Ihren persönlichen Vorlieben ab, der Aktivierungskommentar muss in diesem Tutorial entfernt werden).

4. Kompilierungstest durchführen

phpize
./configure --enable-helloworldmakemake install
Nach dem Login kopieren

Dann eine Erweiterung zu php.ini hinzufügen

vim /usr/local/php/etc/php.ini// 添加扩展extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/"extension = "helloworld.so"// 重启php-fpm/etc/init.d/php-fpm restart
Nach dem Login kopieren

Gehen Sie zurück zu dem Ordner, in dem die Erweiterung geschrieben wurde, und führen Sie sie aus Testbefehl

php -d enable_dl=On myfile.php
Nach dem Login kopieren

Wenn Sie die folgenden Wörter sehen, ist der Sieg nicht mehr weit:

confirm_helloworld_compiled

Congratulations! You have successfully modified ext/helloworld/config.m4. Module helloworld is now compiled into PHP.
Nach dem Login kopieren

confirm_helloworld_compiled ist eine Testfunktion, die automatisch von ext_skel generiert wird.

ps: Wenn zwei PHP-Versionen lokal installiert sind und die Erweiterung in PHP7 geschrieben ist, können folgende Probleme auftreten:

/mydata/src/php-7.0.0/ext/helloworld/helloworld.c: 在函数‘zif_confirm_helloworld_compiled’中:
/mydata/src/php-7.0.0/ext/helloworld/helloworld.c:58: 错误:‘zend_string’未声明(在此函数内第一次使用)
/mydata/src/php-7.0.0/ext/helloworld/helloworld.c:58: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
/mydata/src/php-7.0.0/ext/helloworld/helloworld.c:58: 错误:所在的函数内也只报告一次。)
/mydata/src/php-7.0.0/ext/helloworld/helloworld.c:58: 错误:‘strg’未声明(在此函数内第一次使用)
Nach dem Login kopieren

Ursache: Die Kompilierungsumgebung ist nicht PHP7.
Lösung: Es gibt keinen zend_string-Typ in php5, ersetzen Sie ihn durch char oder ändern Sie Ihre PHP-Versionsumgebung auf php7

5. Erstellen Sie die helloworld-Funktion.

Bearbeiten Sie helloworld.c und fügen Sie die hinzu Folgende implementierte Funktion

##zend_function_entry helloworld_functions 补充要实现的函数const zend_function_entry helloworld_functions[] = { 
    PHP_FE(confirm_helloworld_compiled, NULL)       /* For testing, remove later. */
    PHP_FE(helloworld,  NULL)       /* 这是补充的一行,尾巴没有逗号 */
    PHP_FE_END  /* Must be the last line in helloworld_functions[] */};
Nach dem Login kopieren

Suchen Sie „PHP_FUNCTION(confirm_helloworld_compiled)“, starten Sie eine andere Funktion, um die Funktionsentität zu schreiben:

PHP_FUNCTION(helloworld) {    php_printf("Hello World!\n");
    RETURN_TRUE;
}
Nach dem Login kopieren

Gehen Sie die Kompilierung erneut durch:

./configure --enable-helloworld && make && make install
Nach dem Login kopieren

Testen Sie, ob es wirklich gelingt:

php -d enable_dl=On -r "dl('helloworld.so');helloworld();"//输出Hello World!
Nach dem Login kopieren

Erfolg!

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die PHP-Erweiterung „Hello World'.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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