2012-03-06 11 views
0

私のプロバイダはfopen()を許可していません。だから私はこれを使わずにファイルをダウンロードした。しかし、サーバーのタイムアウトとメモリの制限のために、これは小さいファイル(< 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

ああ...ええ。そうかもしれない;) –

関連する問題