##問題
以下のコードの挙動が、ローカル開発環境と実際にファイルをエックスサーバーのサーバーにアップロードしたときとで違ってしまいます。
PHP
1$fp = fopen("count.txt", "r+"); 2 3$count = intval(fgets($fp)); 4$count++; 5fseek($fp, 0); 6fwrite($fp, $count); 7flock($fp, LOCK_UN); 8 9fclose($fp); 10echo "あなたは".$count."回目の閲覧者です";
ローカル開発環境の場合は、リロード及びスーパーリロードするたびに「〇回目」の数が1ずつカウントされていきます。
しかし、ファイルをサーバーにアップロードしてみると、スーパーリロードしたときは常に1ずつカウントされるのですが、リロードしたときは一定期間空いてからカウントされていきます。session_start()
をエラーが出ない箇所に記述しておくと、リロードするたびに1ずつカウントされていきます。
##環境
ローカル開発環境:PHP 5.6.40
エックスサーバー:PHP 7.2.17(2020年1月時点での推奨バージョン)
##質問
0. サーバーにアップロードしたときに、リロードをしても毎回カウントされないような挙動は、エックスサーバー側でそのような仕様になっているのでしょうか(例えば負荷軽減のためなど)?
0. なぜsession_start()
を記述するときとしないときで挙動が変わるのでしょうか?
0. 毎回カウントされるような挙動が望ましいのですが、それは控えた方がよろしいでしょうか?
0. (もし余裕があればお答えいただきたいです。)閲覧回数をカウントするための機能としてあのコードを作りましたが、何か問題はありますでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。