2012-05-29 21 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 –