2011-02-03 4 views
1

をリダイレクト「のReadFile()」部分:PHP(またはフラッシュ)ファイルのダウンロード - セットヘッダその後、私はせずに、これを実行したい

header("Content-type: application/force-download"); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-length: ".filesize($file)); 
header("Content-disposition: attachment; filename="".basename($file)."""); 
readfile("$file"); 

基本的に私は別のURLにダウンロードを転送しようとしていますが、同時に私は "ファイル名"のようなヘッダーを設定できる必要があります。 $ファイルはPHPスクリプト(いなくても同じデータセンター)

これはさえ可能ですと同じサーバー上に保存されていないため

のReadFile($ファイル)関数は、私のためにそれをしないのだろうか? PHP経由でない場合は、おそらくFLASHでこれを行うことができますか?

答えて

1

PHPで行う唯一の方法は、PHPがリモートサーバーからファイルをダウンロードしてから、ユーザーに送信することです。あなたのサーバー上でこのオプションが有効になっている限り、実際にはreadfileをfopenラッパーをサポートしているので、これに使用することができます。

+0

感謝をダウンロードするにはページ上の非表示のiframeを使用することができ、我々が話しているファイルができたので、私は、これまでにはしたくありませんでした1GBのサイズにする必要があります。帯域を節約する必要があります。 – Gotys

1

あなたは本当にあなたがSO hereに疑問を別のバイロン・ホイットロックから引用

header("Content-disposition: attachment; filename=myfile.jpg"); 
    echo file_get_contents("http://host.tld/path/to/myfile.jpg") 

を使用することができますPHPを経由して、このようにダウンロードするファイルを取得したい場合。 彼は、このコードはファイルを一時記憶域に置くので、元のファイルのダウンロードと削除は自動的に処理されると説明しています。

あなたがPHPを使用する必要がない場合は、ファイルに答えるため

+0

file_get_contentsを使用すると、サーバーは最初に1GBファイルを元の宛先からダウンロードしてからクライアントにプッシュする必要があります。結合された帯域幅= 2 GB - これは私が避けようとしているものです。 – Gotys

+0

iframeを使用している場合、ダウンロードファイルのファイル名を変更することはできません。 – Gotys

+0

リモートサーバからダウンロードしたかったとしても、file_get_contentsが悪いです。ファイル全体をメモリにバッファリングしてから、ユーザに出力します。そのような場合には 'readfile'を使用してファイル全体をメモリにバッファリングせずにストリームするべきです。 –

関連する問題