使用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

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

3回复

使用flock的PHP问题-文件锁定

使用PHP flock()函数时遇到问题。 我需要编写两个不同的变量( $O和$o ),但是通常它不写第二个变量( $o ),可能是因为文件连续两次写入了。 这是代码: $seguimedia , $filename和$offerta设置正确。 changevar.php:
1回复

PHP覆盖文件问题

覆盖文件时出现问题。 我尝试了所有方法,但有时 (可能只是时间问题)似乎没有任何效果。 这是代码: $ seguimedia,$ filename和$ offerta设置正确。 changevar.php: 在这种情况下,函数changevar()必须更改文件$ fil
1回复

PHP Semaphore替代?

我正在制作一个小型在线游戏,其中(你知道什么)会有多个用户访问同一个数据库。 我的主人没有启用信号量,我无法负担其他的东西(我是一名高中生),所以我正在寻找替代方案。 经过一些研究,我遇到了几个解决方法: A)我做了几个模仿Semaphores的函数,这是我认为的最好:
1回复

使用flock()的PHP计数器问题

我的柜台有问题。 我需要对两个变量进行计数,并用|隔开,但有时计数器不会增加变量的值。 numeri.txt(计数器): 5240|593389 这是PHP脚本: 我将计数器设置为正确的值,但是3-4天后计数器仍未计数约50次展示(“ |”之后的数字) 如何修复
1回复

PHP-使用flock函数的计数器问题

我试图使用flock()函数阻止文件,以避免覆盖错误,但计数器经常重置(可能是读取问题)。 numeri.txt(计数器) frame.php(PHP文件) 有时计数器返回“ | 1”而不是“ 4895 | 533754”。 我该如何解决?
2回复

带有羊群的PHP计数器

我的柜台有问题。 我需要计算两个变量,用|分隔| ,但有时计数器不会增加变量的值。 numeri.txt(计数器): 这是PHP脚本: 我有另一个计数器,它的速度要慢很多,但可以准确地计算两个值(点击和展示)。 有时,计数器numeri.txt比其他计数器计数更多的印
1回复

使用PHP将CSV上载到MYSQL

嗨,我目前有这个php文件,它将在每次触发时将csv数据导入到mysql数据库中,但是我希望它覆盖数据库中的当前数据,而不是每次触发时都不断添加它。 这是文件减去我的详细信息:
2回复

在PHP中使用Flock进行文件访问同步

我试图了解使用PHP中的flock同步文件读/写的正确方法。 我有两个PHP脚本。 testread.php: 和testwrite.php: 现在,我运行testread.php并将其挂在那里。 然后在另一个会话中运行testwrite.php。 不出所料,fl
1回复

Apache RewriteLock替代使用PHP?

我的服务器在Plesk下运行CentOS,所以据我所知,编辑我的httpd.conf以添加Rewritelock条目不是一种选择。 也不允许在vhost.config中使用RewriteLock条目,因此我认为我一直在寻找此处所述的替代方案。 作为测试,我成功地使用了这种方法,由于我的输
3回复

如何在PHP中为每个变量值创建一个互斥方法

我需要在PHP中使用互斥方法,以便通过变量值保持排他性。 这是具有相同值的线程应该一次输入一个方法,而具有不同值的线程可以任意访问该方法。 例如,给定该方法: 例如(我需要通过apache运行): 作为第一个解决方案,我尝试使用信号量,但由于$value可能获得任何值,我