No.404
【PHP】【HTML】PDFファイルをブラウザで開く
今回はダウンロードさせたいんじゃないんだ…
業務システムだと良くあるのが帳票をPDFファイルにして出力する機能。
普通はローカルにダウンロードさせることが多いけど、たまにchromeでクリックしたときのように「WEB画面で見たい」という要求がある。プレビューとか。
そんなときはHTTPヘッダを調整すれば万事OK。
HTTPヘッダの記述
Content-Disposition
の値によって挙動が変わる。
Content-Disposition の値 |
挙動 |
---|---|
inline | 画面内部で開く |
attachment | ダウンロードさせる |
画像ファイルをダウンロードさせる仕組みなどはこれを使っているわけだ。
例:PDFファイルをブラウザで開かせる
$filename = '/foo/bar/hoge.pdf';
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="' . basename($filename) . '"');
header('Content-Length: ' . filesize($filename));
ファイル名やファイルサイズは適当に書き換えてどうぞ。
日本語ファイル名はrawurlencode()
でエンコードしないと化けるので注意。
ファイルサイズはなくても良いけど、つけて悪いことはないので是非つけよう。
例:PNGファイルをダウンロードさせる
$filename = '/foo/bar/hoge.png';
header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
header('Content-Length: ' . filesize($filename));
よくあるアイコンファイルダウンロードなイメージ。