这看似简单,但我无法弄明白。
file_get_contents('count.txt');
$variable_from_file++;
file_put_contents('count.txt', $variable_from_file);
count.txt
中只有一行数据,它是点击计数器。有没有办法做到这一点?
答案 0 :(得分:11)
如果你想确保没有增量不计数(这是CodeCaster所指的,脚本可能会加载count.txt,递增它,而另一个文件也是这样做,然后保存,然后只有一个增量你应该使用fopen
。
$fp = fopen('count.txt', 'c+');
flock($fp, LOCK_EX);
$count = (int)fread($fp, filesize('count.txt'));
ftruncate($fp, 0);
fseek($fp, 0);
fwrite($fp, $count + 1);
flock($fp, LOCK_UN);
fclose($fp);
这将锁定文件,防止任何其他人在计数递增时读取或写入文件(意味着其他人必须等待才能增加值)。
答案 1 :(得分:3)
$variable_from_file = (int)file_get_contents('count.txt');
但请注意,这不是线程安全的。
答案 2 :(得分:2)
正如你所做的那样它应该可以正常工作。只需从file_get_contents()
捕获数据,然后检查这两个功能是否都成功。
$var = file_get_contents('count.txt');
if ($var === false) {
die('Some error message.');
}
$var++;
if (file_put_contents('count.txt', $var) === false) {
die('Some error message.');
}
答案 3 :(得分:2)
有一种更有趣的方式:
file_put_contents("count.txt",@file_get_contents("count.txt")+1);
file_get_contents 读取计数器文件的内容。
@ 告诉PHP忽略丢失文件的错误。返回的false将被解释为0的计数。
+1将使字符串转换为数字。
file_put_contents 然后将新值作为字符串存储在计数器文件中。
在非常繁忙的系统上,您可能希望首先获取文件锁(如果操作系统允许)以防止同时写入。
答案 4 :(得分:1)
这对我有用
$count = intval(file_get_contents('count.txt'));
file_put_contents('count.txt', ++$count);
echo file_get_contents('count.txt');