動かざることバグの如し

近づきたいよ 君の理想に

PHPでユーザーにファイルをダウンロード「させる」方法

最近でPDFとか動画もブラウザ内で表示されるのでファイルとして保存されることは少なくなったけど、
あえて任意のファイルをダウンロードさせたい場合はPHPで実現できる

<?php
//パス
$fpath = './a.jpg';
//ファイル名
$fname = '画像名.jpg';

header('Content-Type: application/force-download');
header('Content-Length: '.filesize($fpath));
header('Content-disposition: attachment; filename="'.$fname.'"');
readfile($fpath);

こうして例えばdownload.phpとかにしておくと、download.phpにアクセスするとa.jpgが「画像名.jpg」というファイル名でダウンロードされる。

application/force-download?

多くのサイトではapplication/force-downloadの代わりに以下が指定されている。

header('Content-Type: application/octet-stream');

ただこれだとChromeとかでうまく動作してくれないらしいので、application/force-downloadでいいのかな・・と。

参考リンク:
phpで画像ダウンロードボタンを作ってみる | 日記の間 | あかつきのお宿
Java - ブラウザにファイルを強制ダウンロードさせるContent-Type - Qiita [キータ]