LUNARAVE WEBクリエイターの仕事と休息

アクセスカウンタ

Google Maps APIの利用戦国IXAWeb技術Youtubeチャンネル

zoom RSS PHPで"session_start()"のエラーが出たときの対応

<<   作成日時 : 2011/04/08 18:19   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 5 / トラックバック 0 / コメント 0

PHPでログイン機能があるWebアプリを作る場合、ログインしたかどうかを他のページでも引き継ぐようにセッションと呼ばれる機能を利用することがあるが、そのセッションを利用しようとするとエラーが出ることがある。

エラーで指摘される箇所は「session_start()」を実行する行であり、翻訳の通りセッションを開始を指示するところだ。

下記のようなエラーが表示される。

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/html/ソースパス/実行PHPファイル.php:18) in /var/www/html/ソースパス/クラスPHPファイル.php on line 27



私の場合、これが出た背景には開発用に利用していたサーバから本運用するサーバにソースを移動させて動作確認した場合に発生した。

開発サーバで動作しているということは、開発サーバと本サーバの環境が異なるということが真っ先に疑われる。


まずは「session_start()」のエラーが出る場合の原因を調査すると、以下の2点がわかった。

 (1) ファイルの先頭に改行がある
 (2) UTF-8のBOMがある


(1)はソースファイル内に不要な文字があるとセッションが働かないということで、「session_start()」があるファイルだけでなく、関連する全てのファイルに改行が無いか確認した。

残念ながら全て1行目から開始されており、今回はこれが原因ではないようだ。


次に(2)のBOMの確認を行なう。

メモ帳など一部のテキストエディタではBOMだけでなくUTF-8すらも確認が出来ないため、確認する際には注意が必要だが、私が利用しているテキストエディタにはBOMの有無がチェックボックス形式で選択できる。

ファイルエンコードはUTF-8でBOMのチェックが外れていることから、残念ながらこちらも該当しないようだ。


上記2点はサーバ環境の違いというよりはソースの違いになるのである程度意味が無いのはわかっていたが、次に開発サーバと本サーバのPHPの設定ファイル「php.ini」を見比べる。

その中で一点、下記の箇所が違うのがわかった。

 開発サーバ : output_buffering = Off
 本サーバ  : output_buffering = 4096



エラーが出る開発サーバは「Off」になっているので、本サーバと同じく「4096」に設定する。

Webサーバを再起動後、Webアプリの動作を確認するとエラーが表示されなくなり、ログインのセッションも正常に動作するようになった。


どうやら「output_buffering」はセッションの出力にも影響しているようで、これを有効にしないとエラーになるようだ。

今回はバッファ量を指定する「4096」を入力したが、「On」でもよい。


ちなみにこの「output_buffering」はPHPがページのリダイレクトを指示するする場合も影響していた記憶があり、「Off」だとリダイレクトしなかった気がする。


「php.ini」を変更するにはサーバにアクセスする権限が必要で、もし与えれていないホスティングなどでは変更できない。

しかし「output_buffering」をはじめいくつかの項目は「.htaccess」でディレクトリごとに指定できることもあるので利用するサーバ運営会社や管理者に問い合わせてみるとよい。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 5
なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
驚いた
ナイス
ガッツ(がんばれ!)

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
URL(任意)
本 文
PHPで"session_start()"のエラーが出たときの対応 LUNARAVE WEBクリエイターの仕事と休息/BIGLOBEウェブリブログ
文字サイズ:       閉じる