管理を引き継いだ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 ← これを追加