• ベストアンサー

ファイルのダウンロード処理について

ブラウザ上から画像ファイルをアップロードするシステムをPHPで作成しました。 このシステムにダウンロード機能を追加する事になり、現在、PHPでダウンロードするにはどのようにすればいいのかをネット等で調べています。 大きいファイルだとダウンロードできない等の障害発生するみたいな記事を目にしました。 サンプルコードも一緒に掲載されていましたが、統一されていない為、戸惑っています。 ※今回、数百MBのファイルがダウンロードできるような… そこで皆さんのお知恵をお借りできないかと思い、投稿させていただきました。 どうか、ご教授をお願いします。 些細な事でも構いませんで宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5253/13739)
回答No.2

224バイトは極端に小さいですね。 タイムアウトで処理が途中で止まったのであれば、少なくとも数MBは行きます。 プログラムに構文エラー等があってダウンロード処理が始まらず、エラーメッセージが出力されているのではないでしょうか。 サーバー側のログを確認して、出力されているエラー内容を確認しましょう。 あと、ダウンロードしたファイルをテキストエディターで開いてみると、案外とエラーメッセージが書かれたテキストファイルだったりしませんか。

edo_1972
質問者

お礼

早速、回答いただきありがとうございます。 zipファイルをテキストエディタで開いたところ、エラーメッセージが出力されていました。zipファイルにエラーメッセージが出力されている事がある事がわかり、勉強になりました。 パスの指定に誤りがあり、これが原因でした。 修正して再度、実行したら問題なくダウンロードできました。またテストで1GBのzipファイルがダウンロードできるかをも確認したところ、問題なく吹ダウンロードする事ができました。 本当にありがとうございました。 本当に助かりました。 では、失礼します。

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5253/13739)
回答No.1

ダウンロードさせるだけなら、こんな感じじゃないでしょうか。 ファイルサイズが大きいと処理時間がタイムアウトする可能性がありますので、その場合は set_time_limit(0); を追加するといいでしょう。 <?php $filePath = "/var/hogehoge/"; $fileName = "hoge.jpg"; header('Content-Disposition: attachment; filename= ' . $fileName); header('Content-Type: application/download'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($filePath .$fileName)); @readfile($filePath .$fileName); ?>

edo_1972
質問者

補足

返答が遅くなってすみません。 アドバイスいただいたソースを元にサンプルを作成してダウンロードできるかを確認しました。 ブラウザでサンプルページのURLを入力して実行しましたがダメでした。テストでzipファイルを作成しました。サイズは「22.0 MB」です。ダウンロードは実行されるんですがファイルサイズを確認したら「224バイト」でした。なんか途中でダウンロードが終わってるみたいなんですけど… ※違っていたらすみません… ネットで調べたりして何とかダウンロードできるようになりました。 ダウンロードしたファイルのサイズが「22.0 MB」だったのでzipファイルを解凍してみようとしたら下記のようなエラーメッセージが表示されました。 ファイルを開くことができません。 圧縮(zip形式)フォルダ "ダウンロード先のパス名" は無効です。 何がいけないのかを調べていますがよくわかりません。 php.iniを変更したりするんでしょうか。 どうか再度、アドバイスいただけませんでしょうか。 宜しくお願いします。

関連するQ&A

専門家に質問してみよう