2012-03-06 2 views
0

내 제공자가 fopen()을 허용하지 않습니다. 그래서 저는 대신 파일을 다운로드하기 위해 컬 (curl)을 사용했습니다. 그러나 이는 서버 시간 초과 및 메모리 제한으로 인해 작은 파일 (< 100MB)에 대해서만 작동합니다. 그리고 대용량 파일 (1GB)을 다운로드해야합니다.fopen()없이 대용량 파일을 다운로드 하시겠습니까?

큰 파일을 다운로드 할 수있는 다른 방법이 있습니까?

$file = $_GET['dateiUrl']; 

//set header 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header('Content-Type: application/force-download'); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Disposition: attachment; filename=" . basename($file)); 
//curl part 


set_time_limit(0); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
curl_setopt($ch, CURLOPT_URL, $file); 
$data = curl_exec($ch); 
curl_close($ch); 

//output 
echo $data; 
+0

http://php.net/manual/en/function.ftp-get.php을 - FTP ?? –

+0

당신은 exec()'wget'을 백그라운드 작업으로 할 수 있습니다. 이것은 PHP 컨트롤에서 (대부분) 전송을 발생시킵니다. –

답변

3

당신은 작은 청크로 큰 파일을 슬라이스 할 수 있습니다 :

여기 내 코드입니다.

"Content-Range:"헤더와 HTTP response 206 ("부분 콘텐츠")을 확인하십시오.

물론 파일을 여러 조각으로 나누면 다시 조립할 필요가 있습니다. 그러나이를 수행하는 데는 많은 방법이 있으며, 그 중 아무도 서버 자원을 많이 사용하지 않아야합니다. fopen()을 사용하지 않고 관리 할 수 ​​있는지 알아 보는 것은 흥미로울 것입니다. :-) 또한

관련 항목 : Difference between Content-Range and Range headers?

+0

Thx. 내 행운을 시도 할 것입니다 그러나 이것은 쉽게 보이지 않습니다 :) –

+0

OP 호스트가'allow_url_fopen'을 꺼 놓은 상태라고 가정하고'fopen'은 로컬 파일에 대해 잘 작동한다고 생각합니다. –

+0

오 ... 예. 그럴 수 있습니다;) –

관련 문제