2012-02-27 12 views
3

だから私はあなたがリンクをクリックしてダウンロードページを持って、それが開い/ヘッダー場所+コンテンツ配置

randomhashはデシベルで発見されたダウンロード/ダウンロード/ randomhash、私は、ダウンロードカウンタをインクリメントし、その後にリダイレクト実際のファイル/uploads/2012/file.png。

リダイレクト以外は何もしたいことをしています。私はそれが働いていない理由はわからないんだけど...ファイルの最初のロードで

header("Location: " . $row->uri); 
    header("Content-Disposition: attachment; filename=$row->name"); 

、それは(放火犯に)適切なコンテンツ-dispositionヘッダーを持っていますが、それはするファイルを要求しませんダウンロードしてください(これは正しいはずですか?)。何か案は?

レスポンスヘッダ:

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public 
Connection: Keep-Alive 
Content-Disposition: attachment; filename=promotion_photo_2.jpg 
Content-Encoding: gzip 
Content-Length: 20 
Content-Type: text/html; charset=utf-8 
Date: Mon, 27 Feb 2012 01:01:22 GMT 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Keep-Alive: timeout=5, max=100 
Location: /uploads/2012/mediakitD3CF.jpg 
Pragma: no-cache 
Server: * 
Vary: Accept-Encoding 
X-Powered-By: * 
X-UA-Compatible: IE=Edge,chrome=1 
+1

であなたが現在あなたがちょうどリダイレクトヘッダ –

答えて

4

あなたがリダイレクトするブラウザに指示同じレスポンスのContent-Dispositionヘッダーを設定しています。私の提案はありませんリダイレクト

header('Content-Disposition: attachment; filename=file-to-be-downloaded.jpg'); 
header('Content-type: image/jpeg'); // or what is relevant, ie application/octet-stream 
$fn=fopen("path-to-file/file-to-be-downloaded.jpg","r"); 
fpassthru($fn); 
+2

どのようにコンテンツ-Dispositionヘッダーを追加し、適切なヘッダを処理するダウンロードコントローラにリダイレクトする必要があり、ちょうど応答で添付ファイルをストリーミングすることですそれは〜300MBの映画ファイルと一緒に行きますか?もともと私はfile_get_contentsを使ってこれに似た何かを持っていましたが、PHPはブラウザに内容を300MBバッファリングしようとしていました...笑。私の他の考えは、条件付きでアップロードの何かのための私のApacheの設定でヘッダーを設定していたが、それを行う方法がわからない( 'RewriteCond'とヘッダーセットまたはFilesMatchを行うことはできません...) – Benno

+0

申し訳ありませんが、あなたの質問で。より大きなダウンロードについては、http://php.net/manual/en/function.fpassthru.phpの4番目のコメントを読んだり、http://pear.php.net/manual/en/package.http.http-download .intro.php –

+0

あなたは本当にfpassthruであなたのWebサーバーを通してファイル全体をプロキシすることを提案していますか?これにより、おそらくブロックされるだけでなく、割り当てられた帯域幅からサイトに差し引かれる可能性が高くなります。 – NoBugs

関連する問題