在codeigniter中启用$ _GET

时间:2010-01-11 16:16:27

标签: php codeigniter frameworks query-string

我一直在试图弄清楚如何在CI中启用$ _GET。

框架似乎故意破坏$ _GET数组,并且启用它需要对核心类进行严格的修改。任何人都可以说这是为什么,以及如何克服它?

请注意,我希望保持URI解析和路由的方式,只需简单地提供$ _GET。

7 个答案:

答案 0 :(得分:14)

将以下库添加到应用程序库中。它会覆盖清除$ _GET数组的默认输入库的行为。它允许混合使用URI段和查询字符串。

<强>应用/库/ MY_Input.php

class MY_Input extends CI_Input 
{
    function _sanitize_globals()
    {
        $this->allow_get_array = TRUE;
        parent::_sanitize_globals();
    }
}

还需要修改一些配置设置。 uri_protocol设置需要更改为PATH_INFO和'?'需要将字符添加到URI中允许的字符列表中。

<强>应用/配置/ config.php中

$config['uri_protocol'] = "PATH_INFO";
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-?';

然后可以访问通过查询字符串传入的值。

$this->input->get('x');

答案 1 :(得分:9)

来自CodeIgniter's manual about security

  

GET,POST和COOKIE数据

     

GET数据是完全不允许的   CodeIgniter自系统使用以来   URI段而不是传统的   URL查询字符串(除非你有   您的查询字符串选项已启用   配置文件)。全局GET数组是   在系统期间由输入类取消设置   初始化。

仔细阅读forum entry for possible solutions从第1页的中途变得有趣)。

答案 2 :(得分:2)

我没有足够的声誉来发表评论,但如果您很容易切换到Phil Sturgeon's answer above,那么Codeigniter Reactor就可以了。

您可以使用$ _GET或$ this-&gt; input-&gt; get()访问查询字符串,而无需MY_Input覆盖甚至更改config.php文件。

答案 3 :(得分:1)

在服务器上,没有PATH_INFO(就像我的一样)试试这个:

parse_str(substr($_SERVER['REQUEST_URI'],strpos($_SERVER['REQUEST_URI'],'?')+1,strlen($_SERVER['REQUEST_URI'])-strpos($_SERVER['REQUEST_URI'],'?')),$_GET);

你可以这样说:

class Your_controller extends Controller {

function Your_controller()
{
    parent::Controller();

    date_default_timezone_set('Asia/Jakarta'); // set my timezone

    parse_str(substr($_SERVER['REQUEST_URI'],strpos($_SERVER['REQUEST_URI'],'?')+1,strlen($_SERVER['REQUEST_URI'])-strpos($_SERVER['REQUEST_URI'],'?')),$_GET);

}

function test()
{
    print_r($_GET); // here your $_GET vars
}

}

答案 4 :(得分:1)

我在控制器中使用这一行成功了。它基本上重新配置请求URL,而不依赖于任何特殊的CodeIgniter设置:

parse_str(array_pop(explode('?',$_SERVER['REQUEST_URI'],2)),$_GET);

答案 5 :(得分:0)

从未将$ _GET与CI一起使用,最好更改脚本逻辑以使用POST或$ this-&gt; uri-&gt; segment(),然后为我激活$ _GET参数

答案 6 :(得分:0)

来自帖子:CodeIgniter PHP Framework - Need to get query string

这是一个完整的工作示例,说明如何在Codeignitor中允许查询字符串,就像在JROX平台上一样。只需将其添加到位于以下位置的config.php文件中:

/system/application/config/config.php 

然后你可以使用$ _GET或下面的类简单地获得正常的查询字符串

$yo = $this->input->get('some_querystring', TRUE);
$yo = $_GET['some_querystring'];

以下是使其全部工作的代码:

/*
|--------------------------------------------------------------------------
| Enable Full Query Strings (allow querstrings) USE ALL CODES BELOW
|--------------------------------------------------------------------------*/

/*
|----------------------------------------------------------------------
| URI PROTOCOL
|----------------------------------------------------------------------
|
| This item determines which server global should 
| be used to retrieve the URI string.  The default 
| setting of 'AUTO' works for most servers.
| If your links do not seem to work, try one of 
| the other delicious flavors:
|
| 'AUTO'              Default - auto detects
| 'PATH_INFO'         Uses the PATH_INFO
| 'QUERY_STRING'      Uses the QUERY_STRING
| 'REQUEST_URI'   Uses the REQUEST_URI
| 'ORIG_PATH_INFO'    Uses the ORIG_PATH_INFO
|
*/
if (empty($_SERVER['PATH_INFO'])) {
    $pathInfo = $_SERVER['REQUEST_URI'];
    $index = strpos($pathInfo, '?');
    if ($index !== false) {
        $pathInfo = substr($pathInfo, 0, $index);
    }
    $_SERVER['PATH_INFO'] = $pathInfo;
}

$config['uri_protocol'] = 'PATH_INFO'; // allow all characters 

$config['permitted_uri_chars'] = ''; // allow all characters 

$config['enable_query_strings'] = TRUE; // allow all characters 

parse_str(substr(strrchr($_SERVER['REQUEST_URI'], "?"), 1), $_GET);

享受: - )