我一直在试图弄清楚如何在CI中启用$ _GET。
框架似乎故意破坏$ _GET数组,并且启用它需要对核心类进行严格的修改。任何人都可以说这是为什么,以及如何克服它?
请注意,我希望保持URI解析和路由的方式,只需简单地提供$ _GET。
答案 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);
享受: - )