Zend API: 支持初始化文件(php.ini)
来源:互联网 发布:mysql从零开始学 编辑:程序博客网 时间:2024/06/05 12:04
转载自:http://yanbin.org/archive/php-manual-zh-initialization-file-support.html
如果想要为你的模块创建一个 .ini 文件的配置节,可以使用宏 PHP_INI_BEGIN() 来标识这个节的开始,并用 PHP_INI_END() 表示该配置节已经结束。然后在两者之间我们用PHP_INI_ENTRY() 来创建具体的配置项。
1
PHP_INI_BEGIN()
2
PHP_INI_ENTRY(
"first_ini_entry"
,
"has_string_value"
, PHP_INI_ALL, NULL)
3
PHP_INI_ENTRY(
"second_ini_entry"
,
"2"
, PHP_INI_SYSTEM, OnChangeSecond)
4
PHP_INI_ENTRY(
"third_ini_entry"
,
"xyz"
, PHP_INI_USER, NULL)
5
PHP_INI_END()
PHP_INI_ENTRY() 总共接收 4 个参数:配置项名称、初始值、改变这些值所需的权限以及在值改变时用于接收通知的函数句柄。配置项名称和初始值必须是一个字符串,即使它们是一个整数。
更改这些值所需的权限可以划分为三种:PHP_INI_SYSTEM 只允许在 php.ini 中改变这些值;PHP_INI_USER 允许用户在运行时通过像 .htaccess 这样的附加文件来重写其值;而PHP_INI_ALL 则允许随意更改。其实还有第四种权限:PHP_INI_PERDIR,不过我们还暂时不能确定它有什么影响。(本段关于这几种权限的说明与手册中《附录G php.ini 配置选项》一节的描述略有出入。根据译者自己查到的资料,相比之下还是《附录G php.ini 配置选项》更为准确些。译注)
第四个参数是初始值被改变时接收通知的函数句柄。一旦某个初始值被改变,那么相应的函数就会被调用。这个函数我们可以用宏 PHP_INI_MH 来定义:
1
PHP_INI_MH(OnChangeSecond);
// handler for ini-entry "second_ini_entry"
2
3
// specify ini-entries here
4
PHP_INI_MH(OnChangeSecond)
5
{
6
zend_printf(
"Message caught, our ini entry has been changed to %s<br>"
, new_value);
7
return
(SUCCESS);
8
}
改变后的新值将会以字符串的形式并通过一个名为 new_value 变量传递给函数。要是再注意一下 PHP_INI_MH 的定义就会发现,我们实际上用到了不少参数:
1
#define PHP_INI_MH(name) int name(
2
php_ini_entry *entry,
3
char
*new_value,
4
uint new_value_length,
5
void
*mh_arg1,
6
void
*mh_arg2,
7
void
*mh_arg3
8
)
这些定义都可以在 php_ini.h 文件里找到。可以发现,我们的通知接收函数可以访问整个配置项、改变后的新值以及它的长度和其他三个可选参数。这几个可选参数可以通过PHP_INI_ENTRY1(携带一个附加参数)、PHP_INI_ENTRY2(携带两个附加参数)、PHP_INI_ENTRY3(携带三个附加参数)等宏来加以指定。
关于值改变的通知函数应该被用来本地缓存一些初始花选项以便可以更快地对其访问或被用来从事一个值发生改变时所要求完成的任务。比如要是一个模块对一个主机常量进行了连接,而这时有人改变了主机名,那么就需要自动地关闭原来的连接,并尝试进行新的连接。
可以使用“表3.17 PHP 中用以访问初始化配置项的宏”来访问初始化配置项:
表3.17 PHP 中用以访问初始化配置项的宏
最后,你还得把整个初始化配置项引入 PHP。这项工作可以在模块的起始/结束函数中使用宏 REGISTER_INI_ENTRIES() 和 UNREGISTER_INI_ENTRIES() 来搞定。
1
ZEND_MINIT_FUNCTION(mymodule)
2
{
3
REGISTER_INI_ENTRIES();
4
}
5
6
ZEND_MSHUTDOWN_FUNCTION(mymodule)
7
{
8
UNREGISTER_INI_ENTRIES();
9
}
- Zend API: 支持初始化文件(php.ini)
- 实现Zend Optimizer 和 Zend Debugger 共存,配置php.ini文件的方法
- 用API函数读写初始化文件(*.ini)的方法
- PHP ZEND API整理
- php zend api【第一次】
- (windows下)php-ini文件和开启gd库支持
- zend studio 5.5 配置php.ini
- Zend系列产品的php.ini配置
- 操作ini文件api
- API读写ini文件
- INI文件读写API
- Zend API:深入 PHP 内核
- Zend API:深入 PHP 内核
- Zend API:深入 PHP 内核
- Zend API:深入 PHP 内核
- Zend API:深入 PHP 内核
- Zend API:深入 PHP 内核
- Zend API:深入 PHP 内核
- 最大子矩阵
- spring webservice (一) 服务器端开发
- 学习JavaMelody系统监控工具使用配置
- iOS7 UIWebView内存泄露问题解决方法
- 计算器之逆波兰算法
- Zend API: 支持初始化文件(php.ini)
- Qt的Linux 线程中传递,类的类型参数
- [LeetCode] Letter Combinations of a Phone Number
- 【Ubuntu】[VIM]:ubuntu下vi不能正常使用的解决方法
- python—xml读写—minidom and etree
- Opengl es2.0 glEnable(GL_TEXTURE_2D)报错 GL_INVALID_ENUM
- Sharepoint2013 Report Service初探
- 与android database 交互(chapter 14-Working with the SQLite Database)
- Spark安装启动 and 在程序中调用spark服务