2020年07月10日更新
PHPでファイルをダウンロードする方法とエラーでできない時の対処法を解説!
PHPでファイルをダウンロードさせることができます。この記事ではPHPでreadfile関数を使って、どのようにファイルのダウンロードをすればいいのかを解説します。またエラーでダウンロードできないときの対処法もわかりやすく解説します。
目次
PHPでファイルをダウンロードする基本的な方法
PHPでファイルをダウンロードする方法を解説します。PHPでファイルをダウンロードするためには、ファイル形式とファイルサイズを取得したら、ファイルのリネームをして、ダウンロードするファイルを読み込むだけで大丈夫です。ファイルをダウンロードするためのプログラムは次の通りです。
$filepath = 'ファイルのパス'; $filename = 'リネーム後のファイル名'; // ファイルタイプを指定 header('Content-Type: application/force-download'); // ファイルサイズを取得し、ダウンロードの進捗を表示 header('Content-Length: '.filesize($filepath)); // ファイルのダウンロード、リネームを指示 header('Content-Disposition: attachment; filename="'.$filename.'"'); // ファイルを読み込みダウンロードを実行 readfile($filepath); |
上記のコードでファイルパスを指定してプログラムを実行すれば、すぐにダウンロードが実行されます。一部のブラウザでは確認のダイアログが表示されることもあります。
ダウンロードさせるときの注意点について
PHPでファイルをダウンロードさせるときの注意点についても解説します。
ファイルのパスの指定方法
パスの書き方には絶対パスと相対パスがあります。PHPでファイルをダウンロードする場合のパスの書き方は絶対パスがおすすめです。
ファイル名を変更する場合にはダウンロード前に記述を
ダウンロード前とダウンロード後でファイル名を変更する場合には、ダウンロード前に上記のコードの「リネーム後のファイル名」で記述しておきましょう。
ファイル容量が大きい場合にはreadfile()を使う
上記のコードではダウンロードしたファイルの読み込みに「readfile()」を使っています。こちらは「file_get_contents()」でも構いません。しかし、ファイルサイズが大きすぎて、「file_get_contents()」ではうまくダウンロードできない場合には、「readfile()」を使ってダウンロードしましょう。
PHPでファイルをダウンロードするときにエラーになったら
PHPでファイルをダウンロードするときにエラーが出てしまう場合の原因と対処法について解説します。
全てのファイル形式がPHPになってしまう場合
ダウンロードするファイルの種類は.jpgや.pngなどの画像ファイル、.mp4などの動画ファイル、PDF
ファイル、テキストファイルなどがあります。しかし、全てのファイルが.phpの拡張子に変換されてダウンロードされてしまうことがあります。
ファイル形式が変更されてしまう理由は「Content-Disposition: filename」を記述していないためです。ファイル形式を指定して適切な形式でダウンロードするためには欠かせない行なので、必ず記述しましょう。
関数エラーが出る場合
関数エラーが出る場合には、すでにヘッダーが送信されてしまっています。ヘッダーの前に「echo」や「html」などを出力してしまうと、関数エラーとなってしまうので注意しましょう。
PHPでファイルをダウンロードしてみよう!
この記事では、PHPでファイルをダウンロードする方法について解説してきました。Webサイトからユーザーにファイルをダウンロードしてもらうためには、この方法が必要です。ぜひ、この機会にダウンロードさせるためのコードの書き方も覚えましょう。