2014-05-18 1 views
0

를 사용하여 브라우저에 파일을 누르면, 나는 조각이 장소 :내가 생성하고 CSV가 브라우저에 [보고서] 파일을 추진하기 위해 노력하고있어 PHP와 modx 혁명

if (file_exists($filename)) {echo 'reading file'; 
header('Content-Description: File Transfer'); 
header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename='.basename($filename)); 
//header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($filename)); 
ob_clean(); 
flush(); 
readfile($filename); 
} 

스 니펫 :

[[!downloadReport? &filename=`[[!getVariable? &var=`report`]]`]] 

하지만 다시 볼 때 나는 뒤에서 다운로드 요청을 제출할 페이지입니다.

  • 파일 내가 출구를 배치하면 올바른 파일) (다운로드합니다
  • 을 존재; 다운로드 코드 후.

나는 modx 이미 헤더를 보낸 때문에 이런 일이 생각 해요?

나는이 문제를 어떻게 해결합니까?

+0

그리고'file_exists ($ filename)'은 보안 상 매우 나쁘다. – Vasis

답변

0

클릭 가능한 링크를 사용할 수 있도록 downloadReport을 별도의 파일로 만들 수 있습니까? 그렇지 않고 csv를 빌드 할 시간이 필요한 경우 ajax + iframe 트릭을 사용할 수 있습니다. 즉 숨겨진 iframe을 페이지에 추가하고 csvgenerator.php를 src로 넣습니다.

+0

나는 성공 상태 메시지에서 클릭 할 수있는 링크를 보낼 수는 있지만 UI 관점보다는 오히려 양식 제출 버튼을 클릭하고 페이지를 새로 고치고 파일 저장 대화 상자를 팝업으로 표시하고 싶습니다. –

0

modx 세션을 닫는 것을 잊었을 때. 그냥 readfile 후이 코드를 추가

@session_write_close(); 
exit; 

echo 'reading file'; 

ob_clean(); 
flush(); 

은 불필요 -를 제거합니다.

+0

출구를 사용하는 동안 페이지에서 다른 작업을 수행 할 수 없게됩니다. - [보고서를 생성하는 데 사용한 양식]을 지울 수 없으며 성공/실패 메시지를 보낼 수 없습니다. –

+0

자바 스크립트를 사용하여 양식을 지우고 종료하기 전에이 스 니펫에서 이메일을 보낼 수 있습니다 - http : //rtfm.modx .com/revolution/2.x/development-in-modx/advanced-development/modx-services/modmail – Vasis

관련 문제