在扩展中,有时候需要使用在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条语句展开后,形成的结果如下:
可见所有的ini变量都被放到了一个 zend_ini_entry类型的数组中,数组名为 ini_entries.
此时只是定义了这么一个变量,为了能够使用它,需要在MINIT的方法内部进行调用,使用
REGISTER_INI_ENTRIES()完成,这个宏的定义如下:
其实就是直接调用了
zend_register_ini_entries() 进行了注册,并且强制使用了TSRM的方式。
为了保证干净的使用这些ini变量,在MSHUTDOWN时需要对已经注册的ini变量进行清除,使用UNREGISTER_INI_ENTRIES()宏完成,定义如下:
首先使用:
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, 0, 0, NULL},
{ 0, PHP_INI_ALL, "foo_bar.global_string", sizeof("foo_bar.global_string"), NULL, NULL, NULL, null, "foobar", sizeof("foobar")-1, NULL, 0, 0, NULL},
{ 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, NULL } } ; // END的定义
{ 0, PHP_INI_ALL, "foo_bar.global_value", sizeof("foo_bar.global_value"), NULL, NULL, NULL, null, "42", sizeof("42")-1, NULL, 0, 0, NULL},
{ 0, PHP_INI_ALL, "foo_bar.global_string", sizeof("foo_bar.global_string"), NULL, NULL, NULL, null, "foobar", sizeof("foobar")-1, NULL, 0, 0, NULL},
{ 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, 0, 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)
为了保证干净的使用这些ini变量,在MSHUTDOWN时需要对已经注册的ini变量进行清除,使用UNREGISTER_INI_ENTRIES()宏完成,定义如下:
#define
UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries(module_number TSRMLS_CC)