我已经用PHP编写了一个程序来增加文本文件中的值,但我被告知,当多个用户同时使用相同的PHP脚本时,这可能会变坏。
任何人都知道如何解决这个问题或更好的方法?我只需要计算按钮的点击次数并以某种方式保存它们并将其显示在另一个页面中。
这是我的代码:
<?php
$clicks = file_get_contents("clicks.txt");
$clicks++;
$fp = fopen("clicks.txt", "w+");
fwrite($fp, $clicks);
fclose($fp);
//give the count to the user
echo "result: $clicks";
?>
答案 0 :(得分:0)
它可能变坏的原因是两件事情同时试图写入文件。您可以通过在写入文件之前锁定文件来避免这种情况。 PHP有flock
。
获取独占锁LOCK_EX
将允许您写入文件,但没有其他人。因此,如果您这样做,只有一个脚本实例可以随时写入它。如果脚本无法获取锁定,则表示其他内容正在写入文件,因此您可以再次尝试或抛出错误。
flock
上的PHP文档示例:
$fp = fopen("/tmp/lock.txt", "r+");
if (flock($fp, LOCK_EX)) { // acquire an exclusive lock
ftruncate($fp, 0); // truncate file
fwrite($fp, "Write something here\n");
fflush($fp); // flush output before releasing the lock
flock($fp, LOCK_UN); // release the lock
} else {
echo "Couldn't get the lock!";
}
fclose($fp);
对于任何现实世界的应用程序,您将使用数据库并为要监视的每个单击插入一行。您还可以存储有关每次点击的更多信息,例如时间,此人所在的页面以及您可能需要的任何其他内容。然后,您可以查询数据库并获取所有这些统计信息。你完全可以避免这个问题。
更新:阅读this page获取教程。
答案 1 :(得分:0)
使用数据库。例如,Mysql可以为您的数据库事务提供ACID保证。
答案 2 :(得分:0)
在我看来,关于计算点击次数的最佳方法的问题的答案就是使用免费的Google分析帐户。
如果您坚持自己动手,则需要将每次点击的相关信息记录到数据库中,然后将该数据转换为有趣的可查看结果。
如果你不愿意做这些事情中的任何一个,那么你的效率会急剧下降,在这种情况下,你已经使用的方法已经是最好的方法,因为你的范围很窄。
答案 3 :(得分:-1)
如果您不介意刷新页面,那么只需发送一个带有隐藏字段的表单并在数据库中增加一个数字。
如果您不想刷新页面以保存点击,那么只需向服务器发出一个AJAX请求,然后再做同样的事情 - 如果您愿意,可以保存数据库或文件。