2013-04-09 4 views
0

사용자가 원하는 패키지를 선택하여 인보이스를 작성합니다. 코드가 파일을 확인하는 동안 pdf 파일이 생성되고 있지만 시간이 걸립니다. 파일이 존재합니다. 다음은 파일의 주소입니다.codeigniter에서 파일 경로가 검색되지 않습니다.

C:/wamp/www/proposal/file/invoice/Basic_52_60.pdf 

이것은 올바른 경로입니다. 이 경로를 다른 컨트롤러의 함수로 전달하고 있습니다. 경로

c: 

슬래시가 전송되지 않는다 : I가 email_invoice 함수 파일 경로를 테스트

redirect('email/email_invoice/'.$file); 

는 단지 C를 표시. 나는 그 문제가 정확히 무엇인지 모른다.

답변

1

CodeIgniter는 컨트롤러 및 메소드 뒤에 URL의 각 세그먼트를 매개 변수로 간주합니다. 따라서 기본적으로 Email::email_invoice() 메소드에 7 개의 변수를 전달합니다.

당신은 하나 개의 변수로 전달하고 같은 다른 측면에서 그것을 디코딩 인코딩의 일종을 사용할 수

:

$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 기본적으로.

UPDATE - 나는이 대답을 업데이트 할 것이라고 생각 의견의 일부를 바탕으로

Flashdata 사용.

$file = urlencode(base64_encode($file)); 
redirect('email/email_invoice/' . $file); 

그리고 반대편에

: 영업으로

public function email_invoice($file) { 
    $file = urldecode(base64_decode($file)); 
} 

당신을 떠나 밖으로 $ _GET 변수를 조작 할 수있는 지적 사용할 필요가 있으므로 base64_encode()는 URL을 깰 것이다 문자가 발생할 수 있습니다 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'); 
} 

. 세션은 다음 페이지 요청으로 파일 경로를 전달하는 데 사용되었지만 이후에는 사라졌습니다.

+0

2.1.3+에서'$ _GET' 액세스는 기본적으로 활성화되어 있습니다. 처음에는 비활성화 된 CI의 쿼리 문자열 기반 URL입니다. –

+0

'urlencode()'는 슬래시와 다른 URI 문자가 포함 된 URL을 통해 항목을 전달하기위한 또 다른 옵션입니다. –

+0

urlencode를 테스트 한 결과 오류가 계속 발생하여 base64_encode로갔습니다. –

관련 문제