[英]Make a hit counter using PHP
使用PHP或MySQL進行匹配的最佳方法是什么? 我使用PHP flock()
函數遇到多個文件覆蓋問題,因為它無法正常工作。 它試圖在同一進程中同時寫入同一文件,從而增加了相同的變量,但是變量值僅增加了一個,而不是兩個,從而導致計數丟失。 我嘗試使用MySQL數據庫作為計數器,但與上述方法相比,它錯過的點擊次數更多。
這是我嘗試使用flock
函數的代碼:
while(!$fp=fopen($filename,"a+"))
{
usleep(100000);
}
while(!flock($fp,LOCK_EX))
{
usleep(100000);
}
while(!include($filename))
{
usleep(100000);
}
ftruncate($fp,0);
rewind($fp);
$$varname=$newval;
//$text="text changes depending on the $type value";
fwrite($fp,$text);
flock($fp,LOCK_UN);
fclose($fp);
就像我剛才說的那樣,腳本可以正常運行,直到可以同時運行兩次。
為了計算每個單次點擊我該怎么辦?
如果您只需要數據庫來跟蹤命中數,那么最好像現在一樣使用文件。 您缺少的是在釋放鎖定之前將文件刷新到磁盤。 見http://nz.php.net/flock
while(!$fp=fopen($filename,"a+")) usleep(100000);
while(!flock($fp,LOCK_EX)) usleep(100000);
while(!include($filename)) usleep(100000);
ftruncate($fp,0);
rewind($fp);
$$varname=$newval;
//$text="text changes depending on the $type value";
fwrite($fp,$text);
fflush($fp);
flock($fp,LOCK_UN);
fclose($fp);
/***Increment charge code***/
$fp = fopen('/var/www/html/live/vodcount.txt', 'c+');
flock($fp, LOCK_EX);
$count = (int)fread($fp, filesize('/var/www/html/live/vodcount.txt'));
ftruncate($fp, 0);
fseek($fp, 0);
fwrite($fp, $count + 1);
flock($fp, LOCK_UN);
fclose($fp);
$arr['charge_code'] = "aadata".$count;
/***Increment charge code***/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.