1 /**
2 * 获取输入参数 支持过滤和默认值
3 * 使用方法:
4 * <code>
5 * I('id',0); 获取id参数 自动判断get或者post
6 * I('post.name','','htmlspecialchars'); 获取$_POST['name']
7 * I('get.'); 获取$_GET
8 * </code>
9 * @param string $name 变量的名称 支持指定类型
10 * @param mixed $default 不存在的时候默认值
11 * @param mixed $filter 参数过滤方法
12 * @param mixed $datas 要获取的额外数据源
13 * @return mixed
14 */
15 function I(
$name,
$default='',
$filter=
null,
$datas=
null) {
16 if(
strpos(
$name,'/')){
// 指定修饰符
17 list(
$name,
$type) =
explode('/',
$name,2
);
18 }
elseif(C('VAR_AUTO_STRING')){
// 默认强制转换为字符串
19 $type = 's'
;
20 }
21 if(
strpos(
$name,'.')) {
// 指定参数来源
22 list(
$method,
$name) =
explode('.',
$name,2
);
23 }
else{
// 默认为自动判断
24 $method = 'param'
;
25 }
26 switch(
strtolower(
$method)) {
27 case 'get' :
$input =&
$_GET;
break;
28 case 'post' :
$input =&
$_POST;
break;
29 case 'put' :
parse_str(
file_get_contents('php://input'),
$input);
break;
30 case 'param' :
31 switch(
$_SERVER['REQUEST_METHOD'
]) {
32 case 'POST':
33 $input =
$_POST;
34 break;
35 case 'PUT':
36 parse_str(
file_get_contents('php://input'),
$input);
37 break;
38 default:
39 $input =
$_GET;
40 }
41 break;
42 case 'path' :
43 $input =
array();
44 if(!
empty(
$_SERVER['PATH_INFO'
])){
45 $depr = C('URL_PATHINFO_DEPR'
);
46 $input =
explode(
$depr,
trim(
$_SERVER['PATH_INFO'],
$depr));
47 }
48 break;
49 case 'request' :
$input =&
$_REQUEST;
break;
50 case 'session' :
$input =&
$_SESSION;
break;
51 case 'cookie' :
$input =&
$_COOKIE;
break;
52 case 'server' :
$input =&
$_SERVER;
break;
53 case 'globals' :
$input =&
$GLOBALS;
break;
54 case 'data' :
$input =&
$datas;
break;
55 default:
56 return NULL;
57 }
58 if(''==
$name) {
// 获取全部变量
59 $data =
$input;
60 $filters =
isset(
$filter)?
$filter:C('DEFAULT_FILTER'
);
61 if(
$filters) {
62 if(
is_string(
$filters)){
63 $filters =
explode(',',
$filters);
64 }
65 foreach(
$filters as $filter){
66 $data = array_map_recursive(
$filter,
$data);
// 参数过滤
67 }
68 }
69 }
elseif(
isset(
$input[
$name])) {
// 取值操作
70 $data =
$input[
$name];
71 $filters =
isset(
$filter)?
$filter:C('DEFAULT_FILTER'
);
72 if(
$filters) {
73 if(
is_string(
$filters)){
74 $filters =
explode(',',
$filters);
75 }
elseif(
is_int(
$filters)){
76 $filters =
array(
$filters);
77 }
78
79 foreach(
$filters as $filter){
80 if(
function_exists(
$filter)) {
81 $data =
is_array(
$data) ? array_map_recursive(
$filter,
$data) :
$filter(
$data);
// 参数过滤
82 }
elseif(0===
strpos(
$filter,'/'
)){
83 // 支持正则验证
84 if(1 !==
preg_match(
$filter,(
string)
$data)){
85 return isset(
$default) ?
$default :
NULL;
86 }
87 }
else{
88 $data = filter_var(
$data,
is_int(
$filter) ?
$filter : filter_id(
$filter));
89 if(
false ===
$data) {
90 return isset(
$default) ?
$default :
NULL;
91 }
92 }
93 }
94 }
95 if(!
empty(
$type)){
96 switch(
strtolower(
$type)){
97 case 'a':
// 数组
98 $data = (
array)
$data;
99 break;
100 case 'd':
// 数字
101 $data = (int)
$data;
102 break;
103 case 'f':
// 浮点
104 $data = (
float)
$data;
105 break;
106 case 'b':
// 布尔
107 $data = (
boolean)
$data;
108 break;
109 case 's':
// 字符串
110 default:
111 $data = (
string)
$data;
112 }
113 }
114 }
else{
// 变量默认值
115 $data =
isset(
$default)?
$default:
NULL;
116 }
117 is_array(
$data) &&
array_walk_recursive(
$data,'think_filter'
);
118 return $data;
119 }
转载于:https://www.cnblogs.com/lizhaoyao/p/4303775.html
转载请注明原文地址: https://win8.8miu.com/read-1499368.html