PHP7 Kernel Analysis 11 Modulerweiterung

不言
Freigeben: 2023-03-23 18:16:01
Original
1152 Leute haben es durchsucht

Der Inhalt dieses Artikels handelt von der Modulerweiterung der PHP7-Kernelanalyse 11. Jetzt können Freunde in Not darauf verweisen

1 🎜 >(a).ext_skel: Dieses Skript generiert hauptsächlich die für die Kompilierung erforderliche Konfiguration und die Grundstruktur der Erweiterung

(b).php-config: Dieses Skript ruft hauptsächlich PHP-Installationsinformationen ab

(c).phpize: wird zum Generieren von Konfigurationsdateien verwendet


2. Grundlegende Schritte zum Schreiben von Erweiterungen

a . Generieren Sie das erweiterte Grundgerüst über das ext_skel-Skript im ext-Verzeichnis. Ändern Sie die Konfiguration von config.m4, legen Sie erweiterte Quelldateien und abhängige Bibliotheken/Funktionsprüfungen fest .;

./ext_skel --extname=wu
Nach dem Login kopieren
PHP_ARG_WITH(arg_name,check message,help info): 定义一个--with-feature[=arg]这样的编译参数,参数分别为
参数名、执行./configure是展示信息、执行--help时展示信息

$PHP_参数名:获取对应的参数值
Nach dem Login kopieren
PHP_ARG_ENABLE(arg_name,check message,help info): 定义一个--enable-feature[=arg]或--disable-feature参
数,--disable-feature等价于--enable-feature=no,这个宏与PHP_ARG_WITH类似,通常情况下如果配置的参数需
要额外的arg值会使用PHP_ARG_WITH,而如果不需要arg值,只用于开关配置则会使用PHP_ARG_ENABLE。
Nach dem Login kopieren
./configure时输出结果,其中error将会中断configure执行

AC_MSG_CHECKING(message)
AC_MSG_RESULT(message)
AC_MSG_ERROR(message)
Nach dem Login kopieren
AC_DEFINE(variable, value, [description]): 定义一个宏,比如:AC_DEFINE(IS_DEBUG, 1, []),执行autoheader
时将在头文件中(config.h)生成:#define IS_DEBUG 1。
Nach dem Login kopieren
c. Schreiben Sie die Funktion gemäß Format der PHP-Erweiterung und der von PHP bereitgestellten API
PHP_ADD_INCLUDE(path): 添加include路径,即:gcc -Iinclude_dir
Nach dem Login kopieren
PHP_CHECK_LIBRARY(library, function [, action-found [, action-not-found ]]): 检查依赖的库中是否存在需要
的function,action-found为存在时执行的动作,action-not-found为不存在时执行的动作
Nach dem Login kopieren
PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $XXX_DIR/$PHP_LIBDIR, XXX_SHARED_LIBADD): 添加链接库
Nach dem Login kopieren
d
PHP_NEW_EXTENSION(extname, sources [, shared]): 注册一个扩展,添加扩展源文件,确定此扩展是动态库还是静态库,每个扩展的config.m4中都需要通过这个宏完成扩展的编译配置。
Nach dem Login kopieren
e. Kompilieren und installieren: ./configure, make, make install und dann den erweiterten .so-Pfad zu php.ini hinzufügen.
PHP_MINIT_FUNCTION(mytest){
    这个阶段可以进行内部类的注册,如果你的扩展提供
    了类就可以在此函数中完成注册;除了类还可以在此
    函数中注册扩展定义的常量
}

PHP_RINIT_FUNCTION(mytest){
    如果你的扩展需要针对每一个请求进行处理则可以设
    置这个函数,如:对请求进行filter
}

PHP_RSHUTDOWN_FUNCTION(mytest){
    此函数在请求结束时被调用
}

PHP_MSHUTDOWN_FUNCTION(mytest){
    模块关闭阶段回调的函数,与module_startup_func对应,
    此阶段主要可以进行一些资源的清理
}

PHP_FUNCTION(my_func_1){
   自定义内部函数1
}

PHP_FUNCTION(my_func_1){
   自定义内部函数2(带参)
   zval        *arr;
    //L当数据溢出不报错,s需要第四参数,
   //l(L)整型,(b)布尔型,(d)浮点型,s(S)字符串型,a(A)数组型,o(O)对象型,r资源型,z任意类型
   if(zend_parse_parameters(ZEND_NUM_ARGS(), "la", &lval, &arr) == FAILURE){
        RETURN_FALSE;
    }
}

const zend_function_entry mytest_functions[] = {
    PHP_FE(my_func_1,   NULL)
    PHP_FE(my_func_2,   NULL)
    PHP_FE_END //末尾必须加这个
};

zend_module_entry mytest_module_entry = {
    STANDARD_MODULE_HEADER, //宏统一设置
    "mytest", //模块名
    mytest_functions, //自定义函数数组
    PHP_MINIT(mytest), //扩展初始化回调函数
    PHP_MSHUTDOWN(mytest), //扩展关闭时回调函数
    PHP_RINIT(mytest), //请求开始前回调函数
    PHP_RSHUTDOWN(mytest), //请求结束时回调函数
    NULL, //PHP_MINFO(mytest),php_info展示的扩展信息处理函数
    "1.0.0",
    STANDARD_MODULE_PROPERTIES //宏统一设置
};

ZEND_GET_MODULE(mytest) //读取mytest_module_entry结构体
Nach dem Login kopieren
Verwandte Empfehlungen:
phpsize
Nach dem Login kopieren
PHP7-Kernel-Analyse 10: Thread-Sicherheit
./configure
make
make install
Nach dem Login kopieren

PHP7-Kernel-Analyse 9: Speicherverwaltung

PHP7 Kernel Analysis 8 und dergleichen

                                               🎜>

Das obige ist der detaillierte Inhalt vonPHP7 Kernel Analysis 11 Modulerweiterung. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!