2013-01-11 3 views
0

http://www.mysite.comhttp://www.anothersiter.com 사이트가 있습니다. 일부 파일에 대한 링크가 http://www.anothersite.com에 있습니다PHP 다운로드 위치 변경 트릭

http://www.anothersite.com/file1 
http://www.anothersite.com/file2 
... 
http://www.anothersite.com/fileN 

을 다운로드 할 수있는 사이트 방문자에 대한 http://www.mysite.com의 링크 위에 배치하고 싶습니다. 하지만 http://www.anothersite.com 대신 http://www.mysite.com에서 온 것처럼 다운로드하도록하십시오. PHP에서 그러한 시나리오를 달성 할 수 있습니까? 가능한 경우 어떻게 할 수 있습니까?

+0

"http : // www.mysite.com"에서 온 것처럼 다운로드하면 무슨 뜻인지에 따라 달라집니다. 이는 브라우저가 명시 적으로 차단할 수있는 잠재적 보안 취약성을 파헤 듭니다. – crush

+0

예, 일부 유형의 프록시 스크립트를 통해 서버를 통해 다운로드 할 예정입니다. – datasage

+0

그래서 다른 사이트의 콘텐츠에 요청을 프록시하고 싶습니까? –

답변

2

file_get_contents을 사용하여 서버를 통해 파일을 다운로드하는 간단한 다운로드 스크립트를 만들 수 있습니다. 그러나 php.ini 파일은 allow_url_fopen이 필요합니다. 그러나 코드는 매우 간단 할 수 있습니다. 예를 들어, downloaded.pdf라는 PDF 파일을 다운로드, 당신은이를 사용할 수 있습니다 : 그것은 당신의 도메인에서 다운로드 한 그대로

header('Content-type: application/pdf'); 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
echo file_get_contents('http://www.coolermaster-usa.com/upload/download/85/files/product_sheet.pdf'); 

이 제품 시트를 검색합니다 :

Local download

-

업데이트 MP3 다운로드의 경우

, 대신 Content-Disposition: inline을 사용하고 mp3를 브라우저로 스트리밍하는 방법을 고려해 볼 수 있습니다. 이와 같이 :

header('Content-type: audio/mpeg'); 
header('Content-Disposition: inline; filename="somefile.mp3"'); 
echo file_get_contents('http://example.com/somefile.mp3'); 

이렇게하면 파일이 인라인으로 재생됩니다. 사람들은 항상 CTRL + S를 눌러 다운로드하거나, 어딘가에 영구히 저장하지 않고 (세션 중에 임시 인터넷 파일에 저장) 바로들을 수 있습니다.

+0

'$ var'에'file_get_contents()'출력을 저장하고'echo $ var' 전에'header ("Content-Length :".strlen ($ var));'를 사용하면 브라우저가 다운로드 진행 상황을 추적 할 수 있습니다. –

+0

이 방법은 직접 다운로드하는 것보다 느립니다. localhost가 그것을 다운로드했기 때문입니까? – torayeff

+0

예, 서버는 먼저 파일을 저장하는 프록시 호스트의 역할을합니다. 대용량 파일을 제공하려는 경우'fsockopen '과 같은 것을 사용하여 소켓을 통해 HTTP 연결을 설정하는 것이 더 빠를 것입니다. – Oldskool