module_init
函數是 PHP 擴展開發中的一個重要概念,它用于初始化模塊
example_module.c
的 C 文件,其中包含以下內容:#include "php.h"
// 定義一個簡單的函數
PHP_FUNCTION(example_function) {
RETURN_STRING("Hello from example module!");
}
// 定義函數入口
static const zend_function_entry example_functions[] = {
PHP_FE(example_function, NULL)
PHP_FE_END
};
// 定義模塊入口
zend_module_entry example_module_entry = {
STANDARD_MODULE_HEADER,
"example",
example_functions,
NULL, // module_init 函數指針,將在下一步中實現
NULL, // module_shutdown 函數指針
NULL, // request_startup 函數指針
NULL, // request_shutdown 函數指針
NULL, // module info 函數指針
"1.0",
STANDARD_MODULE_PROPERTIES
};
ZEND_GET_MODULE(example)
module_init
函數。在 example_module.c
文件中添加以下代碼:PHP_MINIT_FUNCTION(example) {
// 在這里添加你的模塊初始化代碼
php_printf("Example module initialized!\n");
return SUCCESS;
}
zend_module_entry
結構體,將 module_init
函數指針指向剛剛實現的函數:zend_module_entry example_module_entry = {
STANDARD_MODULE_HEADER,
"example",
example_functions,
PHP_MINIT(example), // 更新 module_init 函數指針
NULL, // module_shutdown 函數指針
NULL, // request_startup 函數指針
NULL, // request_shutdown 函數指針
NULL, // module info 函數指針
"1.0",
STANDARD_MODULE_PROPERTIES
};
config.m4
的配置文件,其中包含以下內容:PHP_ARG_ENABLE(example, whether to enable example support,
[ --enable-example Enable example support])
if test "$PHP_EXAMPLE" != "no"; then
PHP_NEW_EXTENSION(example, example_module.c, $ext_shared)
fi
然后,運行以下命令以編譯和安裝擴展:
phpize
./configure
make
sudo make install
php.ini
文件中啟用擴展:extension=example.so
現在,當 PHP 解釋器啟動時,module_init
函數將被調用,輸出 “Example module initialized!”。你可以根據需要在此函數中執行任何模塊初始化操作。