xiyou 发表于 2018-12-19 11:54:09

PHP扩展开发-内核执行流程与扩展结构

//myext.c  
#ifdef HAVE_CONFIG_H
  
#include "config.h"
  
#endif
  
#include "php.h"
  
#include "php_ini.h"
  
#include "ext/standard/info.h"
  
#include "php_myext.h"
  
//全局变量声明
  
ZEND_DECLARE_MODULE_GLOBALS(myext)
  
/* True global resources - no need for thread safety here */
  
static int le_myext;
  
//模块函数的导出
  
const zend_function_entry myext_functions[] = {
  
PHP_FE(confirm_myext_compiled,NULL)   /* For testing, remove later. */
  
    PHP_FE_END/* Must be the last line in myext_functions[] */
  
};
  
//模块结构
  
zend_module_entry myext_module_entry = {
  
#if ZEND_MODULE_API_NO >= 20010901
  
STANDARD_MODULE_HEADER,
  
#endif
  
"myext",
  
myext_functions,
  
PHP_MINIT(myext),
  
PHP_MSHUTDOWN(myext),
  
PHP_RINIT(myext),   /* Replace with NULL if there's nothing to do at request start */
  
PHP_RSHUTDOWN(myext),   /* Replace with NULL if there's nothing to do at request end */
  
PHP_MINFO(myext),
  
#if ZEND_MODULE_API_NO >= 20010901
  
PHP_MYEXT_VERSION,
  
#endif
  
STANDARD_MODULE_PROPERTIES
  
};
  
#ifdef COMPILE_DL_MYEXT
  
ZEND_GET_MODULE(myext)
  
#endif
  
//ini配置文件的设置
  
PHP_INI_BEGIN()
  
STD_PHP_INI_ENTRY("myext.global_value","42", PHP_INI_ALL, OnUpdateLong, global_value, zend_myext_globals, myext_globals)
  
STD_PHP_INI_ENTRY("myext.global_string", "foobar", PHP_INI_ALL, OnUpdateString, global_string, zend_myext_globals, myext_globals)
  
PHP_INI_END()
  
//初始化全局变量
  
static void php_myext_init_globals(zend_myext_globals *myext_globals)
  
{
  
myext_globals->global_value = 0;
  
myext_globals->global_string = NULL;
  
}
  
//模块加载时的函数
  
PHP_MINIT_FUNCTION(myext)
  
{
  
/* If you have INI entries, uncomment these lines
  
REGISTER_INI_ENTRIES();
  
*/
  
return SUCCESS;
  
}
  
//模块卸载时函数
  
PHP_MSHUTDOWN_FUNCTION(myext)
  
{
  
/* uncomment this line if you have INI entries
  
UNREGISTER_INI_ENTRIES();
  
*/
  
return SUCCESS;
  
}
  
//请求初始化函数
  
PHP_RINIT_FUNCTION(myext)
  
{
  
return SUCCESS;
  
}
  
//请求关闭函数
  
PHP_RSHUTDOWN_FUNCTION(myext)
  
{
  
return SUCCESS;
  
}
  
//模块信息phpinfo
  
PHP_MINFO_FUNCTION(myext)
  
{
  
php_info_print_table_start();
  
php_info_print_table_header(2, "myext support", "enabled");
  
php_info_print_table_end();
  
/* Remove comments if you have entries in php.ini
  
DISPLAY_INI_ENTRIES();
  
*/
  
}
  
//测试函数
  
PHP_FUNCTION(confirm_myext_compiled)
  
{
  
char *arg = NULL;
  
int arg_len, len;
  
char *strg;
  
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
  
    return;
  
}
  
len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "myext", arg);
  
RETURN_STRINGL(strg, len, 0);
  
}


页: [1]
查看完整版本: PHP扩展开发-内核执行流程与扩展结构