of_base_com_data::json($data, $mode = 1) 安全的json
-
datastring, array编码或解码的数据
-
modeint
位运算操作选项 0=解码 2=解码前去掉反斜杠 1=编码 2=编码后添加反斜杠
<?php /** * 返回编码解码后的数据 */ $data = '<script>"嗨"'; json_encode($data); //"<script>\"\u55e8\"" $result = of_base_com_data::json($data, 1); //""\u003Cscript\u003E\"嗨\"" of_base_com_data::json($result, 0); //<script>"嗨" //添加反斜线 $result = of_base_com_data::json($data, 1 | 2); //\"\\u003Cscript\\u003E\\\"嗨\\\"\" of_base_com_data::json($result, 0 | 2); //<script>"嗨"
of_base_com_data::digest($data) 计算数据的唯一摘要值
-
data指定计算的数据
<?php
//键的顺序不同结果相同
of_base_com_data::digest(array('a' => 1, 'b' => 2)); //ef8ba71070086c47bd785b4271d1fb54
of_base_com_data::digest(array('b' => 2, 'a' => 1)); //ef8ba71070086c47bd785b4271d1fb54
of_base_com_data::lock($name, $lock = 2, $argv = array()) 为并发流程创建独占通道, 工作中的锁会随工作结束而解锁
-
namestring锁通道标识
-
lockint文件加锁方式 1=共享锁, 2=独享锁, 3=解除锁, 4=非堵塞(LOCK_NB)
-
argvarray操作参数 {"space" : 命名空间, 默认"", 空间之间同名锁冲突}
<?php
/**
* 成功返回true, 失败返回false
* 使用"2 | 4"方式尝试加独享锁
* 配置_of.com.data.lock调整分布式锁属性
*/
of_base_com_data::lock('group::demo', 2); //打开demo标识独享锁
of_base_com_data::lock('group::demo', 3); //关闭demo标识独享锁
of_base_com_data::rule(&$data, $rule) 数据格式校验
-
dataarray待填充校验的数据
-
rulearray校验规则
{ 节点键, "."与"*"为关键词, "`"为转义字符的分割键名 : 参数结构如下, 字符串代表数组的type { "type" : 值的类型 数组=验证子节点键{ 子节点键 : 同"值的类型", ... }, "@"开头字符串=正则验证, 字符串=内置类型 "int" : 整形, argv参数 { "idem" : 类型一致, 默认false, "min" : 最小值, "max" : 最大值, } "float" : 包括整型的浮点型, argv参数 { "idem" : 类型一致, 默认false, "min" : 最小值, "max" : 最大值, } "text" : 包含数字类型文本, argv参数 { "min" : 最小长度, "max" : 最大长度 } "bool" : 布尔类型, argv参数 { "format" : 转换布尔, 默认=枚举方式["ok", "true", "success", "on", "yes", "done", 1] 转true, false=强制验证布尔类型, true=弱类型为true的均转true } "date" : 时间类型, argv参数 { "format" : 格式化样式, 默认="Y-m-d H:i:s", false=不格式, "min" : 最小时间, "max" : 最大时间, } "enum" : 枚举类型, argv参数 { "list" : 枚举列表, [有效字符串, ...] "min" : 最少选项, "max" : 最多选项, "mode" : 校验类型, null(默认)=不校验, true=数组格式, false=标量格式 } "mail" : 验证邮箱, argv无参数 "call" : 回调验证, null=验证成功, 其它=提示错误, argv参数符合回调结构, 接收参数 { "check" :&引用的验证数据 } "default" : 默认值, null=必存在, 其它=默认值 "keys" : 按顺序验证键名中各"*"的类型, 如"a.*.b.*.c.*"分别对应0~2的配置 [ null为不验证, type字符串验证类型(正则或内置), {"type" => 同"值的类型", "min" => 数组最小个数, "max" => 数组最大个数}, ... ], "argv" : 对应"值的类型"提供的参数 { } } }
<?php
$data = array(
'user' => 'userName',
'captcha' => 'asdf',
'data' => array(
'mail' => 'demo@test.com',
'age' => '12'
),
'detail' => array(
'bbb' => array(
'b44' => '221'
),
'ddd' => array(
'a22' => '331'
),
)
);
$error = of_base_com_data::rule($data, array(
//文本类型切必须存在
'user' => 'text',
//文本类型自动填充
'nick' => array('type' => 'text', 'default' => '昵称'),
//文本类型限制长度
'captcha' => array('type' => 'text', 'argv' => array('min' => 3, 'max' => 3)),
//验证子类型
'data.mail' => 'mail',
//分组验证子类型
'data' => array(
'type' => array(
//强制验证数据类型
'age' => array('type' => 'int', 'argv' => array('idem' => true)),
//填充默认数据
'sex' => array('type' => 'text', 'default' => '男'),
)
),
'detail.*.*' => array(
'keys' => array(
//验证第一个"*"的键名全为"b"或"c"
array('type' => '@^[bc]+$@'),
//验证第二个"*"的键名以"a"+数字结构
array('type' => '@^a\d+$@'),
)
)
));
echo '错误: '; print_r($error);
/*
错误: Array
(
[captcha] => Val illegal, should be text, length >= 3 and <= 3 : asdf
[data.age] => Val illegal, should be int, strict type : 12
)
*/
echo '结果: '; print_r($data);
/*
结果: Array
(
[user] => userName
[captcha] => asdf
[data] => Array
(
[mail] => demo@test.com
[age] => 12
[sex] => 男
)
[nick] => 昵称
)
*/