• ベストアンサー

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(); ~以下省略~ どこに問題があるかお分かりの方いらっしゃいましたら、ご回答のほどよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.4

ワーニングの意味はお分かりですか? session_start() や header() なんかの前には何も出力するなってことですが、 include してるファイルで先に何か出力されてるとかはないですか? 一応、<?php ?>の前後の改行もそれに当たると思います。 なので最後の ?> は記述しない、なんて手法もあります。 session_start は関数の中でも別にいいと思いますが。 if (session_id()) {  //処理A } else {  session_start();  //処理B } みたいにすることがあるかもしれないし。

noname#77035
質問者

お礼

お世話になります。 includeファイルをすべて確認したところ、 不要な改行がみつかりました。 初歩的なミスですみません。 ご回答ありがとうございました。

その他の回答 (4)

  • exists
  • ベストアンサー率62% (27/43)
回答No.5

解決したかな?と思ってきてみましたが、、、 で、気がついたので書いておきますが、 >require_once $documentroot . '../php_libs/config/config.inc.php'; ../ 相対参照は、ちょっと おかしくないですか?

noname#77035
質問者

お礼

お世話になります。 解決しました。遅くなって申し訳ありません。 includeファイルをすべて確認したところ、 不要な改行がみつかりました。 初歩的なミスですみません。 上記コード内の相対パスでの参照は、正常に 動作しております。 ご回答ありがとうございました。

  • tomtom963
  • ベストアンサー率19% (19/96)
回答No.3

>ローカル環境を整える時間がなかったため、 >ローカルでは動作させておりません。 素人の他人への迷惑になる可能性(サーバダウンなど)をかえりみないでいきなりサーバでテストをするのは最近ブームなんですか? XAMPPあたりでも使えば数分で設定も含めて終わるのに・・・

  • tomtom963
  • ベストアンサー率19% (19/96)
回答No.2

>コードは以下のとおりです。ちなみにサーバはレンタルサーバを使用しております。 そのソースはローカルテストした段階では問題は無かったのですか?

noname#77035
質問者

補足

お世話になります。 ローカル環境を整える時間がなかったため、 ローカルでは動作させておりません。 ただ、補足としまして、本コードは書籍からの サンプルコードをそのまま使用しておりますので、 動作はある程度保障されたものと思われます。 ちなみに書籍は 速効!図解プログラミングPHP + MySQL―Windows/Linux PHP5対応 です。

  • exists
  • ベストアンサー率62% (27/43)
回答No.1

こんにちは、 session_start()を関数の中に入れているのは、なぜでしょうか? 特に理由がなければ、そのスクリプトの最初の行に <?php session_start(); のようにするのが普通だと思います。

noname#77035
質問者

補足

ご意見ありがとうございます。 補足としまして、本コードは書籍のサンプルコードからの 引用になります。 私の知識不足もありまして、なぜこのコード構成になっているか までは理解できておりません。 main関数のコール箇所などを詳しく調べた上で、existsさんのご意見 を参考にさせていただきます。 ちなみに書籍は 速効!図解プログラミングPHP + MySQL―Windows/Linux PHP5対応 です。

関連するQ&A