2013-05-20 7 views
0

사이트를 php로 만들었습니다. 사용자가 링크를 클릭하면 다운로드 할 수있게하려는 .kml 파일이 있지만 현재 (xml과 같은) 파일을 브라우저에 저장하십시오. .htaccess 파일을 조정하려고했지만 행운이 없습니다.브라우저를 열지 않고 파일을 다운로드하는 중입니다.

브라우저에서 열지 않고 파일을 다운로드하는 방법은 무엇입니까?

+0

잘 작동에 코드의 다음 줄을 추가 "제안"을 시도 할 수 있습니다 "파일"로 취급되어야합니다. (HTTP에는 "파일"이라는 개념이없고 머리글과 내용 만 있습니다.) 응답에서'content-disposition' 헤더를 설정하면됩니다. http://en.wikipedia.org/wiki/List_of_HTTP_header_fields – David

+0

그리고 당신이 디렉토리에서 파일을 강제로 다운로드하기 위해 php를 사용하고 있다면 그림에서 PHP를 꺼내서 .htaccess로 가져올 수 있습니다. http://stackoverflow.com/questions/3977159/set-content-disposition-header-to-attachment -only-on-a-certain-director – Orangepill

답변

2

시나리오에 따라 두 가지 접근 방식이 있습니다.

KML 파일이 정적이고 PHP없이 직접 제공하는 경우 .htaccess 파일을 적절하게 구성하고 웹 서버가 .htaccess 개의 파일을 관찰하도록 구성되어 있는지 확인해야합니다.

KML 파일이 동적이거나 PHP 스크립트에 의해 프록시되는 경우 다운로드를 강제하기 위해 올바른 헤더를 제공해야합니다. 다운로드를 장려하는 헤더는 Content-Disposition입니다 : PHP에서

header("Content-Disposition: attachment; filename=\"$filename\""); 

은 어떤 header 지시어는 공백을 포함하여 기타 콘텐츠하기 전에 제공해야한다.

당신이 당신의 서버가 .htaccess 파일을 준수하도록 구성되어 있지 및이 같은 간단한 프록시 스크립트가 작동합니다 적절하게 다음을 구성 할 수없는 것으로 확인되면 : -

<?php 
header("Content-Disposition: attachment; filename=\"myData.kml\""); 
include 'myData.kml'; 
?> 

... 교체 관련 파일 이름. 변수를 사용하여 여러 KML 파일에 대해 작동하도록 확장 할 수 있지만 보안을 위해 요청 된 모든 파일을 '포함'하지 않고 유효한 모든 요청 된 파일이 올바른지 확인하십시오.

+0

이 코드 줄은 어디에 있습니까? .htaccess에도 지시문이 필요합니까? – FluxEngine

+0

안녕 마티, 나는 희망에 따라 당신을 도울 수있는 훨씬 더 자세하게 내 답장을 마무리했다. – Purpletoucan

2

브라우저에서 강제로 파일을 다운로드하려면 HTTP Content-Disposition 헤더를 attachment으로 설정해야합니다. 이 헤더를 모든 .kml 파일과 PHP 전용 방법에 추가하도록 HTTP 서버를 구성하는 쉬운 방법이 있습니다. 당신은 사용할 수 mod_headers 필요

<Files "*.kml"> 
    Header set Content-Disposition attachment 
</Files> 

:

1. 구성 아파치는 Content-Disposition 헤더에게 아파치 설정에서 다음 또는 .kml 파일이있는 디렉토리의 내부 .htaccess 파일

장소를 추가합니다 이게 작동합니다.

2.에게 파일을 직접 브라우저 액세스를 못하게하는 것입니다 Purpletoucan 제안한 브라우저

PHP의 전용 솔루션에 파일을 보내기위한 프록시로서 PHP 스크립트를하지만, PHP 스크립트를 사용하여 라인을 통해 전송합니다. 이 방법을 사용하면 스크립트로 HTTP 헤더를 제어 할 수 있습니다

<?php 
header('Content-Disposition: attachment; filename="' . basename($path) . '"'); 
readfile($path); 
?> 

따라서, 나는 $path가 서버에있는 파일의 경로입니다 있다고 가정합니다. URL에 지정된 쿼리 매개 변수에 따라 경로를 결정하는 경우 기존 파일이 제공되고 사용자가 다운로드 할 수 있는지 그리고 올바른 디렉토리에 있는지 확인해야합니다. 요청에 지정된 문자열에 디렉토리를 접두어로 붙이더라도 다른 디렉토리의 파일에 액세스하려면 ../을 포함 할 수 있습니다.

+0

이것은 환상적인 대답이며 완벽하게 작동했다. 말 그대로 1 분 만에 해결됩니다. –

1

는 응답 내용이 브라우저에 htaccess로 파일

<FilesMatch "\.(mp3|MP3)"> 
ForceType application/octet-stream 
Header set Content-Disposition attachment 
</FilesMatch> 

그것은 나를 당신이 할 수있는 유일한 방법은

관련 문제