簡體   English   中英

使用PHP創建計數器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM