2012-01-05 48 views
3

我有一個奇怪的問題,我不知道如何標題的話。實時統計/通過時間戳的增量器

我想要做的事:

我想跟蹤的運行總計,我想這個運行總計更新活到我的網頁每一秒。我並沒有試圖跟蹤訪客,它會跟蹤一些奇怪的事情,比如「現在你的身體裏有多少血細胞!」這裏是一個做我想做的網站,但他們在jQuery中做,我試圖在JS中做到這一點,以儘量減少JS文件。 http://www.usagain.com/(左側)

如何我這樣做:

我有AJAX JS文件鏈接到一個PHP文件和PHP文件打開一個文本文件 - >抓住一個數字 - >增加1 - >將所述數字發送回JS - >將數字更新爲HTML - >並且PHP更新文本文件 - >關閉txt文件。

我的問題:

計數器的作品,它增加但問題是,如果我有2個瀏覽器運行在同一個頁面。如果我有3個瀏覽器的數量將增加2;該數字將增加3,依此類推。我認爲這與寫入文件有關,但我不知道如何解決它。

我的代碼

HTML/CSS/JavaScript的/ AJAX

<html> 
<head> 
<title>Counter</title> 
<script language="javascript" src="../jquery1.6.js"></script> 
<script type="text/javascript"> 

    function addCommas(nStr) //http://www.mredkj.com/javascript/nfbasic.html -- Source 
    { 
     nStr += ''; 
     x = nStr.split('.'); 
     x1 = x[0]; 
     x2 = x.length > 1 ? '.' + x[1] : ''; 
     var rgx = /(\d+)(\d{3})/; 
     while (rgx.test(x1)) { 
      x1 = x1.replace(rgx, '$1' + ',' + '$2'); 
     } 
     return x1 + x2; 
    } 

    function getNum() 
    { 
     $.post('test.php', function(data){ 
      $('#counter').html(addCommas(data)); 
     }) 
    } 
    setTimeOut(getNum, 1000); 
</script> 
<style type="text/css"> 
    #counterContainer{color: #52504D;font-family:Verdana, Geneva, sans-serif;font-weight:bold;font-size:15px;position:relative;top:22px;} 
    #counter{color: #1E7EC8; font-size: 25px;letter-spacing:1px;} 
</style> 
</head> 
<body onload="getNum()"> 
    <div id="counterContainer"> 
     <div id="counter"><!--Counter Goes Here, Do Not Disturb--></div> 
    </div> 
</body> 
</html> 

PHP文件

<?php 
    $fp = fopen("staticNum.txt", "r+"); 
    flock($fp, LOCK_EX); 
    $num = fgets($fp, 11); 
    $num = intval($num)+1; 

    echo $num; 

    fseek($fp, 0, SEEK_SET); 
    fputs($fp, "$num"); 
    flock($fp, LOCK_UN); 
    fclose($fp); 
?> 

我的文本文件只是有這個數吧:

10000100260

任何建議將是偉大的。我的第一個想法是一個數據庫,但後來我認爲我會有同樣的問題。我確實想遠離會話變量和Cookie,不過肯定是因爲我不認爲它們是必需的。但我可能是錯的。

獎勵積分,如果你能想出一種方法來解決我的問題沒有數據庫! (不是真的,雖然我不是一個管理員:(

+1

+1很好的佈局說明 – amelvin 2012-01-05 22:10:22

+0

如果你要保持一個運行總計的,是遊客(如果不忽略其他,只是讓我知道你在跟蹤什麼!),毫無疑問最好使用會話。否則,頁面更改或刷新將導致訪客數量虛增。 – SmokeyPHP 2012-01-05 22:34:52

+0

我沒有跟蹤訪問者:(這就是我所有的谷歌搜索我會編輯我的問題指定。再次檢查「我在做什麼」在2秒內。**我真的需要一個更好的標題:/ ** – 2012-01-05 22:39:14

回答

1

相反計數的,儘量與時間戳:

value = (timestamp % ((max_limit - min_limit)/1.5)) * 1.5 + min_limit 
+0

你先生太棒了!唯一的問題是,我必須玩弄數字來找到一個確切的數字。 – 2012-01-09 14:53:26

+0

要在您需要的號碼開始,添加改性劑時間戳:值=((時間戳+修正值)%((max_limit - min_limit)/ 1.5))* 1.5 + min_limit – Uboonto 2012-01-14 13:11:55

+0

我嘗試添加改性劑,但它並沒有區別。最難的部分是計算一個好的'$ min'和'$ max',以便它從一定數量開始。時間戳很難:( – 2012-01-16 16:23:34

1

我不能完全確定你的計數器是如何工作 - 在那裏它是從等計數,但我認爲這應該可以幫助您:

var init_count = 10000100260; //starting heartbeats 
var count_start = 1325803921; //timestamp of when initial count was taken 

function update_count() 
{ 
    var utstamp = new Date(); 
    utstamp = Math.round(utstamp.getTime()/1000); //get current unix timestamp 
    var newcount = (utstamp - count_start) + init_count; //add seconds passed since initial count, to the initial count 
    $("#beat_count").html(newcount); //set the contents of your element to the new number 
} 

var ticker = setInterval(update_count,1000); //call the above function every 1000 milliseconds (1 second) 

你可以通過使用這裏的形式讓你的初始時間戳:http://www.functions-online.com/mktime.html

比答案這可能引發更多的問題,但讓我知道無論哪種方式

+0

感謝您的幫助。Javascript的問題是我必須跟蹤數字。唯一的時間它應該重置爲1,000,000,000,當它達到9,999,999,999時,它將從我在txt文件中設置的數字中獲得它的初始數字,PHP將文本文件的內容拉到第10個字節,c在PHP第4行反轉爲int並加1.然後覆蓋文本文件。我正在考慮一個JavaScript「計數到這個日期」腳本,但這些腳本通常很長。我將不得不稍後再玩。不過謝謝你! – 2012-01-05 23:11:04

0

計數器的作品,它增加但問題如果我有2個瀏覽器運行相同的頁面,數字將增加2.如果我有3個瀏覽器;該數字將增加3,依此類推。我認爲這與寫入文件有關,但我不知道如何解決它。

我假設你有每個用戶運行多個瀏覽器。計數器工作正常,但您認爲用戶實際上是瀏覽器。由於每個瀏覽器都會觸發計數的增加,因此您所描述的並不是問題,而只是腳本的工作原理。

+0

對。用戶和瀏覽器在這種情況下是相同的,因爲事件在加載時以及其後每秒都會自動觸發。問題是我如何修改我的腳本,以便它不這樣做。 – 2012-01-06 14:41:47