dポイントプレゼントキャンペーン実施中!

動画をダウンロードするとサイズ0となってしまいます。
  動画:AVI、サイズ:122MB

プログラムは
<?php
$file = "".$_GET["id"].".avi";
$file_length = filesize($file);
header("Content-Disposition: attachment; filename=$file");
header("Content-Length: $file_length");
header("Content-Type: application/octet-stream");
readfile ($file);
?>
で、ファイル名は正常に受け渡されています。
また、サイズも表示させたとこころ正常値でした。

ちなみに、サイズ19MBのAVIで試したところ、正常にダウンロード
できました。

サイズの問題だと思うのですが、対応方法をお教え下さい。
宜しくお願い致します。

A 回答 (2件)

ん~、上手くいきませんでしたか・・・


では、関係なかったかもしれません
あとは、ありきたりですがファイルのパス、ファイル名に間違いがないか、
PHPのエラーログに何かあがっていないかを確認してみるしか思いつきません

それから、前の回答で「8MBずつ」と書いてしまいましたが、「8KBずつ」の間違いでした
失礼しました


GETパラメータをファイル名に使う件に関しては、
正確にはそのまま使ってもいいですが入力値チェックは行うべきです
例えば id=../hoge というパラメータを受け取った場合、
予期しない場所のファイルを参照される恐れがあります

一番良いのは予期されるファイル名の場合だけ許可し、
それ以外のファイル名の場合は処理しないようにするのが良いかと思います
別の方法としては、idを数字だけ許可するようにして、
1だったら"one.avi"、2だったら"two.avi"というようなマッピングをするのも良いかと思います
    • good
    • 0

メモリの問題な気がします



readfile($file);

の部分を下記のように変えてやってみてはいかがでしょうか?

$fp = fopen($file, "r");
while (!feof($fp)) {
echo fread($fp, 8192);
}
fclose($fp);


ファイルから8MBずつ読んで出力を繰り返します


蛇足ですが、GET のパラメータをそのままファイル名として使うのは危険なので、
やめたほうがいいですよ
    • good
    • 0
この回答へのお礼

有難うございます。
テストしてみましたが、同様の結果となりました。

ちなみに、「GETのパラメータをそのままファイル名とし・・・」ですが、
現在主流の方法などを簡単で構いませんのでお教えいただければ助かります。

お礼日時:2011/04/18 15:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!