使用PHP或MySQL进行匹配的最佳方法是什么? 我使用PHP flock()函数遇到多个文件覆盖问题,因为它无法正常工作。 它试图在同一进程中同时写入同一文件,从而增加了相同的变量,但是变量值仅增加了一个,而不是两个,从而导致计数丢失。 我尝试使用MySQL数据库作为计数器,但与上述方法相比,它错过的点击次数更多。

这是我尝试使用flock函数的代码:

while(!$fp=fopen($filename,"a+"))
{
    usleep(100000);
}
while(!flock($fp,LOCK_EX))
{
    usleep(100000);
}
while(!include($filename))
{
    usleep(100000);
}
ftruncate($fp,0);
rewind($fp);
$$varname=$newval;
//$text="text changes depending on the $type value";
fwrite($fp,$text);
flock($fp,LOCK_UN);
fclose($fp);

就像我刚才说的那样,脚本可以正常运行,直到可以同时运行两次。

为了计算每个单次点击我该怎么办?

===============>>#1 票数:3 已采纳

如果您只需要数据库来跟踪命中数,那么最好像现在一样使用文件。 您缺少的是在释放锁定之前将文件刷新到磁盘。 http://nz.php.net/flock

while(!$fp=fopen($filename,"a+")) usleep(100000);
while(!flock($fp,LOCK_EX)) usleep(100000);
while(!include($filename)) usleep(100000);

ftruncate($fp,0);
rewind($fp);
$$varname=$newval;
//$text="text changes depending on the $type value";
fwrite($fp,$text);

fflush($fp);

flock($fp,LOCK_UN);
fclose($fp);

===============>>#2 票数:0

/***Increment charge code***/
        $fp = fopen('/var/www/html/live/vodcount.txt', 'c+');
        flock($fp, LOCK_EX);
        $count = (int)fread($fp, filesize('/var/www/html/live/vodcount.txt'));
        ftruncate($fp, 0);
        fseek($fp, 0);
        fwrite($fp, $count + 1);
        flock($fp, LOCK_UN);
        fclose($fp);
        $arr['charge_code'] = "aadata".$count;
        /***Increment charge code***/

  ask by Megadv translate from so

未解决问题?本站智能推荐: