关于php扩展中使用ini配置和使用全局变量
来源:互联网 发布:wifi万能钥匙源码 编辑:程序博客网 时间:2024/05/13 22:28
关于php扩展中使用ini配置和使用全局变量。有时候一段程序逻辑的方向修改,可以根据输入的数据进行修改,也可以直接去更改代码,但这样带来了灵活性的缺失和安全的问题,所以引入了php.ini配置文件,为了方便提供在ini里面配置。下面配置该全局。
首先,确定该全局变量是不是线程安全的(因为一个线程里面可能会提供多个request,考虑到数据共享带来的风险),主要下是否需要include “TSRM.h”。
好了,直接上码
ZEND_BEGIN_MODULE_GLOBALS(ext) long counter; zend_bool direction;ZEND_END_MODULE_GLOBALS(ext)
上面就定义了2个全局变量,一个counter,direction。分别是long、bool型。其实就是定义了一个全局变量的结构体,改结构体的名称是:zend_ext_globals,里面有2个成员,分别是counter,direction。
假设是在线程安全的环境下使用,所以还是定义如下内容:
#ifdef ZTS#define EXT_G(v) TSRMG(ext_globals_id, zend_ext_globals *, v)#else#define EXT_G(v) (ext_globals.v)#endif
ok,再来看一下怎么把这个全局变量的结构体和ini文件关联,直接上码:
PHP_INI_BEGIN() PHP_INI_ENTRY("ext.greeting", "This is a glboal val", PHP_INI_ALL, NULL) STD_PHP_INI_ENTRY("ext.direction", "1", PHP_INI_ALL, OnUpdateBool, direction, zend_ext_globals, ext_globals)PHP_INI_END()
这里解释一下,
PHP_INI_ENTRY 是注册一个ini配置的配置项,下面分别说一下里面的参数:
1、这个配置项是在ext扩展下,名称是greeting。
2、这是1的值。
3、PHP_INI_ALL 说明这个ini的值的权限,意在这个值是可以在任何地方修改的。
4、可以是个回调函数,当修改这个值的时候触发,比如使用ini_set的时候。
STD_PHP_INI_ENTRY和PHP_INI_ENTRY类似,前三项的值的意义和PHP_INI_ENTRY,但提供了一些额外功能。:
1、同PHP_INI_ENTRY。
2、同上。
3、同上。
4、这里说一下,我们知道ini是通过配置文件配置的,也就是说读取的来源于文件,对于文件内容,只能是string型,不管你在文件里面配置的是布尔值、数值型,在内核里面,读出来就是string。所以,如果你配置的是数值或者布尔值的时候,肯定在使用的时候也希望它是布尔值或者数值型而不是字符型。那咋办?没关系,zend提供了一个方法,就是在你取出的ini值里面可以各种转换类型。比如上面的第四个参数OnUpdateBool,功能就像它的名字一样,把取出来的值转成bool类型。
5、这个全局变量的命,其实就是在全局结构体里面的成员变量名。
6、zend_ext_globals是结构体名称,在上面定义过的。
7、定义的结构体名称,就是这样:zend_ext_globals *ext_globals。
OK,到了这里,基本的东西搞定了,看一下怎么使用,
首先,要使用ini的值,值需要这样:INI_STR(ext.direction)
。
如果要使用定义好的全局变量呢?这样:EXT_G(ext.greeting)
。
暂时到这里,后面考虑给出更详细的例子。
- 关于php扩展中使用ini配置和使用全局变量
- PHP中使用全局变量
- PHP扩展:如何使用ini变量
- php.ini配置PHP扩展
- PHP中全局变量的使用
- 在PHP中使用全局变量
- PHP中全局变量的使用global和$GLOBALS[]
- PHP中全局变量的使用global和$GLOBALS[]
- PHP中全局变量的使用global和$GLOBALS[]
- PHP中全局变量的使用global和$GLOBALS[]
- PHP中全局变量的使用global和$GLOBALS[]
- PHP中全局变量的使用global和$GLOBALS[]
- 使用.htaccess修改php.ini的配置
- 使用.htaccess修改php.ini的配置
- 关于在多线程中,局部变量和全局变量的使用。
- php.ini中register_globals使用详解
- php 中全局变量global 的使用
- 教你在PHP中使用全局变量
- Log4j配置
- Barracuda文件格式和Antelope的区别
- linux平台学x86汇编(十三 ):字符串的比较与搜索
- Python 类的继承
- java中的访问权限
- 关于php扩展中使用ini配置和使用全局变量
- PHP返回JSON数据及中文编码问题的解决方案
- 回车换行的故事
- NuGet包管理动态链接库
- [2015/05/10] 百度地图API运用 & 真机百度地图不显示问题
- 信号量与PV操作
- Android Adapter 源码笔记(1)
- 算法导论第一题
- 论java环境的重要性