• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでファイルのダウンロードすると開けません。)

PHPでファイルのダウンロード方法についての質問

このQ&Aのポイント
  • PHPでファイルのダウンロード方法について質問があります。PDFや画像のファイルは問題なくダウンロードできますが、word文書やエクセルファイルをダウンロードしようとするとエラーが発生します。
  • 現在、アップロードしたファイルをダウンロードする仕組みを作成しています。しかし、word文書やエクセルファイルをダウンロードしようとすると「ファイルが存在しないため開けません」というエラーが表示されます。
  • ダウンロードする際に名前を変更したいので、ダウンロード用のファイルを作成しています。しかし、処理を行う前に何か特別な処理が必要なのか疑問です。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>header('Content-Length: '.filesize('$file')); これってシングルクォーテーションで変数囲むと展開されないので ファイルサイズが0になりませんか? filesize($file)ないしfilesize("$file") ダウンロードされたファイルサイズと本来のファイルサイズを比べてみてください またその他、ファイル名を英数のみにしてみるとか readfileのように中途半端な関数を利用せずにきちんとファイルI/Oしてやる などで改善する可能性はあります

kiyomidesuyo
質問者

お礼

ありがとうございました。 >header('Content-Length: '.filesize('$file')); は、header("Content-Length: ".filesize($file));に変更いたしました。 それから、ファイルのサイズを見ると「0」ではないのですが、 少し違っていました。 (86,993 バイト)正しいファイル (87,655 バイト)ダウンロードファイル >readfileのように中途半端な関数を利用せずにきちんとファイルI/Oしてやる これが、どのようにしたら良いか判らず調べていたら 出力用バッファをクリアするとうまく行くとありましたので試してみた所、改善いたしました! 以下の様に書き換えをいたしました。 header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=$file_name"); header("Content-Length:".filesize($file)); ob_end_clean(); readfile($file); これで、思った通りの事が実現できました。 ありがとうございました。

関連するQ&A