现在的位置: 首页 > 综合 > 正文

PHP扩展开发(3):初始化文件

2019年11月12日 ⁄ 综合 ⁄ 共 2197字 ⁄ 字号 评论关闭

转载自:

http://terrylee.me/blog/post/2011/02/12/php-extension-part1.aspx

 

在开发PHP扩展时,有时候我们需要访问php.ini文件,本文通过一个例子介绍如何在PHP扩展中访问INI设置项。首先打开php_fetion_echo.h头文件(快速入门篇中的例子),在里面加上函数声明:

PHP_FUNCTION(say_hello);

在fetion_echo.c文件中,加入下面代码:

此处使用PHP_INI_BEGIN宏定义开始INI项配置节,用PHP_INI_END宏定义结束配置节,每一个INI设置项都用PHP_INI_ENTRY宏进行定义:

第一个参数指定INI配置项名称,为了避免命名冲突,建议使用扩展名 + 自定义配置项名,如hello_greeting。

第二个参数是配置项的初始值,无论INI条目是数值还是字符串值,都需要传递一个相应的字符串值。这归因于.ini 文件本身的文本性。当你在代码中使用 INI_INT(), INI_FLT(), INI_BOOL()的时候,它们会自动进行类型转换。

第三个参数是配置项权限修饰符,即指定配置项在何时可以被修改,PHP_INI_SYSTEM只允许在php.ini中改变这些
值;PHP_INI_USER允许用户在运行时通过像 .htaccess 这样的附加文件来重写其值;而PHP_INI_ALL则允许随意更改。

第四个参数是初始值被改变时接收通知的函数句柄。一旦某个初始值被改变,那么相应的函数就会被调用。这个函数我们可以用宏 PHP_INI_MH 来定义,如:


改变后的新值将会以字符串的形式并通过一个名为 new_value 变量传递给函数。要是再注意一下 PHP_INI_MH 的定义就会发现,我们实际上用到了不少参数:

我们的通知接收函数可以访问整个配置项、改变后的新值以及它的长度和其他三个可选参数。这几个可选参数可以通过
PHP_INI_ENTRY1(携带一个附加参数)、PHP_INI_ENTRY2(携带两个附加参数)、PHP_INI_ENTRY3(携带三个附加参
数)等宏来加以指定。

除此之外,我们还需要对配置节进行初始化,这项工作可以在PHP扩展和销毁函数中完成:

接下来编写我们的扩展函数,读取配置项的值并作为函数返回值:


此处我们使用了INI_STR宏定义读取字符串的值,关于配置项的读取宏有如下几个:

INI_INT(name) 将配置项 name 的当前值以长整数返回
INI_FLT(name) 将配置项 name 的当前值以双精度浮点数返回
INI_STR(name) 将配置项 name 的当前值以字符串返回。 注意:这个字符串不是复制过的字符串,而是直接指向了内部数据。如果你需要进行进一步的访问的话,那就需要再进行复制一下
INI_BOOL(name) 将配置项 name 的当前值以布尔值返回
INI_ORIG_INT(name) 将配置项 name 的初始值以长整型数返回
INI_ORIG_FLT(name) 将配置项 name 的初始值以双精度浮点数返回
INI_ORIG_STR(name) 将配置项 name 的初始值以字符串返回。 注意:这个字符串不是复制过的字符串,而是直接指向了内部数据。如果你需要进行进一步的访问的话,那就需要再进行复制一下
INI_ORIG_BOOL(name) 将配置项 name 的初始值以布尔值返回

最后我们注册扩展函数到函数表中:

编写一个简单的测试脚本:


运行后效果如下:

007

此时值为初始值,因为我们没有在别的地方修改配置项的值,如果在php.ini文件里加上一项,修改hello_greeting的值:

hello_greeting = "Hello, Terrylee!"


运行后效果如下:

008

关于PHP扩展开发中对于初始化文件的访问就介绍到这里。

抱歉!评论已关闭.