• 締切済み

動画をダウンロードするとサイズ0で終了する

動画をダウンロードするとサイズ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で試したところ、正常にダウンロード できました。 サイズの問題だと思うのですが、対応方法をお教え下さい。 宜しくお願い致します。

みんなの回答

回答No.2

ん~、上手くいきませんでしたか・・・ では、関係なかったかもしれません あとは、ありきたりですがファイルのパス、ファイル名に間違いがないか、 PHPのエラーログに何かあがっていないかを確認してみるしか思いつきません それから、前の回答で「8MBずつ」と書いてしまいましたが、「8KBずつ」の間違いでした 失礼しました GETパラメータをファイル名に使う件に関しては、 正確にはそのまま使ってもいいですが入力値チェックは行うべきです 例えば id=../hoge というパラメータを受け取った場合、 予期しない場所のファイルを参照される恐れがあります 一番良いのは予期されるファイル名の場合だけ許可し、 それ以外のファイル名の場合は処理しないようにするのが良いかと思います 別の方法としては、idを数字だけ許可するようにして、 1だったら"one.avi"、2だったら"two.avi"というようなマッピングをするのも良いかと思います

回答No.1

メモリの問題な気がします readfile($file); の部分を下記のように変えてやってみてはいかがでしょうか? $fp = fopen($file, "r"); while (!feof($fp)) { echo fread($fp, 8192); } fclose($fp); ファイルから8MBずつ読んで出力を繰り返します 蛇足ですが、GET のパラメータをそのままファイル名として使うのは危険なので、 やめたほうがいいですよ

ryo_hiro
質問者

お礼

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