Php 将文本文件用于访客计数器/当不同的请求更新一个文件时会发生什么?

Php 将文本文件用于访客计数器/当不同的请求更新一个文件时会发生什么?,php,mysql,Php,Mysql,我有一个简单的访客计数器在y网站使用数据库 请忽略语法错误 $date = date('Y/m/d'); $record = $this->db->query("select * from `page_view` where `date` = '$date' "); if (empty($record)) $this->db->query(" insert into `page_view`(`date`,`

我有一个简单的访客计数器在y网站使用数据库

请忽略语法错误

    $date = date('Y/m/d');
        $record = $this->db->query("select * from `page_view` where `date` = '$date' ");

        if (empty($record))
            $this->db->query(" insert into `page_view`(`date`,`view` ) value ('$date' ,'1') ");
        else {
            $sql = "UPDATE `page_view` SET `view` = `view`+1 WHERE  `date` = '{$date}'";
            $this->db->query($sql);
            }
我每天有大约500k的访问者,这有点高,我的mysql负载也是如此。 我想知道我是否可以使用文本文件来存储每天的点击量,在一天结束时,我会将总访问量从文本文件移动/存储到数据库

至少在我识别并重写慢速查询之前

$today = date('Y/m/d');
list ($counter , $date ) = explode('#' , file_get_contents('counter.txt'));
$counter++;
if( $today == $data )
file_put_contents('counter.txt' , $counter.'#'.$date );
else
file_put_contents('counter.txt' , '1#'.$today);
我有什么理由不这样做吗?我会有什么问题吗?
当两个访问者同时想要更新这个文件时会发生什么

我相信php一次只处理一个请求,所以更新文件应该不是问题,但是为什么不使用分析或其他方法呢。为您节省一些负载并提供大量信息

可以传递file_put_contents()的第三个参数“LOCK_EX”,以“在继续编写时获取文件的独占锁”。不过,我同意@jszobody的观点,数据库将是一种可行的方法


“当两个访问者同时更新此文件时,会发生什么情况?”-->这就是为什么使用数据库而不是文本文件的原因。500k
UPDATE
查询更新一个简单的DB计数器应该不会有问题。PHP不会自动处理它,因此存在两个用户同时读取文件内容(几乎)的风险,两个用户都在递增,两个用户都在写入(最后一个写入的是wins)。thanx,那么其他用户会等到写入完成吗?这不会降低我的网页加载时间吗?@max准确地说,这再次表明你可能应该使用数据库。您可以通过将文件_put _contents()放在独立脚本中并使用异步Javascript函数调用来解决延迟问题。访问者不会在意他的背景Javascript XHR调用是否花费了.01ms、.02ms或.5ms等时间,但PHP锁会正确地记录所有访问。
int file_put_contents ( string $filename , mixed $data [, **int $flags = 0** [, resource $context ]] )

LOCK_EX  Acquire an exclusive lock on the file while proceeding to the writing.