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

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

黄舟
黄舟Original
2017-08-14 09:26:032016Durchsuche


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

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

cd helloworld
ls

finden Sie das Folgende Dateien:

config.m4  config.w32  CREDITS  EXPERIMENTAL  helloworld.c  helloworld.php  php_helloworld.h  tests

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])

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

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

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

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.

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’未声明(在此函数内第一次使用)

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[] */};

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;
}

Gehen Sie die Kompilierung erneut durch:

./configure --enable-helloworld && make && make install

Testen Sie, ob es wirklich gelingt:

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

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!

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