File 在codeigniter中未检索到文件路径

File 在codeigniter中未检索到文件路径,file,codeigniter,filepath,email-attachments,File,Codeigniter,Filepath,Email Attachments,我正在根据用户所需的包选择创建发票。正在创建pdf文件(但需要一些时间),同时代码检查该文件。该文件已存在。这是文件的地址 C:/wamp/www/proposal/file/invoice/Basic_52_60.pdf 这是文件的正确路径。我正在将此路径传递给另一个控制器中的函数,如下所示: redirect('email/email_invoice/'.$file); 当我在email_invoice函数中测试文件路径时,它仅显示c: c: 路径中的斜线不会被传输。我不知道到底是什

我正在根据用户所需的包选择创建发票。正在创建pdf文件(但需要一些时间),同时代码检查该文件。该文件已存在。这是文件的地址

C:/wamp/www/proposal/file/invoice/Basic_52_60.pdf
这是文件的正确路径。我正在将此路径传递给另一个控制器中的函数,如下所示:

redirect('email/email_invoice/'.$file);
当我在email_invoice函数中测试文件路径时,它仅显示c:

c: 

路径中的斜线不会被传输。我不知道到底是什么问题。

CodeIgniter将URL的每一段都视为控制器和方法之后的一个参数。因此,您实际上是将7个变量传递给
Email::Email\u 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');
}
后者要求启用$\u GET数组,默认情况下不启用该数组

更新-使用Flashdata

根据一些评论,我想我会更新这个答案
base64_encode()
可能导致字符中断URL,因此您需要使用:

$file = urlencode(base64_encode($file));
redirect('email/email_invoice/' . $file);
另一方面:

public function email_invoice($file) {
    $file = urldecode(base64_decode($file));
}
正如OP所指出的,$\u GET变量可能会被操纵,从而使您面临漏洞或其他漏洞。即使操作正确,您也需要额外的代码来保证安全性。编码很容易被发现和改变

文件路径可能不应该在URL中四处传播。即使POST数据不太明显,也可以对其进行操作。默默无闻的安全根本不是安全。更好的方法是使用

然后在控制器中:

public function email_invoice() {
    $file = $this->session->flashdata('email_invoice_pdf');
}

就这样。会话用于将文件路径传送到下一个页面请求,但之后它就消失了。

在2.1.3+
$\u GET
中,默认情况下启用了访问。最初禁用的是CI的基于查询字符串的URL。
urlencode()
是通过URL传递包含斜杠和其他URI字符的项目的另一个选项。我测试了urlencode,但不断出现错误,因此我使用base64\u encodeLol。没错,它被解释为文字字符,并且有相同的问题。德普。不过,它对查询字符串非常有效。嘿,谢谢你J.Money。我尝试了base64_encode(),但它给出了一个错误,url不接受加密。但是get参数工作得非常出色。谢谢。顺便问一下,获取发送数据的方法是否安全?我们可以使用POST方法来实现这一点吗?
public function email_invoice() {
    $file = $this->session->flashdata('email_invoice_pdf');
}