2008年1月27日日曜日

PHPで Content-typeを指定してテキスト以外のファイルを出力する

Web上のPHPにアクセスされた時に、画像ファイル等のテキスト以外のファイルを返す方法。


header()でContent-typeを指定して、echoでバイナリデータを書き出す。
echoの前に既に出力があると、うまくいかない。(エラーメッセージが出力された場合など。)

画像ファイルを出力する場合の例
header('Content-type: image/jpeg');
echo file_get_contents($path);


ファイルをダウンロードして保存する場合にファイル名を指定したい場合は、上記に加えてContent-Dispositionを指定する。
指定しない場合はphpのファイル名がそのままダウンロードしたファイル名になる。(拡張子もそのまま.phpなどとなる。)
クライアントがWindowsの場合、ファイル名はSJISでないと文字化けする。
$fileName = mb_convert_encoding('日本語.ext', 'SJIS');
header('Content-Disposition: attachment; filename=' . $fileName );

0 件のコメント:

コメントを投稿