首页 > Web开发 > 详细

PHP开发-ThinkPHP3.1.3中无法获取post请求中的url参数的问题

时间:2014-01-24 19:13:51      阅读:1026      评论:0      收藏:0      [点我收藏+]

ThinkPHP3.1.3中,如果提交的post请求中,如果要在url中写入参数,如下面的例子:

bubuko.com,布布扣
var url = ‘/index.php?g=Manager&m=Msgwall&a=changestatus‘;
var args = {
    ‘id‘ : id,
    ‘status‘ : status
};
$.post(url, args, function(result){
    // 返回的操作
});
bubuko.com,布布扣

因为我用的是从别处申请的虚拟服务器,并不支持PATHINFO模式,我就舍易求繁了,用传统的传参方式指定分组、模块和操作。按照一般的思路,并不想把这些信息都加到args里面,用PATHINFO模式更是这样了,但是,ThinkPHP3.1.3里面,被封装的$this->_param只能拿到id和status参数,拿不到g、m和a这些,经过搜索官网,找到了解决方案,需要找到ThinkPHP/Lib/Core/Action.class.php,把第243行修改为:

$input = array_merge($_GET,$_GET[C(‘VAR_URL_PARAMS‘)],$input);

一定要保证$input放在最后,从_param的定义来进行分析,该函数实现如下:

bubuko.com,布布扣
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;
bubuko.com,布布扣

原来的情况下,$input只是合并了原来的$input(POST或者GET方法正统的参数)和$_GET[‘_URL_‘]的参数,而$_GET[‘_URL_‘]只包含PATHINFO格式的地址中包含的参数列表,因此,传统传递方式的参数,就无法获取传统$_GET的参数,因此,使用

$input = array_merge($_GET,$_GET[C(‘VAR_URL_PARAMS‘)],$input);

替换该语句,将$input放到最后,目的是覆盖前面可能通过URL注入的同名变量,否则$input的参数就可能被URL同名参数覆盖。

PHP开发-ThinkPHP3.1.3中无法获取post请求中的url参数的问题

原文:http://www.cnblogs.com/smarterplanet/p/3531807.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!