MW211 EXIT

devlog
PHPダウンロード/readfile()は大きなファイルには使えないⅡ
2013年09月25日
「readfile()」で、大容量のファイルをダウンロードした場合以下のエラーとなる。
┌──────────────────────────────────────┐
│Fatal error:  Allowed memory size of xxxxxxxxx bytes exhausted              │
│                                   (tried to allocate xxxxxxxxx bytes) in …│
└──────────────────────────────────────┘

これを回避するには「while (@ob_end_clean());」で、
出力バッファリングをオフにしてやればいい。
┌──────────────────────────────────────┐
│while (@ob_end_clean());                                                    │
│readfile($大容量ファイル);                                                  │
└──────────────────────────────────────┘
「ob_end_clean()」の前に「@」を付けてエラーメッセージを抑止しているのは、
万一既に出力バッファリングがオフだとエラーとなってしまうため。
デバッグで「ob_get_level()」でその時点での状況を確認してみればよい。
「1」以上だとオンだ。

ということで、「fread()」とかを使わずにそのまま対応できるようだ。
分類:PHP