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 }