classファイルの最後は?>をとじない方が幸せ? ファイルダウンロードの落とし穴・・・

PHPでファイルダウンロードするクラスを用意してたんですが、いざダウンロードするとファイルが壊れる現象が起きました。

コードは、header()を適当に設定して、readfile()でファイルを送り出すだけです。
↓みたいな感じのコード

<?php
class Download {
  static public function sendfile($filepath) {
    set_time_limit(0);
    header("Content-Disposition: attachment");
    header("Content-type: application/octet-stream"); // バイナリ決め打ち・・・
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . filesize($filepath));
    readfile($filepath);
  }
}
?>

で、ダウンロードしたファイルを開いてみると、先頭に改行コードらしきものが2、3個入ってました。
なんでだろと、いろいろファイルをみていってたら、
?>のあとに改行コードが入ってる、クラスを定義したファイルを発見・・・。

こんな感じ

<?php
class Hoge {
}
?>

これを

<?php
class Hoge {
}

のように、?>を取っ払えば、確実に改行コードが入る心配もなくなりました。
ですが、?> なくていいのか・・・すごい疑問です。

なので、 ?>[EOF] となるように、書き直しました。


油断大敵でした。