2009-04-10 5 views
11

나는 Php를 통해 서버에 텍스트 파일을 쓰고 클라이언트가 그 파일을 다운로드하게하고 싶다.클라이언트에게 파일 보내기

어떻게하면됩니까?

기본적으로 클라이언트는 서버에서 파일을 다운로드 할 수 있어야합니다.

답변

4

PHP에는 파일에 쓰기위한 매우 단순한 C와 유사한 함수가 많이 있습니다.

<?php 
// first parameter is the filename 
//second parameter is the modifier: r=read, w=write, a=append 
$handle = fopen("logs/thisFile.txt", "w"); 

$myContent = "This is my awesome string!"; 

// actually write the file contents 
fwrite($handle, $myContent); 

// close the file pointer 
fclose($handle); 
?> 

그것은 매우 기본적인 예입니다,하지만 당신은 여기 작업의 종류에 더 많은 참조를 찾을 수 있습니다 :

PHP fopen

2

그냥 http://example.com/textfile.php에 사이트에 링크를 게시 여기에 쉬운 예입니다

<?php 
header('Content-Type: text/plain'); 
print "The output text"; 
?> 
:

그리고 PHP 파일

는 다음과 같은 코드를 삽입

당신이 (데이터베이스에서) 콘텐츠 동적을 만들 수있는 그런 식으로 ... 당신이 찾고있는 하나가 아닌 경우 "콘텐츠 유형"에 대한 Google보십시오.

+0

링크가 끊어졌습니다. 고칠 수 있니? –

+5

링크 예입니다. – Zeusoflightning125

14

이미 게시 된 데이터 외에도 시도하고 싶은 헤더가 있습니다.

그것의 단지 그것의 처리하는 것을 의미하는 방법을 제안, 수 그것을 무시하고 방법을 알고있는 경우 단순히 창에 파일을 표시하도록 선택한 사용자 에이전트 :

<?php 

header('Content-Type: text/plain');   # its a text file 
header('Content-Disposition: attachment'); # hit to trigger external mechanisms instead of inbuilt 

Rfc2183보기 Content-Disposition 헤더에 대한 자세한 내용은

+2

"Content-Disposition"에 대해 몰랐습니다. 정보 주셔서 감사합니다. +1 – Calvin

1

콘텐츠 유형을 application/octet-stream으로 설정하면 브라우저는 항상 파일을 다운로드로 제공하며 어떤 유형의 파일이든간에 내부적으로 표시하지 않습니다.

<?php 
    filename="download.txt"; 
    header("Content-type: application/octet-stream"); 
    header("Content-disposition: attachment;filename=$filename"); 

    // output file content here 
?> 
+0

추신 : 일부 UA의 경우에는 약간의 동작이있을 수 있지만 RFC 사양이 아니므로 대문자 버전을 사용하는 것이 가장 좋습니다. –

+0

옥텟 스트림에 의존하는 다른 문제는 외부에서 열려고하는 응용 프로그램을 결정하기 위해 MIME을 사용할 수 없기 때문에 사용자가 저장하도록 강제하는 것입니다. –

+0

@Kent Fredric : RFC에 따르면 헤더 이름은 대소 문자를 구분하지 않습니다. – tylerl

11

사용자가 파일의 실제 URL을 보지 못하도록하려는 경우이를 수행하는 것이 가장 좋은 방법입니다.

<?php 
    $filename="download.txt"; 
    header("Content-disposition: attachment;filename=$filename"); 
    readfile($filename); 
?> 

또한 mod_access로 파일을 보호 할 수 있습니다.