So passen Sie Erweiterungen in PHP an (1) Grundlegende Schritte

藏色散人
Freigeben: 2023-03-14 14:30:01
nach vorne
2705 Leute haben es durchsucht

Benutzerdefinierte PHP-Erweiterung (1)

Ich erinnere mich, dass ich zum ersten Mal eine PHP-Erweiterung direkt aus dem Internet geschrieben habe, aber ich wusste nicht, warum Erläutern Sie zunächst die grundlegenden Schritte einer Erweiterung und besprechen Sie dann die dahinter stehenden Prinzipien.

Verwenden Sie das Quellcode-Tool, um die Erweiterungsverzeichnisstruktur automatisch zu generieren

Geben Sie zunächst das ext-Verzeichnis des PHP-Quellcodes ein und führen Sie den folgenden Befehl aus

/www/test/php/php/bin/php ext_skel.php --ext helloworld
cd helloworld
Nach dem Login kopieren

Ändern Sie die Konfigurationsdatei config.m4 ist, ob die jetzt geschriebene Erweiterung extern verwendet wird. Um davon abhängig zu sein, konfigurieren Sie die Option --with-hello, andernfalls konfigurieren Sie die Option --enable-hello und entfernen Sie die Kommentare entsprechend Ihren eigenen Anforderungenconfig.m4配置文件,就是现在写的扩展是否用到外部依赖,就配置--with-hello选项,否则配置--enable-hello选项,按照自己的需求把注释去掉

dnl If your extension references something external, use 'with':
 PHP_ARG_WITH([helloworld],
   [for helloworld support],
   [AS_HELP_STRING([--with-helloworld],
     [Include helloworld support])])

dnl Otherwise use 'enable':
Nach dem Login kopieren

扩展功能书写

然后vim  helloworld.c 进行扩展功能代码书写
先看下模块结构定义

zend_module_entry helloworld_module_entry = {
        STANDARD_MODULE_HEADER,
        "helloworld",                                   /* Extension name */
        helloworld_functions,                   /* zend_function_entry */
        PHP_MINIT(helloworld),                                                  /* PHP_MINIT - Module initialization */
        NULL,                                                   /* PHP_MSHUTDOWN - Module shutdown */
        PHP_RINIT(helloworld),                  /* PHP_RINIT - Request initialization */
        NULL,                                                   /* PHP_RSHUTDOWN - Request shutdown */
        PHP_MINFO(helloworld),                  /* PHP_MINFO - Module info */
        PHP_HELLOWORLD_VERSION,         /* Version */
        PHP_MODULE_GLOBALS(pib),
    NULL,
    NULL,
    NULL,
    STANDARD_MODULE_PROPERTIES_EX
};
Nach dem Login kopieren

功能函数名字集合

static const zend_function_entry helloworld_functions[] = {
        PHP_FE(helloworld_test1,                arginfo_helloworld_test1)
        PHP_FE(helloworld_test2,                arginfo_helloworld_test2)
        PHP_FE_END
};
Nach dem Login kopieren

真正的功能函数代码

PHP_FUNCTION(helloworld_test2)
{
        int argc = ZEND_NUM_ARGS();
        char *messages = NULL;
        size_t   messages_len = 0;
        char *context = NULL;
        size_t   context_len = 0;

        zend_string *retval;

        ZEND_PARSE_PARAMETERS_START(0, 2)
                Z_PARAM_OPTIONAL
                Z_PARAM_STRING(messages, messages_len)
                Z_PARAM_STRING(context, context_len)
        ZEND_PARSE_PARAMETERS_END();

        retval = strpprintf(0, "Hello %s test %s", messages, context);

        RETURN_STR(retval);
}
Nach dem Login kopieren

函数参数定义

ZEND_BEGIN_ARG_INFO(arginfo_helloworld_test2, 0)
        ZEND_ARG_INFO(0, str)
ZEND_END_ARG_INFO()
Nach dem Login kopieren

编译安装

/www/test/php/php/bin/phpize
./configure --with-php-config=/www/test/php/php/bin/php-config
make && make install
Nach dem Login kopieren

现在PHP的扩展目录中已经有了helloworld.so这个文件,在php.ini中添加上扩展的配置

extension = helloworld.so
Nach dem Login kopieren

然后就可以测试自己写的函数了helloworld_test2() rrreeeErweitertes Funktionsschreiben

dann vim helloworld .c Erweiterten Funktionscode schreiben
Schauen Sie sich zunächst die Modulstrukturdefinition an
rrreee

Funktionsfunktionsnamensammlung
rrreee🎜Echter Funktionsfunktionscode 🎜rrreee🎜Funktionsparameterdefinition🎜rrreee🎜🎜Kompilieren und installieren🎜🎜 rrreee🎜Jetzt gibt es die Datei helloworld.so im PHP-Erweiterungsverzeichnis. Fügen Sie die Erweiterungskonfiguration in php.ini🎜rrreee🎜Dann können Sie testen, was Sie geschrieben haben. Funktion <code>helloworld_test2(); Nach Abschluss einer Erweiterung habe ich das Gefühl, dass ich nichts gewonnen habe, warum ich geschrieben habe Es geht so. Lassen Sie uns im nächsten Teil über das Prinzip sprechen. Beginnen wir mit dem PHP-Lebenszyklus, siehe 🎜nächster Artikel🎜. 🎜🎜Empfohlenes Lernen: „🎜PHP-Video-Tutorial🎜“🎜🎜

Das obige ist der detaillierte Inhalt vonSo passen Sie Erweiterungen in PHP an (1) Grundlegende Schritte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
c php
Quelle:segmentfault.com
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