PHP の readfile でファイルをダウンロードさせると破損(文字化け)する

PHP の readfile (に限らないけど)を用いて、ダウンロードのスクリプトを書いて、いざダウンロードさせるとファイルサイズが3バイトだけ大きくなりファイルが正常に復元されない症状
$filename='hoge.bin';
header("Content-Disposition: attachment; filename=\"$filename\"");
readfile($src_file);
みたいなの

筆者が経験したのには、ソースに問題が無く、スクリプトの保存に問題があり
UTF-8 でスクリプトを書いて保存する場合、ファイルの先頭にBOM(Byte Order Mark)なるものをテキストエディタが付加する
このため、ダウンロードスクリプトの出力にBOMが付加されて出力されていた

「さくらエディタ」の場合、名前を付けて保存する時に「BOM」を付加するかのチェックがあり、選択する事が可能
もちろん、SJIS等の文字コードで、上記スクリプトを作成したときは問題は出ない

コメント