- ベストアンサー
php session_start()
いつもお世話になっております PHP session_start()について質問させていただきます。 ブラウザで確認すると以下のワーニングが表示されます。 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at ファイル名) in ファイル名 過去の質問を参考にしてphpinfo()を使用してサーバの設定を確認したところ、Session Supportはenabledとなっております。 また、余分なスペースなどが無いよう、コードを1行にまとめて試してみましたが同じ結果でした。 コードは以下のとおりです。ちなみにサーバはレンタルサーバを使用しております。 ■index.php <?php $documentroot = dirname( __FILE__) . '/'; require_once $documentroot . '../php_libs/config/config.inc.php'; require_once("Auth/Auth.php"); require_once("HTML/QuickForm.php"); require_once("HTML/QuickForm/Renderer/ArraySmarty.php"); require_once( _SMARTY_LIBS_DIR . "Smarty.class.php"); require_once( _MODULE_DIR . "build_screen.inc.php"); require_once( _MODULE_DIR . "menu.inc.php"); require_once( _MODULE_DIR . "MYDB.inc.php"); require_once( _MODULE_DIR . "sub.inc.php"); main(_MEMBER_FLG); exit; ?> ■main関数 <?php function main($systemflg){ // セッション名の設定 $sess_name = ($systemflg) ? _SYSTEM_SESSNAME : _MEMBER_SESSNAME; session_name($sess_name); // セッション開始 session_start(); ~以下省略~ どこに問題があるかお分かりの方いらっしゃいましたら、ご回答のほどよろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ワーニングの意味はお分かりですか? session_start() や header() なんかの前には何も出力するなってことですが、 include してるファイルで先に何か出力されてるとかはないですか? 一応、<?php ?>の前後の改行もそれに当たると思います。 なので最後の ?> は記述しない、なんて手法もあります。 session_start は関数の中でも別にいいと思いますが。 if (session_id()) { //処理A } else { session_start(); //処理B } みたいにすることがあるかもしれないし。
その他の回答 (4)
- exists
- ベストアンサー率62% (27/43)
解決したかな?と思ってきてみましたが、、、 で、気がついたので書いておきますが、 >require_once $documentroot . '../php_libs/config/config.inc.php'; ../ 相対参照は、ちょっと おかしくないですか?
お礼
お世話になります。 解決しました。遅くなって申し訳ありません。 includeファイルをすべて確認したところ、 不要な改行がみつかりました。 初歩的なミスですみません。 上記コード内の相対パスでの参照は、正常に 動作しております。 ご回答ありがとうございました。
- tomtom963
- ベストアンサー率19% (19/96)
>ローカル環境を整える時間がなかったため、 >ローカルでは動作させておりません。 素人の他人への迷惑になる可能性(サーバダウンなど)をかえりみないでいきなりサーバでテストをするのは最近ブームなんですか? XAMPPあたりでも使えば数分で設定も含めて終わるのに・・・
- tomtom963
- ベストアンサー率19% (19/96)
>コードは以下のとおりです。ちなみにサーバはレンタルサーバを使用しております。 そのソースはローカルテストした段階では問題は無かったのですか?
補足
お世話になります。 ローカル環境を整える時間がなかったため、 ローカルでは動作させておりません。 ただ、補足としまして、本コードは書籍からの サンプルコードをそのまま使用しておりますので、 動作はある程度保障されたものと思われます。 ちなみに書籍は 速効!図解プログラミングPHP + MySQL―Windows/Linux PHP5対応 です。
- exists
- ベストアンサー率62% (27/43)
こんにちは、 session_start()を関数の中に入れているのは、なぜでしょうか? 特に理由がなければ、そのスクリプトの最初の行に <?php session_start(); のようにするのが普通だと思います。
補足
ご意見ありがとうございます。 補足としまして、本コードは書籍のサンプルコードからの 引用になります。 私の知識不足もありまして、なぜこのコード構成になっているか までは理解できておりません。 main関数のコール箇所などを詳しく調べた上で、existsさんのご意見 を参考にさせていただきます。 ちなみに書籍は 速効!図解プログラミングPHP + MySQL―Windows/Linux PHP5対応 です。
お礼
お世話になります。 includeファイルをすべて確認したところ、 不要な改行がみつかりました。 初歩的なミスですみません。 ご回答ありがとうございました。