PHP扩展:如何使用ini变量

来源:互联网 发布:诲女知之乎知的意思 编辑:程序博客网 时间:2024/05/16 02:59
在扩展中,有时候需要使用在php.ini中设定的值,在PHP的扩展中 使用ini变量的方式如下:

首先使用:
   PHP_INI_BEGIN()
   PHP_INI_ENTRY("foo_bar.global_value",      "42", PHP_INI_ALL, NULL)
   PHP_INI_ENTRY("foo_bar.global_string", "foobar", PHP_INI_ALL, NULL)
   PHP_INI_END()

PHP_INI_BEGIN(),PHP_INI_ENTRY(),PHP_INI_END()是Zend定义的一些宏,上述4条语句展开后,形成的结果如下:
 
   static zend_ini_entry ini_entries[] = {  //   BEGIN 的定义
    
0, PHP_INI_ALL, "foo_bar.global_value"sizeof("foo_bar.global_value"), NULL, NULL, NULL, null"42"sizeof("42")-1, NULL, 00,   NULL},
    
0, PHP_INI_ALL, "foo_bar.global_string"sizeof("foo_bar.global_string"), NULL, NULL, NULL, null"foobar"sizeof("foobar")-1, NULL, 00,   NULL},
    
00, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 00, NULL } }
;    // END的定义


可见所有的ini变量都被放到了一个 zend_ini_entry类型的数组中,数组名为 ini_entries.

此时只是定义了这么一个变量,为了能够使用它,需要在MINIT的方法内部进行调用,使用
REGISTER_INI_ENTRIES()完成,这个宏的定义如下:
#define REGISTER_INI_ENTRIES() zend_register_ini_entries(ini_entries, module_number TSRMLS_CC)
其实就是直接调用了 zend_register_ini_entries() 进行了注册,并且强制使用了TSRM的方式。

为了保证干净的使用这些ini变量,在MSHUTDOWN时需要对已经注册的ini变量进行清除,使用UNREGISTER_INI_ENTRIES()宏完成,定义如下:
#define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries(module_number TSRMLS_CC)