【问题标题】:Simple PHP hit counter incrementing by two?简单的PHP命中计数器增加2?
【发布时间】:2011-07-31 03:16:45
【问题描述】:

我为一个网络应用程序创建了一个计数器,但对为什么它增加了 2 感到困惑。我只是从 hitCount.txt 文件中设置了一个计数器变量,其中包含一个整数,并将预递增的值写回文件。

有问题的代码:

    // get visit count
    $wag_file = "hitCount.txt";
    $fh = fopen($wag_file, 'r+');
    $wag_visit_count = intval(file_get_contents($wag_file));
    // increment, rewrite, and display visit count
    fputs($fh, ++$wag_visit_count);
    fclose($fh);
    echo $wag_visit_count . $html_br;

【问题讨论】:

  • 尝试使用intval(trim(file_get_contents($wag_file)))
  • 我看到其他人通常使用修剪,但如果这是唯一写入它并且没有写入空格的内容,则不确定是否有必要。对此有何传统看法?
  • intval 忽略空格(包括 \r \n \t)以及数字后面的任何尾随垃圾或空格。所以你通常不需要trim
  • @mario: 好信息...我不知道我总是使用(type) 来转换值...也许我应该重新考虑:-)

标签: php increment hitcounter


【解决方案1】:

我想说最合乎逻辑的解释是你的 PHP 脚本被调用了两次。

看看浏览器调用了什么,例如使用Firebug的Net标签。

一个典型的例子是带有一个空的src<img> 标记:浏览器会认为空的src 指向当前页面——并重新加载当前的URL。


作为旁注:您应该以读/写模式打开文件并将其锁定以避免并发写入,而不是读取文件然后再将其写回 - 请参阅flock()

基本上,由于您已经在 r+ 模式下打开文件,因此您应该使用 fgets() 之类的东西来读取它——而不是 file_get_contents()

【讨论】:

  • 谢谢。我会回去让它更健壮。也需要放入文件存在检查。
  • 啊,非常好!我已将其粘贴到带有错误 CSS 链接的测试 php 模板中。现已修复。
猜你喜欢
  • 1970-01-01
  • 2011-04-15
  • 2020-08-20
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2014-02-22
  • 1970-01-01
相关资源
最近更新 更多