2012-06-15 2 views
3

다음은 내가하려는 일입니다. 나는 또한 쉼표로 분리 된 텍스트 파일로 다운로드 할 수 있기를 원하는 일련의 보고서를 가지고있다. 나는 사람들이 단순히 파일을 만드는 것보다 결과를 출력한다고 말하는 수많은 페이지를 읽었지만, 시도 할 때 단지 페이지에 출력한다.PHP를 사용하여 텍스트 파일을 만들고 다운로드하십시오

나는 각각의 형식에서이 그들이 파일을 수출하려는 경우 그래서 게시물에 내가 확인하실 수 있습니다

Export File<input type="checkbox" name="export" value="1" /> 

을보고합니다. 그들은 내가 이런 일을하려고한다면 :

if($_POST['export'] == '1') 
{ 
    $filename = date("Instructors by DOB - ".$month) . '.txt'; 

    $content = ""; 

    # Titlte of the CSV 
    $content = "Name,Address,City,State,Zip,DOB\n"; 

    for($i=0;$i<count($instructors);$i++) 
     $content .= ""; //fill content 

    fwrite($filename, $content); 

    header("Cache-Control: public"); 
    header("Content-Description: File Transfer"); 
    header("Content-Length: ". filesize("$filename").";"); 
    header("Content-Disposition: attachment; filename=$filename"); 
    header("Content-Type: application/octet-stream; "); 
    header("Content-Transfer-Encoding: binary"); 

    readfile($filename); 
} 

기본적으로 페이지는 새로 고침되지만 다운로드를 위해 푸시되지 않습니다. 아무도 내가 누락 된 부분을 지적 할 수 있습니까?

수정 나는 완전히 명확하지 않았다고 생각합니다. 이것은 단지 파일을 만들고 다운로드하는 페이지가 아니며 보고서를 표시하는 페이지에 있습니다. 그래서 exit(); readfile 다음에 나머지 페이지가 공백으로로드됩니다. 이 페이지에도 보고서를 표시해야합니다. 나는이 페이지가 헤더 정보를 이미 보내 왔기 때문에 이것이 다운로드되지 않은 이유와 관련이있을 수도 있다고 생각한다.

+1

이에게 쓰는 후 파일을 닫으십시오 수행 한 후 스크립트를 종료해야합니다 .. 그 도움을합니까? – SuperSaiyan

+0

파일이 생성 되었습니까? 또한'readfile()'다음에 스크립트를 종료해야합니다. – nickb

+0

디스플레이와 동일한 페이지에서 다운로드 할 수있는 콘텐츠에 대한 링크를 생성하지 않는 이유는 무엇입니까? 그렇게하면 보고서를 중단없이 볼 수 있고 보고서를보기 전에 다운로드할지 여부를 먼저 결정하기보다는 보고서를 다운로드할지 여부를 선택할 수 있습니다. 사전 대비 대 반응. 이렇게하면 헤더 문제가 해결됩니다. – aowie1

답변

8

파일을 닫으려고하기 전에 내용을 쓰는 방법을 간과했습니다. 에 fwrite 수동 여기

확인 : http://php.net/manual/en/function.fwrite.php

당신이해야 할 것은 :

$filename = "yourfile.txt"; 
#... 
$f = fopen($filename, 'w'); 
fwrite($f, $content); 
fclose($f); 

하고 파일을 닫은 후

, 당신은 이제 안전하게 다운로드를 통해 보낼 수 있습니다. 당신은 정말 application/octet-stream으로 콘텐츠 형식을 설정해야 해달라고

  • :

    header("Cache-Control: public"); 
    header("Content-Description: File Transfer"); 
    header("Content-Length: ". filesize("$filename").";"); 
    header("Content-Disposition: attachment; filename=$filename"); 
    header("Content-Type: application/octet-stream; "); 
    header("Content-Transfer-Encoding: binary"); 
    
    readfile($filename); 
    

    은 몇 가지가 있습니다. 더 실제 유형을 text/plain으로 설정하지 않으시겠습니까?

  • 나는 날짜 기능을 어떻게 사용하고 싶은지 정말 모르겠다. 여기에 설명서를 참조하십시오 :
  • http://php.net/manual/en/function.date.php가로 정확하게 지적 @nickb에 의해, 당신은 readfile(..)
+0

질문을 명확히하기 위해 몇 가지 추가 정보를 입력했습니다. – Jhorra

관련 문제