アクセスカウンタを作ってみたら、2ずつ増え、その原因が分かりました。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>
<?php
$counter_file = 'counter.txt';
$counter_lenght = 8;
$counter = NULL;
$fp = fopen($counter_file, 'r+');
if ($fp){
if (flock($fp, LOCK_EX)){
$counter = fgets($fp, $counter_lenght);
print('count:'.$counter);
$counter++;
print('count:'.$counter);
rewind($fp);
if (fwrite($fp, $counter) === FALSE){
print('ファイル書き込みに失敗しました');
}
flock($fp, LOCK_UN);
}
}
fclose($fp);
print('count:'.$counter);
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script>
$.ajax({
type: 'GET'
}).done(function(data, status, xhr) {
var serverDate = new Date(xhr.getResponseHeader('Date'));
$('#server').text(serverDate);
});
</script>
<p>サーバーの設定時刻<br><span id="server"></span></p>
</body>
</html>
至って普通のアクセスカウンタを設置し、jqueryを読み込ませ、ajaxを読み込ませるだけ。そうすると、アクセスカウンタが2ずつ増加した。
分かったこと
- アクセスカウンタは、読み込み時は増えない。+1足した時と書き込み時+1増える。
- jqueryとajaxの場所を移動させても、アクセスカウンタは2ずつ増える。
- ajaxを失くすと、アクセスカウンタは1ずつ増える。
- jqueryを失くすと、アクセスカウンタは1ずつ増えるが、ajaxは動かない。
- jqueryにdefer,asyncを加えると、アクセスカウンタは1ずつ増えるが、ajaxが動かない。
- jqueryにdefer,asyncを加え、ajaxをonloadイベントで呼び出すと、アクセスカウンタは2ずつ増え、ajaxは動く。
【jqueryとajaxの関係が書かれたブログ】
アクセスカウンタが2ずつ増える原因と、jqueryとajaxの関係が分かりましたが、問題の解決はできませんでした。