2012-05-29 18 views
0

,我使用返回用户的URL像这样的第三方服务:从正常的PHP文件中包含codeigniter?

site.com/something.php?id=XXX&something=abc.... 

因此,我需要能够接受$_GET参数只有一个网站的一部分。

有没有办法把一个文件CodeIgniter的应用程序目录之外,这将做这样的事情:

<? 
$id = $_GET['id']; 
$something = $_GET['something']; 

//Do something so codeigniter thinks this is a request to site.com/process/$id/$something 

require('index.php'); //codeigniter's index.php file 
?> 

我记得使用putenv()在过去实现这一点,但不记得细节。

回答

1

不确定运行putenv,但是如果损坏程度更差,你可以通过爆炸$_SERVER['QUERY_STRING']

获取Get GET数组中的内容并不需要启用,你仍然可以访问。

0

尽量只使用重定向:

<?php 
$id = $_GET['id']; 
$something = $_GET['something']; 
header('Location: http://www.site.com/' . $id . '/' . $something); 

只要初始something.php请求直接发到该文件,而不是index.php,再笨也不会跑(实际上,这将取决于你的.htaccess [或同等文件],所以你可能需要调整它)。

这是我认为可以做到的最安全的方式,您不必分解CodeIgniter的程序流或在应用程序中启用查询字符串,这可能是不安全的。

+0

不能这样做,我需要可靠的访问HTTP引用和其他的东西。我需要直接包含index.php文件 –

+0

在这种情况下,您可能可以执行'require('index.php')'并使用上面提到的GET数组,但我认为您不能将这些值作为控制器名称和参数传递给您的问题表示您希望的方式。 –

+0

我很确定我在过去做过,我用'putenv()'把'controller/method'放在某处做索引。PHP认为这是一个直接的URL访问该控制器,但我不记得我在'putenv'中使用了什么设置。 –

0

也许我误解了你的架构,但你不能只为GET codeigniter ..?

$config['allow_get_array']在docs:

http://codeigniter.com/user_guide/libraries/input.html

而看到同一个页面上$this->input->get() ..

+0

我需要启用它仅用于一个功能,并保持禁用其他功能 –

+0

为什么它很重要如果它始终启用? – Ben

+1

在codeigniter中启用GET数组是一个非常糟糕的主意。它会打破其他许多事情。 – Rooster

0

尝试

$this->config->set_item("allow_get_array",TRUE); 

在控制器的构造函数parent::__construct();之前。

当调用新的 控制器时,会自动调用安全过滤功能。它执行以下操作:

如果$ config ['allow_get_array']为FALSE(默认值为TRUE),将销毁全局GET数组。

+0

无法运行,需要在'$ this-> config'之前执行parent :: constructor –