質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

4460閲覧

session エラーの対処法

chapp

総合スコア233

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/06/25 07:29

お世話になっております。

あるページ(php)にアクセスすると、以下のようなエラーが出てしまいます。

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent

実際のソースはこちら

<?php session_start(); ini_set("session.bug_compat_42", 0); include($_SERVER['DOCUMENT_ROOT'] . '/define/home_url.php'); require_once("../../../../security/attend/config.php"); if(!isset($_SESSION["manage_no"]) OR !isset($_SESSION["manage_id"])){ $header_url = $home_url."manage/"; header("Location: $header_url"); exit; }

session_start() の前に改行等の出力があると出るエラーとのことですが、上記ソースは他のファイル(同じディレクトリ内の別のファイル)でも使っており、そちらでは問題はありません。

色々と試しており、

ini_set("session.bug_compat_42", 0);

を省いても変化なし。

session_start()を省くと、header() のところでエラーが出る状況です。

他のファイルでは問題ないわけですが、そもそも上記ソースの書き方がおかしいのであればご指摘いただきたいのと、ソースに問題なければ、考えられる原因をアドバイス頂けると幸いです。

お忙しい中恐縮ですが、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ありがちなのは、
ソースファイルの1行目に「<?php」が来ていないこと、
もしくは、
ソースファイルのエンコーディングがutf-8(BOMなし)になっていないこと、
さらには、
includeやrequireしているphpで上記2つの条件に引っかかっていること、
が考えられます。

調べるために、エンコーディングが分かるテキストエディタもしくはIDEの導入、
地道な関係ファイルの点検、
が必要でしょう。

投稿2018/06/25 07:51

編集2018/06/25 07:58
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chapp

2018/06/25 11:47

早速のアドバイスをありがとうございます。 先に回答くださった、yambejpさんへのお礼でも述べましたが、UTF-8にはBOMあり、なしがあるのですね。お恥ずかしながら初めて知りました。 また、今回の策のその他の対応策など、お教えいただきありがとうございました。 何処がおかしいのか、不明だったので、本当に助かりました!
guest

0

とりあえずBOMがなしで保存していること確認してください
その上で、出力が怪しいなら

PHP

1<?PHP 2ob_start(); 3/* いろいろ処理 */ 4$content=ob_get_contents(); 5ob_end_clean(); 6var_dump($content); 7exit; 8header("Location: $header_url");

のようにheaderを出力する直前までバッファリングして
なにかゴミをはいていないか確認するとよいでしょう

投稿2018/06/25 07:41

編集2018/06/25 07:55
yambejp

総合スコア114777

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/06/25 07:42

(回答する質問間違ってますよ・・・)
yambejp

2018/06/25 07:46

今気が付きました・・・汗 とりあえず回答は保留します
chapp

2018/06/25 11:44

早速のアドバイスをありがとうございます。 調べてみたところ、BOMが付いた状態で保存されていました! UTF-8にはBOMあり、なしがあるのですね。お恥ずかしながら初めて知りました。 その他、具体的な対応策をありがとうございました!
chapp

2018/06/25 11:52

yambejpさんもm6uさんも、同様のアドバイスですし、ベストアンサーとして評価すべき立場ではありませんが、m6uさんに他の閲覧者から「高評価」が付いていたので、m6uさんをベストアンサーとし解決済みと閉めさせて頂きましたことお伝えいたします。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問