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 ← これを追加