phpでサイトを作っておりindex.php から config.php というファイルをrequire_onceで読み込んでいる時、config.php を更新してからindex.phpにアクセスしても、304 Not Modified が返ってきてしまいます。そのため、ページの内容がキャッシュから表示されて更新されないという問題が発生しております。


本来データが更新されているので 200 が帰ってくるべきではないかと思うのですが、何か対処法はございますでしょうか。もし何か思い当たるところがあればお教えいただけますと幸いです。
よろしくお願いいたします。



引き続き自分で調べていたのですが、たとえば
index.phpからrequire_once('config.pp');
304 Not modified

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/04/27 14:02:11
  • 終了:2012/04/27 15:53:45

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4412ベストアンサー獲得回数18032012/04/27 14:17:12

ポイント172pt

さっきキャンセルした質問で書いてた情報が無いと、情報が足りないと思いますよ。
# 回答がついてない質問をキャンセルすると、内容が見られなくなっちゃいます。


で、さっきの続き。
ヘッダでは、以下のような感じになってるんでしたよね(抜粋)。

Cache-Control:post-check=0, pre-check=0, private, max-age=10800, pre-check=10800
Content-Type:text/html
Date:Fri, 27 Apr 2012 02:16:08 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Last-Modified:Tue, 24 Apr 2012 03:57:42 GMT
Pragma:no-cache


もしかしたら、Apache の設定で ExpireDefault とか指定してます?

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=13102&forum=12&start=8

ちなみに、Expiresヘッダは「Cache-Controlにmax-ageを含む内容が設定されていた」
場合、Cache-Controlの方が優位に立つようです。

リソースが分からないので、話半分だとしても、キャッシュしたくないレスポンスなのに、
max-age に値が設定されているのは、激しく、気持ち悪いです。


http://z49.org/2010/09/07/488/
Apache で有効期限の設定をしているときのレスポンスヘッダの挙動について、ハマった経験が書いてあります。
ページの真ん中くらいに書いてある、↓って、参考になりますか?

つまり、ExpiresヘッダもScript側で準備しないといけないみたいです。Apache側でこの機能を提供するmod_expiresのドキュメントによるとCache-ControlとExpiresの両方の出力に影響するとの事なのでこの挙動はそう不自然ではありません。

他1件のコメントを見る
id:n_maco2

ご協力ありがとうございました。
いただいた情報を元にレスポンスヘッダを何をしたらコレが返ってなど細かく検証を始めてみたところ、設定を行なっている箇所を色々いじっても思ったとおりにレスポンスの内容が変わらないことに気づきました。
そこで、いじっている場所以外になにか埋まっているものがあるっぽい!と思って、ライブラリをごそごそあさってみると

session_cache_limiter('private');

という記述を発見いたしました。
あれっと思ってあわててこれをコメントアウトして、想定したとおりのレスポンスヘッダが帰ってくることを確認、Cache-Controlをno-cacheにしたりExpireを0にしたりと、教えていただいたURLの内容を参考に変えたところ、無事問題が解決いたしました。

apacheの設定や、phpのheader送出内容ばかり気にしていたもので、ログイン周りで吐き出しているsession関連に気づいておりませんでした。
アドバイスいただき本当にありがとうございました、助かりました!

2012/04/27 15:58:38
id:a-kuma3

微妙に外してたわけですね(やっぱり ><
でも、解決して良かったですね。

2012/04/27 16:13:04

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13537ベストアンサー獲得回数11982012/04/27 14:05:16

ポイント30pt

requireを使ったほうがいいのでは ないでしょうか?

他1件のコメントを見る
id:taknt

require_onceは ファイルが すでに読み込まれているかどうかをチェックしているので 更新されたかどうかは 判定してないと思われますが・・・。

2012/04/27 14:28:29
id:taknt

私の思い違いでしたら スルーしてください。

2012/04/27 14:29:31
id:a-kuma3 No.2

a-kuma3回答回数4412ベストアンサー獲得回数18032012/04/27 14:17:12ここでベストアンサー

ポイント172pt

さっきキャンセルした質問で書いてた情報が無いと、情報が足りないと思いますよ。
# 回答がついてない質問をキャンセルすると、内容が見られなくなっちゃいます。


で、さっきの続き。
ヘッダでは、以下のような感じになってるんでしたよね(抜粋)。

Cache-Control:post-check=0, pre-check=0, private, max-age=10800, pre-check=10800
Content-Type:text/html
Date:Fri, 27 Apr 2012 02:16:08 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Last-Modified:Tue, 24 Apr 2012 03:57:42 GMT
Pragma:no-cache


もしかしたら、Apache の設定で ExpireDefault とか指定してます?

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=13102&forum=12&start=8

ちなみに、Expiresヘッダは「Cache-Controlにmax-ageを含む内容が設定されていた」
場合、Cache-Controlの方が優位に立つようです。

リソースが分からないので、話半分だとしても、キャッシュしたくないレスポンスなのに、
max-age に値が設定されているのは、激しく、気持ち悪いです。


http://z49.org/2010/09/07/488/
Apache で有効期限の設定をしているときのレスポンスヘッダの挙動について、ハマった経験が書いてあります。
ページの真ん中くらいに書いてある、↓って、参考になりますか?

つまり、ExpiresヘッダもScript側で準備しないといけないみたいです。Apache側でこの機能を提供するmod_expiresのドキュメントによるとCache-ControlとExpiresの両方の出力に影響するとの事なのでこの挙動はそう不自然ではありません。

他1件のコメントを見る
id:n_maco2

ご協力ありがとうございました。
いただいた情報を元にレスポンスヘッダを何をしたらコレが返ってなど細かく検証を始めてみたところ、設定を行なっている箇所を色々いじっても思ったとおりにレスポンスの内容が変わらないことに気づきました。
そこで、いじっている場所以外になにか埋まっているものがあるっぽい!と思って、ライブラリをごそごそあさってみると

session_cache_limiter('private');

という記述を発見いたしました。
あれっと思ってあわててこれをコメントアウトして、想定したとおりのレスポンスヘッダが帰ってくることを確認、Cache-Controlをno-cacheにしたりExpireを0にしたりと、教えていただいたURLの内容を参考に変えたところ、無事問題が解決いたしました。

apacheの設定や、phpのheader送出内容ばかり気にしていたもので、ログイン周りで吐き出しているsession関連に気づいておりませんでした。
アドバイスいただき本当にありがとうございました、助かりました!

2012/04/27 15:58:38
id:a-kuma3

微妙に外してたわけですね(やっぱり ><
でも、解決して良かったですね。

2012/04/27 16:13:04
  • id:a-kuma3
    # 他の回答者に向けて。

    この質問の前にキャンセルされた質問があります。
    内容は、こちらから。
    http://h.hatena.ne.jp/id/n_maco2?show=all&date=2012/04/27

    変更した config.php の内容を取り込んだレスポンスが返らない(キャッシュが効いてる)ので、困ってるんだ、ということらしく。
    config.php の読み込み方では無く、レスポンスヘッダをどう作ってるとか、Apache の設定はどうなってるんだ、とか方面の問題だと思うんです。

    # 激しく自信が無いので、他の方にも状況をさらしておきます (^^;

  • id:n_maco2
    諸々ご配慮いただきありがとうございます!
    本当に助かりました!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません