CodeIgniter は、URL の各セグメントをコントローラーとメソッドの後のパラメーターと見なします。したがって、基本的に 7 つの変数をEmail::email_invoice()
メソッドに渡します。
ある種のエンコーディングを使用して、それを1つの変数として渡し、次のように反対側でデコードできます。
$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 配列を有効にする必要がありますが、デフォルトでは無効になっています。
更新 - 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が指摘したように、 $_GET 変数を操作すると、ディレクトリトラバーサル攻撃やその他の脆弱性にさらされる可能性があります。正しく行ったとしても、セキュリティのために追加のコードが必要になります。エンコーディングは簡単に見つけて変更できます。
ファイル パスは、おそらく 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');
}
それでおしまい。セッションは、ファイル パスを次のページ リクエストに運ぶために使用されましたが、その後はなくなりました。