CodeIgniter將URL的每個段都視爲控制器和方法之後的參數。所以你基本上將7個變量傳遞給Email::email_invoice()
方法。
你可以使用某種編碼的把它作爲一個變量,然後如它的另一面解碼:
$file = base64_encode($file);
redirect('email/email_invoice/' . $file);
然後在Email.php:
public function email_invoice($file) {
$file = base64_decode($file);
}
或者你可以通過它作爲get參數:
redirect('email/email_invoice/?file=' . $file);
public function email_invoice() {
$file = $this->input->get('file');
}
後者需要啓用$ _GET數組,它是n ot默認。
更新 - 使用Flashdata
基於一些我以爲我會更新這個答案的評論。 base64_encode()
可能會導致將打破網址字符,所以你需要使用:
$file = urlencode(base64_encode($file));
redirect('email/email_invoice/' . $file);
而在另一邊:
public function email_invoice($file) {
$file = urldecode(base64_decode($file));
}
由於OP指出$ _ GET變量可以被操縱離開你開放至directory traversal attacks或其他漏洞。即使做得對,你也需要額外的安全代碼。編碼很容易被發現和改變。
文件路徑可能不應該在URL中進行。 POST數據也可以被操縱,即使它不太明顯。通過默默無聞的安全性根本不是安全的。更好的方法是使用flashdata。
$this->session->set_flashdata('email_invoice_pdf', $file);
redirect('email/email_invoice/');
然後在你的控制器:
public function email_invoice() {
$file = $this->session->flashdata('email_invoice_pdf');
}
就是這樣。該會話用於將文件路徑傳送到下一個頁面請求,但在此之後它不見了。
在2.1.3+'$ _GET'訪問默認啓用。它是CI最初禁用的基於查詢字符串的URL。 – 2013-04-09 19:59:52
'urlencode()'是另一個選項,用於通過URL中傳遞項目的URL,其中包含斜槓和其他URI字符。 – 2013-04-09 20:00:26
我測試urlencode,我不斷收到錯誤,所以我去base64_encode – 2013-04-09 20:20:39