Heim >Backend-Entwicklung >PHP-Problem >So passen Sie Erweiterungen in PHP an (1) Grundlegende Schritte

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

藏色散人
藏色散人nach vorne
2021-12-20 15:47:282742Durchsuche

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

Ä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':

扩展功能书写

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

功能函数名字集合

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

真正的功能函数代码

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

函数参数定义

ZEND_BEGIN_ARG_INFO(arginfo_helloworld_test2, 0)
        ZEND_ARG_INFO(0, str)
ZEND_END_ARG_INFO()

编译安装

/www/test/php/php/bin/phpize
./configure --with-php-config=/www/test/php/php/bin/php-config
make && make install

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

extension = helloworld.so

然后就可以测试自己写的函数了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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen