thinkphp3.2 I('get.id') 在 ningx代理apache下面错误 GET POST参数都变成_URL_ 解决方法 I函数
原创
©著作权归作者所有:来自51CTO博客作者wx6466f25322644的原创作品,请联系作者获取转载授权,否则将追究法律责任
thinkphp3.2 I('get.id') 在 ningx代理apache下面错误 GET POST参数都变成_URL_ 解决方法 I函数
/**
* 获取输入参数 支持过滤和默认值
* 使用方法:
* <code>
* I('id',0); 获取id参数 自动判断get或者post
* I('post.name','','htmlspecialchars'); 获取$_POST['name']
* I('get.'); 获取$_GET
* </code>
* @param string $name 变量的名称 支持指定类型
* @param mixed $default 不存在的时候默认值
* @param mixed $filter 参数过滤方法
* @return mixed
*
* yanggg 修改 匹配nginx + apache代理, get [_URL_]
*/
function I($name,$default='',$filter=null) {
if(strpos($name,'.')) { // 指定参数来源
list($method,$name) = explode('.',$name,2);
}else{ // 默认为自动判断
$method = 'param';
}
switch(strtolower($method)) {
case 'get' :
if($_GET['_URL_'] && count($_GET) == 1){
$input = $_GET['_URL_'];
for($i=0; $i < count($input); $i = $i + 2){
if($input[$i])$input[$input[$i]] = $input[$i+1];
}
}else{
$input =& $_GET;
}
//print_r($input);
break;
case 'post' :
if($_POST['_URL_'] && count($_POST) == 1){
$input = $_POST['_URL_'];
for($i=0; $i < count($input); $i = $i + 2){
if($input[$i])$input[$input[$i]] = $input[$i+1];
}
}else{
$input =& $_POST;
}
break;
case 'put' : parse_str(file_get_contents('php://input'), $input);break;
case 'param' :
switch($_SERVER['REQUEST_METHOD']) {
case 'POST':
$input = $_POST;
break;
case 'PUT':
parse_str(file_get_contents('php://input'), $input);
break;
default:
$input = $_GET;
}
if(C('VAR_URL_PARAMS') && isset($_GET[C('VAR_URL_PARAMS')])){
$input = array_merge($input,$_GET[C('VAR_URL_PARAMS')]);
}
break;
case 'request' :
if($_REQUEST['_URL_'] && count($_REQUEST) == 1){
$input = $_REQUEST['_URL_'];
for($i=0; $i < count($input); $i = $i + 2){
if($input[$i])$input[$input[$i]] = $input[$i+1];
}
}else{
$input =& $_REQUEST;
}
break;
case 'session' : $input =& $_SESSION; break;
case 'cookie' : $input =& $_COOKIE; break;
case 'server' : $input =& $_SERVER; break;
case 'globals' : $input =& $GLOBALS; break;
default:
return NULL;
}
// 全局过滤
// array_walk_recursive($input,'filter_exp');
if(C('VAR_FILTERS')) {
$_filters = explode(',',C('VAR_FILTERS'));
foreach($_filters as $_filter){
// 全局参数过滤
array_walk_recursive($input,$_filter);
}
}
print_r($input);
if(empty($name)) { // 获取全部变量
$data = $input;
$filters = isset($filter)?$filter:C('DEFAULT_FILTER');
if($filters) {
$filters = explode(',',$filters);
foreach($filters as $filter){
$data = array_map($filter,$data); // 参数过滤
}
}
}elseif(isset($input[$name])) { // 取值操作
$data = $input[$name];
$filters = isset($filter)?$filter:C('DEFAULT_FILTER');
if($filters) {
$filters = explode(',',$filters);
foreach($filters as $filter){
if(function_exists($filter)) {
$data = is_array($data)?array_map($filter,$data):$filter($data); // 参数过滤
}else{
$data = filter_var($data,is_int($filter)?$filter:filter_id($filter));
if(false === $data) {
return isset($default)?$default:NULL;
}
}
}
}
}else{ // 变量默认值
echo '没有得到数值';
$data = isset($default)?$default:NULL;
}
return $data;
}