[請益] 計數器在流量大的時候會歸零
遇到流量大的時候
多人同時點擊按鈕
剛好同時寫入count.php時
就會讓檔案清空
造成計數器歸零
已經嘗試加入 lock 的機制
但還是沒效!
index.php裡有個按鈕
按下去會讓count.php裡的值+1
然後一開始會檢查使用者是不是在一小時內瀏覽過
如果不是 計數器就加一
麻煩幫看一下code哪裡需要修改
謝謝
===
index.php
===
<?php
$counter = intval(file_get_contents("count.php"));
if(!isset($_COOKIE['visitor'])){
$counter++;
//一個小時後若再瀏覽 則計數器+1
$fp = fopen("count.php", "w");
if (flock($fp, LOCK_EX)){ // do an exclusive lock
//ftruncate($fp, 0);
fwrite($fp, $counter);
flock($fp, LOCK_UN); // release the lock
}
fclose($fp);
setcookie("visitor", 1, time()+3600);
}
?>
===
===
add.php
===
<?php
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
$filename = "count.php";
//把計數的值寫在 count.php 裡
//$contents = '';
$handle = fopen($filename, "r");
if (flock($handle, LOCK_SH)) {// do a read lock
(int)$contents = fread($handle, filesize($filename));
flock($handle, LOCK_UN); // release the lock
}
fclose($handle);
$fh = fopen($filename, "w+");
if(flock($fh, LOCK_EX)){ // do an exclusive lock
//ftruncate($fh, 0);
$contents++;
fputs($fh, $contents);
flock($fh, LOCK_UN); // release the lock
}
fclose($fh);
$data = array("result" => $contents);
echo json_encode($data);
exit;
?>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.142.198.86
→
03/27 00:16, , 1F
03/27 00:16, 1F
→
03/27 01:26, , 2F
03/27 01:26, 2F
→
03/27 01:27, , 3F
03/27 01:27, 3F
→
03/27 01:27, , 4F
03/27 01:27, 4F
→
03/27 01:28, , 5F
03/27 01:28, 5F
推
03/30 21:59, , 6F
03/30 21:59, 6F
→
03/30 21:59, , 7F
03/30 21:59, 7F
→
04/03 19:47, , 8F
04/03 19:47, 8F