2012-12-17 1 views
4

내 목표는 브라우저가 첨부 파일 다운로드를 발행 한 후 브라우저를 새 페이지로 리디렉션하는 것입니다.PHP 헤더 : Content-disposition : 첨부 파일, 다음 위치 : some url

header("Content-type: text/csv"); 
header("Cache-Control: no-store, no-cache"); 
header("Content-disposition: attachment;filename=file.csv"); 
// csv output logic here 

// forward to next page 
header("Location: $url"); 

가능합니까?

UPDATE : CSV의 마지막 줄은 PHP 오류 표시

위의 결과 :

헤더 정보를 수정할 수 없습니다 - 이미가 ...

보냈 헤더 CSV 로직 부분이 라인 앞에 내용을 수정했기 때문입니다. header("Location: $url");

업데이트 : 다른 방법을 시도했습니다. 작은 HTML을 에코하려면 키 라인 <meta http-equiv="refresh" content="0; url=$url" /> (물론 <html><head><body> 및 심지어 DOCTYPE도 표시됩니다)을 구성합니다. 하지만 여전히 HTML 코드는 CSV 콘텐츠에 표시됩니다.

+0

시도해 보셨습니까? 당신은 당신의 목표를 알고, 당신은 코드를 가지고 있습니다, 무슨 일이 있었습니까? – tradyblix

+0

물론 테스트를 마쳤습니다.'PHP 헤더가 이미 보내졌습니다. ' 곧 – Raptor

+0

@tradyblix 질문이 업데이트됩니다. 감사. – Raptor

답변

3

현재 코드는 사용할 수 없습니다. 브라우저가 추가 컨텐츠를 file.csv로 다운로드하도록 강제하면 최신 헤더가 무시됩니다.

그러나 메타 새로 고침 작업을 살펴보십시오. 페이지로드 사이에 지연을 추가하여 사용자가 실제로 웹 페이지를 볼 수있게하고 새로 고침 할 때 다운로드 할 파일을 보낼 수 있습니다.

나는 예제를 추가 할 수 있었으면 좋겠다. 그러나 나는 현재 울고있는 아기들에게 둘러싸여있는 열차에있다. 그리고 나는 지루하다.

CSV 파일 콘텐츠에 나타나는 메타 태그 (및 기타 HTML)를 방지하기 위해 몇 가지 $ _GET 값을 사용할 수 있습니다.

<?php 
if (isset($_GET['dl']) && $_GET['dl'] == '1') { 
header("Content-type: text/csv"); 
header("Cache-Control: no-store, no-cache"); 
header("Content-disposition: attachment;filename=file.csv"); 
// csv output logic here 
} 
else{ 
?> 
web page here, with html, head, title, body, and whatnot tags. 
In the head tag, add this: 
<meta http-equiv="refresh" content="5;url=http://my.web.site.com/download.php?dl=1"> 
<?php 
} 
?> 
+0

+1! – Flavius

+0

울고있는 아기들! 문제는 메타 코드가 CSV에 에코 드됩니다. – Raptor

+0

업데이트 된 질문을 참조하십시오. –

1

클라이언트 쪽에서 할 수 있습니다 : 새 창에서 파일 다운로드를 열고 자바 스크립트로 현재 창을 리디렉션하십시오.

+0

새로운 창이 열립니다. AJAX 콜을 의미합니까? 완료되면'window.location'에 의해 다음 페이지로 넘어 갑니까? 하지만 사용자가 자바 스크립트를 사용 중지하면 어떻게됩니까? – Raptor

+1

이와 비슷한 것 : click here. JS가 없으면 새 창에서 다운로드가 진행되며 기존 창은 계속 표시되므로 페이지에 다른 링크를 추가하여 사용자가 다음 페이지로 이동할 수 있습니다. –

+0

멋진 방법 및 멋진 대체. 아기를위한 – Raptor