06 April 2009

(PHP) Cannot send session cache limiter - headers already sent エラー

管理を引き継いだWebサーバを保守したところ、PHPスクリプトが次のようなエラーを吐き出した。


Warning: session_start() [function.session-start]:
Cannot send session cookie - headers already sent by
(output started at /home/user/www/test/index.php:8) in
/home/user/www/test/auth.php on line 15

Warning: session_start() [function.session-start]:
Cannot send session cache limiter - headers already sent
(output started at /home/user/www/test/index.php:8) in
/home/user/www/test/auth.php on line 15

Googleで検索すると、「session_start(); 関数が呼び出される前に、コンテンツを送信してはいけない」というPHPの仕様を破っているからだそうだ。

PHPスクリプトの変更をしだすと、どこからバグが飛び出してくるかわからない、他人の作ったプログラムを不用意にいじりたくないので、回避手段が無いかと調べてみると…

./php.ini

; use cookie to handle session data
session.use_cookies = On
session.save_path = "/tmp"

; output buffer (for cookie write)
output_buffering = 4096 ← これを追加