みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHP time() 更新できない

PHP time() 更新できない

time関数を使って、サイトのコントロールをしたいと考えております。

【やりたいこと】
設定年月日時分秒より前にアクセスがあった場合は、「準備中」の表示を出す。
設定を超えた場合は、「スタート画面」を表示する。

【開発環境】
OS:windows xp
PHP5.3

【サンプルコード】
if(time() < mktime(13,10,0,5,11,2013)){
 echo "準備中";
 exit();
}else{
 echo "受付スタートします。";
//以下、htmlコード記述
}

【現象】
(1)設定より前にアクセス・・・「準備中」
(2)一旦ブラウザを閉じる
(3)設定より後にアクセス・・・「準備中」

試しに現在時刻と設定年月日時分秒をechoしてみると(1)(3)共に同じタイムスタンプでした。

echo "現在時刻 = ".time()."<br />";
echo "設定時刻 = ".mktime(13,10,0,5,11,2013)."<br />";

ブラウザの更新ボタンや、キーボードのF5を1,2回押してもタイムスタンプは変わらず、表示も「準備中」のままです。
但し、F5を連打すると更新されやがて「スタート画面」を表示することができます。

ちなにみ、コードはhtmlファイル内にphpを記述しています。(.htaccessにAddHandler x-httpd-php5.3 .php .phps .htmlを設定)

クライアントのどこかでtime関数の値を保持しているのでしょうか。
時間がきたらきっちりと画面表示を切り替えしたいです。

お知恵を拝借できないでしょうか。

投稿日時 - 2013-05-11 13:26:05

QNo.8082804

すぐに回答ほしいです

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

一旦、アクセスする際に後ろに適当なパラメータをつけてみてください。

http://localhost/hoge.html?a=001

次にテストする際には、パラメータの値を変更して
http://localhost/hoge.html?a=002
のような感じで。

パラメータが異なれば、キャッシュを再利用することはないので、おそらく動作は変わるはず。
もし、それで同じ動作(時刻は変化しない)という事であれば、プログラムがおかしいと確認できます。

動作が変わって、プログラムが正しいと確認できたなら…まあ、キャッシュされるのを回避する手段を探す必要があるんですが…。
私も#1さんと同じで、一般的なブラウザでは、F5を押した場合には確実に再読み込みにいくという認識ですよね。
frameset内のページ、iframe内のページはF5じゃ再読み込みには行かない可能性が高いかな。
その場合は、ブラウザのキャッシュ削除で対応しなきゃいけないかもです。

投稿日時 - 2013-05-11 22:43:50

お礼

ご指摘の通りテストをしたら「動作が変わって、プログラムが正しいと確認できました。」
そこでブラウザのキャッシュについてもう一度調べてみたら、PHP内に開発中に記述した、
session_cache_limiter('private_no_expire');
session_start();
が残っておりこれが悪さをしていたみたいで、削除したら正しく動作しました。
色々と参考になることを教えていただきありがとうございました。

投稿日時 - 2013-05-12 14:37:33

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

> クライアントのどこかでtime関数の値を保持しているのでしょうか。

どちらかと言うと、ブラウザがページそのものをキャッシュしているんじゃないかなというのが、思い浮かぶ。
もしくはプロキシ。

大抵のブラウザは、F5で新規に取りに行くはずですが、一応 meta に no-cache とか入れてみるとどうでしょう?

投稿日時 - 2013-05-11 14:33:28

補足

早速のご回答ありがとうございます。
以下のコードをページに追記しましたが、結果は変わりませんでした。

<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="-1">

他に良い方法はありませんでしょうか。

投稿日時 - 2013-05-11 15:01:00

お礼

【回答:No.2】の通り解決しました。
色々と教えていただきありがとうございました。

投稿日時 - 2013-05-12 14:38:24