这看起来很简单,但我无法弄清楚.
file_get_contents('count.txt');
$variable_from_file++;
file_put_contents('count.txt', $variable_from_file);
Run Code Online (Sandbox Code Playgroud)
只有一行数据count.txt,它是命中计数器.有没有办法做到这一点?
小智 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);
Run Code Online (Sandbox Code Playgroud)
这将锁定文件,防止任何其他人在计数递增时读取或写入文件(意味着其他人必须等待才能增加值).
有一个稍微有趣的方法:
file_put_contents("count.txt",@file_get_contents("count.txt")+1);
Run Code Online (Sandbox Code Playgroud)
file_get_contents读取计数器文件的内容。
@告诉 PHP 忽略丢失文件的错误。返回的 false 将被解释为计数 0。
+1 将导致字符串转换为数字。
file_put_contents然后将新值作为字符串存储在计数器文件中。
在非常繁忙的系统上,您可能需要首先获取文件锁以防止同时写入。操作系统文件缓存通常使该方法变得非常快。
$variable_from_file = (int)file_get_contents('count.txt');
Run Code Online (Sandbox Code Playgroud)
但请注意,这不是线程安全的。