计算文件中的命中数。计数有时从 0 重置
Counting hits in file. Count reset sometimes from 0
我正在计算文件中每天的点击次数,使用以下代码:
// Stats
$filename = "./stats/".date("Y-m-d").".txt";
$number = file_get_contents($filename);
$f = fopen($filename, 'a');
if(flock($f, LOCK_EX | LOCK_NB)) {
ftruncate($f, 0);
fwrite($f, $number+1);
flock($f, LOCK_UN);
}
fclose($f);
我正在搜索,我正在使用 flock
阅读另一个 SO post。但是有时当天的文件会从0重新开始。不明白为什么。
我该如何解决这个问题?
谢谢!!!
请在 PHP 官方文档:http://php.net/manual/en/function.flock.php 上阅读更多关于 Flock
的信息,尤其是第一条评论。
当文件被锁定时,file_get_contents
returns 什么都没有。
让我们尝试重现您的问题:
PROCESS 1
--------------------
-- fgetcontents --
-- fopen -- PROCESS 2
-- lock -- --------------------
-- truncate -- -- fgetcontents -- => NULL (file locked)
-- put number+1 -- -- fopen --
-- unlock -- -- lock --
-- fclose -- -- truncate --
-------------------- -- put number+1 -- => 1
-- unlock --
-- fclose --
--------------------
您还可以在最后使用 fflush
刷新输出缓冲区。此函数强制将所有缓冲输出写入文件句柄指向的资源。 (http://php.net/manual/ro/function.fflush.php and Explanation of PHP's fflush() function).
我认为这就是你需要的(读取文件内容,锁定后):
$f = fopen("file.txt", "a+");
if(flock($f, LOCK_EX | LOCK_NB)) {
$number = fgets($f);
ftruncate($f, 0);
fwrite($f, $number+1);
flock($f, LOCK_UN);
}
fclose($f);
我正在计算文件中每天的点击次数,使用以下代码:
// Stats
$filename = "./stats/".date("Y-m-d").".txt";
$number = file_get_contents($filename);
$f = fopen($filename, 'a');
if(flock($f, LOCK_EX | LOCK_NB)) {
ftruncate($f, 0);
fwrite($f, $number+1);
flock($f, LOCK_UN);
}
fclose($f);
我正在搜索,我正在使用 flock
阅读另一个 SO post。但是有时当天的文件会从0重新开始。不明白为什么。
我该如何解决这个问题?
谢谢!!!
请在 PHP 官方文档:http://php.net/manual/en/function.flock.php 上阅读更多关于 Flock
的信息,尤其是第一条评论。
当文件被锁定时,file_get_contents
returns 什么都没有。
让我们尝试重现您的问题:
PROCESS 1
--------------------
-- fgetcontents --
-- fopen -- PROCESS 2
-- lock -- --------------------
-- truncate -- -- fgetcontents -- => NULL (file locked)
-- put number+1 -- -- fopen --
-- unlock -- -- lock --
-- fclose -- -- truncate --
-------------------- -- put number+1 -- => 1
-- unlock --
-- fclose --
--------------------
您还可以在最后使用 fflush
刷新输出缓冲区。此函数强制将所有缓冲输出写入文件句柄指向的资源。 (http://php.net/manual/ro/function.fflush.php and Explanation of PHP's fflush() function).
我认为这就是你需要的(读取文件内容,锁定后):
$f = fopen("file.txt", "a+");
if(flock($f, LOCK_EX | LOCK_NB)) {
$number = fgets($f);
ftruncate($f, 0);
fwrite($f, $number+1);
flock($f, LOCK_UN);
}
fclose($f);