PHP增加文本文件中的计数变量

时间:2012-06-03 23:59:30

标签: php

这看似简单,但我无法弄明白。

file_get_contents('count.txt');
$variable_from_file++;
file_put_contents('count.txt', $variable_from_file);

count.txt中只有一行数据,它是点击计数器。有没有办法做到这一点?

5 个答案:

答案 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');