• 締切済み

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

  • PHP
  • 回答数2
  • ありがとう数1

みんなの回答

回答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のパラメータをそのままファイル名とし・・・」ですが、 現在主流の方法などを簡単で構いませんのでお教えいただければ助かります。

関連するQ&A

  • PHPでのファイルダウンロードについて

    初めて質問させていただきます。 社内用でファイルのアップロード・ダウンロードができるシステムを開発しています。 PCからは問題なくアップロードもダウンロードも行えていたのですが、 スマホからアクセスしてダウンロードをすると失敗してしまいます。 下記のコードを使ってます。 ファイルの種類はいろいろなので、「application/octet-stream」にしてます。 が、それぞれのファイルタイプに合わせて変更させても状況は変わりませんでした。 -- header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.$file_name.'"'); header('Content-Length: '.filesize($dl_file)); readfile($dl_file); exit; -- なにか解決策があるようでしたら、教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • IEだと・・・だめなんです

    Zipファイルに固めてダウンロードさせようとしているのですが、Firefoxだとダウンロードできて、IEだとエラーが出てこけてしまいます。 まず、Header部分が原因だと思うのですが、原因分かる方いらっしゃいますか?教えてください。 header("Content-type: application/octet-stream"); header('Content-Disposition: attachment; filename="' . zip_file_name . '"'); header("Content-length: " . filesize($zip_file_name)); readfile($zip_file_name);

    • ベストアンサー
    • PHP
  • fileのダウンロードとページ移動を続けて行うには?

    初心者です。教えて頂けますか? フォームのボタンを押したらダウンロードする様に作りました。 ボタンを押したらダウンロードとページ移動を続けて行うには どの様にすれば良いでしょうか? header( "Content-Type: application/octet-stream" ); header( "Content-Disposition: attachment; filename=$contentFilePath" ); header( 'Content-Length: '.filesize($contentFilePath) ); readfile($contentFilePath);

    • ベストアンサー
    • PHP
  • ダウンロードさせると*.phpにリネームされてしまう。

    phpでファイルのダウンローダを作成したのですが、IEで動かすと*.phpと動作しているphpのスクリプトネームにリネームされてしまいます。 FireFoxではリネームされる事無くダウンロードされるのですが、IEでの解決方法をご存知の方、どうぞご教授くださいませ。 コードは $filesize=filesize($filedldir); header ("Accept-Ranges: none"); header ("Content-Length: $filesize"); header ("Content-Type: application/octet-stream"); header ("Content-Disposition: attachment; filename=$fnames"); readfile ($filedldir); exit; といった感じです。 何がおかしいのでしょうか?

    • ベストアンサー
    • PHP
  • サーバにあるエクセルファイルをダウンロード

    サーバ内にあるエクセルファイルをダウンロード画面からsubmitして、ダウンロードしたいのですが、ダウンロードしたファイルの内容が文字化けします。またなぜかダウンロード画面のhtml内容が張り付いてたりします。 XML形式で保存したエクセルファイルは問題なく保存→表示できるのですがどうしたらいいのか原因がわかりません。 ダウンロードのソースは、以下のようになっています。 <?php $out_path = mb_convert_encoding($file_path,"SJIS","UTF-8"); $out_file_name = basename($out_path); $file_size = filesize($out_path); header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"" .     $out_file_name . "\""); header("Content-Length: ".$file_size); readfile($out_path); ?> ちなみに環境は以下のようになっています。 OS :XP 文字コード:UTF-8 framework :symfony 原因をご存知の方、ご教授よろしく御願いします。

    • 締切済み
    • PHP
  • PHPでファイルのダウンロードすると開けません。

    PHPでファイルのダウンロードすると開けません。 文書を整理するために、アップロードして、必要に応じてダウンロードする仕組みを作っています。 PDFや画像のファイルは問題ないのですが、、 word文書(エクセルもダメでした)を、以下のファイルを作って、ダウンロードし開こうとすると 「ファイル******.docxは無いように問題があるため、開けませんでした。」となります。 ※エクセルでは、「Exelで****.xlsxを開くことが出来ません。ファイル形式またはファイルか拡張子が正しくありません。ファイル拡張子とファイル形式が一致していることを確認してください」  とダイアログが出てきます。 $file="アップロードしてある実ファイル名"; $file_name="ローカルに保存する際のファイル名"; ※ファイル名を変更しなくても同じなので、そこは関係ないと思います。 header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=$file_name"); header('Content-Length: '.filesize('$file')); readfile($file); リンクを張って開くのには何の問題もありません。 <a href="http://www.******.com/images/$file">$file_name</a> ダウンロードする際に名前を変更したいので、ダウンロード用のファイルを作ってダウンロードさせようとしています。 何か、ダウンロードをする前に処理が必要なのでしょうか? よろしくご教授お願いいたします。 ※ワード、エクセルは2010を使用しています。

    • ベストアンサー
    • PHP
  • PHPによるファイルのダウンロード

    初めまして最近ちょっとはまってしまっているので分る方がいましたらアドバイスお願いします。 PHPのheader関数を使ってブラウザのダイアログを表示させるファイルのダウンロードを実装した際に、ファイルサイズが大きいものをダウンロードしているとダウンロードが完了するまで他のアクセスが応答しなくなる場合があります。 基本的には $fp = fopen($filePath, "rb"); $contents = fread($fp, filesize($filePath)); fclose($fp); $len = strlen($contents); header("Content-type: application/octet-stream"); header('Content-disposition: inline; filename="' . $filename . '"'); header("Content-length: " . $len); echo $contents; というような一般的な書き方をしています。 ファイルのサイズ的には10MB前後です。 同じような現象を解決された方がいましたらアドバイス頂けると幸いです。

    • 締切済み
    • PHP
  • PHPでバックアップ

    PHP初学者です、よろしくお願い致します。 PHPでバックアップを取りたく、次の様にしてみたのですが、実行するとファイルは正しいサイズでダウンロードされるのですが解凍すると中身は空になっています。できたファイルをFTPで別途ダウンロードして解凍してみると正常です。 $file = $storedir.$generatefile; $tstr = 'tar -C '.$upperdir. ' -czf '.$storedir.$generatefile.' '.$targetfolder; $result = system($tstr, $retval); if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); } ファイルが出来上がっていないのにダウンロードが始まってしまうからでしょうか?もしそうならファイルが出来上がってからダウンロードが始まるようにするにはどうしたら良いでしょうか? 根本的にやり方が良くないようでしたらそれもご指摘いただければありがたいです。よろしくお願いいたします。

    • 締切済み
    • PHP
  • excelファイルのダウンロード

    サーバーに配置してある、excelファイルをダウンロードさせ、 ダウンロードしたファイルを開こうとすると 「開こうとしているファイル 'xxxxxxxx' の形式は、ファイル拡張子が示す形式と異なります。 このファイルを開く前に、ファイルが破損していないこと、信頼できる発行元からのファイルであることを確認してください。 ファイルを今する開きますか? 」 というポップアップが表示され、「はい」をクリックして表示すると文字化けしています。 ソースは以下のように書いています。 どこが問題なのか、教えていただければと思います。 よろしくお願いします。 $file = excelファイルのフルパス header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=sample.xls'); header('Content-Transfer-Encoding: binary'); header('Content-Length:' . filesize($file)); header('Pragma: no-cache'); header('Cache-Control: no-cache'); readfile($file);

    • ベストアンサー
    • PHP
  • PDF ダウンロード

    お世話になってます。 PHPからのPDFダウンロードで以下の様な現象が起きておりまして、 助言を頂きたいと思います。 管理者ページからPDFを添付してお知らせを入力し、 一般ユーザはお知らせを見たりPDFをダウンロードしたりする機能があります。 開発機では、まったく問題なくアップロード・ダウンロードができるのですが、 顧客環境では正常にアップロードができていることは確認ができますが、 Windows環境でダウンロードし、Acrobat Readerで確認するとPDFが壊れているという現象が起きています。 (実際にサーバーにアップロードされたファイルを確認しておりますのでアップロードは正常です。) またそれは、全てのPDFファイルではなく1部のファイルにそのような現象が起きていて さらには、MacOS 及び iPhoneから接続しダウンロードを行い閲覧するには問題はありません。 おそらくサーバー側のApacheのどこかに何か設定があるのかと思いますが検討がつきません。 環境は、CentOS5.9 + Apache 2.2.3 PHPのコードは、以下の通りです。 header("Cache-Control: public"); header("Pragma: public"); header("Content-Type: application/octet-stream; charset=UTF8"); header('Content-Disposition: attachment; filename="'. $file_name .'"'); header('Content-Length: ' . filesize($filepath)); readfile($filepath); 以上、どなたかお分かりのかたいらっしゃいましたら助言を頂けますでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう