• ベストアンサー

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

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

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

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

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

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

edo_1972
質問者

お礼

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

その他の回答 (1)

  • t_ohta
  • ベストアンサー率38% (5085/13292)
回答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

  • webdavを使ったファイルのアップロード、ダウンロードについて

    WebDAVを使ってファイルのアップロード、ダウンロードをする方法についてお聞きします。(サーバ側:linux, クライアント側:Windowsの場合) Windowsでネットワークプレースを追加することにより、マイネットワークからwebDAVを設定したサーバのディレクトリにアクセスでき、ファイルのアップロード、ダウンロードができますが、IEなどのブラウザでURLを開いただけでは、ファイルのアップロード、ダウンロードができたりはしないのでしょうか???

  • chromeでダウンロードしたファイル

    ブラウザの下でダウンロードしたファイルのリストがありますが、 その1つをドラックアンドドロップでブラウザ上に持っていくとダウンロードがもう一度開始されます。 ダウンロードしたページではなく、違うページでも同様のことがおきるのですが、 ダウンロードしたファイルをアップロードしてしまっているということはないでしょうか? ないとは思うのですが、突然のことでびっくりしたので確認のため質問させてください。

  • ダウンロードファイルがexeではなくefwファイルになる

    XP HE SP2 ブラウザ:Firefox2.0.0.11 ソフトウェアのアップデートファイルやシェアウェアのダウンロード版をHPからダウンロードするとサーバーには.exeファイルがアップロードされているにもかかわらずダウンロードして保存すると拡張子が.efwファイルに変わり実行する事ができません。何が原因で変更されてしまうのでしょうか。以前は問題なくexeファイルで保存出来、このようになったのは最近 の事です。ブラウザのIE6でも同じです。exeファイルでダウンロード出来るようにするにはどのような事をすればよいのでしょうか。アドバイスをお願いいたします。

  • WPからダウンロードしたファイル名を指定したい

    WPにpdfやEXCELなどのファイルをアップロードしました。 そのファイルのURLを、記事にリンクを貼ってダウンロードできるようにしています。 実際に自分でダウンロードしてみたら、 ファイル名が、「783640b3dd2f96.pdf」のようになっています。 (アップロードしたときは、日本語でpdfの内容を書いたものでした) WPにアップロードしたファイルを、記事からダウンロードしたとき、 アップロードしたときのファイル名で保存できるようにするには、どのようにすれば良いでしょうか? よろしくお願いいたします。

  • ファイルのダウンロード

    小生それ程Perlに精通しておりませんので、あんまり難しいコードは理解できません。この間、ひーひー言いながら、このサイトのお力も借り、HTMLフォームからデータエントリするとWebサーバー上のテキストファイルでのデータベースに追加されていくシステムを作ることができました。そこでWebサーバー上にある、テキストファイルをローカルコンピュータにダウンロードするPerlのプログラムコードを知りたいのです。 お力添え宜しくお願いします。

    • ベストアンサー
    • Perl
  • ファイルのダウンロードが始まってしまう

    ブラウザで自分の作成したPHPファイルを指定して表示させようとすると、 その指定したPHPファイルをダウンロードしようとしてしまいます。 サーバーのOSはWinXP クライアントのOSもWinXP webサーバーはapache2.50 ブラウザはIE6 です。 どなたか理由が分かる方いらっしゃいませんでしょうか。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • ファイルのアップロードとダウンロードができるphp

    ホームページで訪問者が自分のファイルをアップロード・ダウンロードできるPHPファイルを作りたいです。 アップロード・ダウンロード時にパスワードを設定し、その人物だけしかダウンロードできないようにしたいです。 サーバは自宅なので容量・回線も大丈夫です。

    • 締切済み
    • PHP
  • DBからのCSVファイルダウンロード

    MySQLに溜めたデータをCSV形式でダウンロードしたいと思っていますが、ダウンロードしたファイルが文字化けして困っています。 PHP、DBともにEUCで作成しているのですが、プログラムの中に文字コードに関する記述が必要になるとは思うのですが、何を追加すればいいのか教えていただけますでしょうか?

    • ベストアンサー
    • PHP
  • 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
  • ファイルのアップロード

    初心者です。 ヤフオクなどで画像などのファイルをブラウザのボタンからアップロードしたいのですが、javascriptでできるものなのでしょうか?それともjavaで書くほうが一般的なのでしょうか?サンプルコードなどあれば ご紹介ください。宜しくお願いします。