2011-11-03 6 views
0

주어진 헤더 파일을 지정하지 않고 지정된 파일을 강제로 삭제할 수 있습니까? 내가 가지고있는 것은 클라이언트가 요청에 따라 다운로드로 제공하고자하는 소수의 다른 문서 및 기타 파일 유형이지만 최대한 파일 경로를 모호하게하려는 것입니다. 불행히도 나는이 파일 유형이 무엇인지 모르며 다소 역동적 인 능력을 원합니다. 나는이 조각에 대해 돈을받지 못하고있다. 그래서 나는 가능한 한 빨리 그리고 더러운 것을 찾고 있습니다. 무언가가 내가 모든 파일 형식에 대한 논리를 만들도록 강요합니다. 그래서 적절한 파일 형식을 위해 헤더를 만들 수 있습니다.PHP 강제 헤더를 적용하지 않고 파일 다운로드

이 방법이 있습니까?

+1

귀하의 요구 사항은 상호 배타적입니다. –

+1

.htaccess로이 작업을 수행 할 수 있다고 생각합니다. 당신이 무엇을 요구하고 있는지 완전히 확신하지 못합니다. – OptimusCrime

+0

일반적으로 내가하고 싶은 것은 하나의 파일로 downloads.php를 호출 할 수 있다고 가정합니다. 그런 다음 DB (대부분 서버의 파일 경로)에서 데이터를 가져 오는 모든 파일은 txt, doc, pdf, jpg 등입니다. 모든 것이 파일 유형만큼이나 중요합니다. 내가 바라는 것은 브라우저가 기본적으로보기 창에서 열리더라도 파일 유형에 상관없이 파일을 다운로드하게하는 것입니다. – chris

답변

2

내가 문제를 푸는 경우 PHP 스크립트를 사용하여 모든 유형의 파일을 쉽게 다운로드 할 수 있습니다.

첫째로, 당신은 그것을 할 수있는 몇 가지 방법을 가지고 ...

가장 안전하지 않은 : - 당신은 디렉토리가 (할 말 '파일 /') 모든 파일이 저장되는 곳. param (filename)을받는 스크립트를 작성하면 해당 디렉토리에서 파일을 찾습니다. 누구나 파일을 다운로드하려고 할 수 있고 "../"를 param으로 전달하는 서브 디렉토리에 액세스 할 수 있기 때문에 이는 안전하지 않습니다. 거기에서 구문 분석을해야합니다.

다른 옵션은 DB를 사용하고, 파일 이름을 저장하고 고유 ID에 연결합니다. 나중에 download.php? id = 1과 같은 스크립트가 있고 DB id가 1 인 파일을 다운로드합니다. 내 생각에 최고야. 트릭을 할해야

$file = "my_file.zip"; // this is what you will get from a param (i.e. ?file=my_file.zip) or from DB query 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$file"); // this is totally needed 
header("Content-Length: ".filesize($file)); 
header("Content-Type: application/force-download"); 
header("Content-Transfer-Encoding: binary"); 
readfile($file); 

:

어쨌든, 당신이 최고 당신이 생각하는대로 선택할 수 있습니다, 다운로드 대화 상자를 강제로 코드가 같은 것을해야한다.

행운을 빈다.