为何我的PHP网站访问计数器会执行两次?
解决网站访问计数器每次触发两次的问题
嘿,我帮你排查了下这个问题——计数器每次访问加两次大概率不是PHP Bug或者主机的锅,更可能是浏览器发起了额外的请求触发了你的计数脚本。
最常见的情况就是浏览器自动请求网站的favicon.ico图标(就是标签栏上的小图标)。如果你的服务器根目录没有这个文件,浏览器会发起一次404请求,但这次请求同样会触发PHP的执行,导致你的counter.php被调用两次:一次是加载主页面index.php,一次是请求favicon.ico(而服务器可能把404请求也导向了index.php,进而再次包含counter.php)。
解决方案:
你可以通过两种方式解决这个问题:
1. 过滤非主页面的请求
修改你的counter.php,只在请求主页面index.php时才执行计数逻辑:
<?php // 只对index.php的请求计数,排除favicon等资源请求 if ($_SERVER['SCRIPT_NAME'] === '/index.php') { $countFile = 'countlog.txt'; // 处理文件不存在的情况,初始计数设为0 $count = file_exists($countFile) ? intval(file_get_contents($countFile)) : 0; $count++; echo "$count hits\n"; // 写入更新后的计数 file_put_contents($countFile, $count); } ?>
2. 添加favicon.ico文件
直接在网站根目录上传一个favicon.ico图标文件,这样浏览器就不会发起额外的404请求,自然也就不会触发两次计数了。
额外优化建议:
你原来的代码用fopen/fgets/fclose的方式有点繁琐,而且没有处理文件不存在的情况(第一次运行时countlog.txt还没创建,会报错)。上面的优化代码用file_get_contents和file_put_contents简化了逻辑,同时兼容了文件不存在的场景,更稳定可靠。
你可以先试试第一种方案,应该就能解决计数翻倍的问题啦!
内容的提问来源于stack exchange,提问作者Leutrim Osmani
相关产品推荐
相关产品推荐

