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] => 昵称 ) */