这看起来很简单,但我想不出来。
file_get_contents('count.txt');$variable_from_file++;file_put_contents('count.txt', $variable_from_file);
file_get_contents('count.txt');
$variable_from_file++;
file_put_contents('count.txt', $variable_from_file);
字符串count.txt中只有一行数据,它是hits计数器。有没有办法做到这一点?
count.txt
t1qtbnec1#
如果你想确保没有不计数的增量(这就是CodeCaster所指的,脚本可能会加载count.txt,增加它,而另一个文件也在做同样的事情,然后保存,然后只会做一个增量,而不是正确的两个),你应该使用fopen。
fopen
$filename = "count.txt";$count = 0;$fp = fopen( $filename, 'c+' );flock( $fp, LOCK_EX );$size = filesize( $filename );if( $size > 0 ) { // Coerce to largest natural data type. $count = fread( $fp, $size ) + 0; ftruncate( $fp, 0 ); fseek( $fp, 0 );} fwrite( $fp, $count + 1 );flock( $fp, LOCK_UN );fclose( $fp );
$filename = "count.txt";
$count = 0;
$fp = fopen( $filename, 'c+' );
flock( $fp, LOCK_EX );
$size = filesize( $filename );
if( $size > 0 ) {
// Coerce to largest natural data type.
$count = fread( $fp, $size ) + 0;
ftruncate( $fp, 0 );
fseek( $fp, 0 );
}
fwrite( $fp, $count + 1 );
flock( $fp, LOCK_UN );
fclose( $fp );
字符串这将锁定文件,防止任何其他人在计数递增时对其进行阅读或写入(这意味着其他人必须等待才能递增值)。
z4bn682m2#
有一个稍微有趣的方法:
file_put_contents("count.txt",@file_get_contents("count.txt")+1);
字符串
file_get_contents读取计数器文件的内容。**@**告诉PHP忽略文件丢失的错误。返回的false将被解释为计数0。
+1将导致字符串转换为数字。
file_put_contents然后将新值作为字符串存储在计数器文件中。
在一个非常忙碌的系统上,你可能想先获得一个文件锁,以防止同时写入。操作系统的文件缓存通常使这种方法非常快。
vsdwdz233#
$variable_from_file = (int)file_get_contents('count.txt');
字符串但请注意,这不是线程安全的。
uxh89sit4#
就像你做的那样,它应该工作得很好。只要从file_get_contents()捕获数据,然后检查这两个函数是否成功。
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.');}
$var = file_get_contents('count.txt');
if ($var === false) {
die('Some error message.');
$var++;
if (file_put_contents('count.txt', $var) === false) {
x6492ojm5#
这对我来说很有效
$count = intval(file_get_contents('count.txt'));file_put_contents('count.txt', ++$count);echo file_get_contents('count.txt');
$count = intval(file_get_contents('count.txt'));
file_put_contents('count.txt', ++$count);
echo file_get_contents('count.txt');
5条答案
按热度按时间t1qtbnec1#
如果你想确保没有不计数的增量(这就是CodeCaster所指的,脚本可能会加载
count.txt
,增加它,而另一个文件也在做同样的事情,然后保存,然后只会做一个增量,而不是正确的两个),你应该使用fopen
。字符串
这将锁定文件,防止任何其他人在计数递增时对其进行阅读或写入(这意味着其他人必须等待才能递增值)。
z4bn682m2#
有一个稍微有趣的方法:
字符串
file_get_contents读取计数器文件的内容。
**@**告诉PHP忽略文件丢失的错误。返回的false将被解释为计数0。
+1将导致字符串转换为数字。
file_put_contents然后将新值作为字符串存储在计数器文件中。
在一个非常忙碌的系统上,你可能想先获得一个文件锁,以防止同时写入。操作系统的文件缓存通常使这种方法非常快。
vsdwdz233#
字符串
但请注意,这不是线程安全的。
uxh89sit4#
就像你做的那样,它应该工作得很好。只要从
file_get_contents()
捕获数据,然后检查这两个函数是否成功。字符串
x6492ojm5#
这对我来说很有效
字符串