2017-07-28 72 views
0
<?php 
ob_start(); 
session_start(); 
$counter_name = "index.txt"; 
// Check if a text file exists. If not create one and initialize it to zero. 
if (!file_exists($counter_name)) { 
    $f = fopen($counter_name, "w"); 
    fwrite($f,"0"); 
    fclose($f); 
} 
// Read the current value of our counter file 
$f = fopen($counter_name,"r"); 
$counterVal = fread($f, filesize($counter_name)); 
fclose($f); 
// Has visitor been counted in this session? 
// If not, increase counter value by one 
if(!isset($_SESSION['hasVisited'])){ 
    $_SESSION['hasVisited']="yes"; 
    $counterVal++`enter code here`; 
    $f = fopen($counter_name, "w"); 
    fwrite($f, $counterVal); 
    fclose($f); 
} 
?> 

我使用此代碼來計算一個頁面上使用會話的訪問者數量。 但我想在所有其他頁面上保留頁面計數器。所以當我將代碼複製並粘貼到其他頁面時,值不會遞增。它只會在第一頁上增加,而不會在我訪問的其他頁面上增加。什麼是可能的解決方案?網頁不同頁面上的頁面計數器

+0

這裏有一些問題,但沒有理由爲什麼該邏輯不應該在您的網站的其他網頁上工作。但是,您應該使用絕對路徑來確保所有腳本都處理服務器端文件系統中相同的文件位置。 – arkascha

+0

對於其他頁面我有不同的文本文件存儲計數器值。問題是一旦我的會話開始在一個網頁上,它仍然像當我切換到其他頁面,因此其他頁面計數器值沒有得到增量。 –

+0

對不起,但我無法理解你最後的評論。如果所有這些都是關於跟蹤訪問者和數字的,那麼爲什麼不簡單使用現有的和經過驗證的解決方案,比如'piwik'或apache日誌文件分析器?更容易,你獲得更多,更精確的信息。 – arkascha

回答

1

我在我的網站上通過在數據庫中存儲信息來做到這一點。這比使用txt文件更安全,所以你應該考慮這樣做。而且您可以使用IP與SESSION一起更加徹底地保存記錄。製作一個流量日誌記錄文件,將其包含在將使用請求URI,IP,會話標識/用戶標識的頭文件中。

通過使用請求URI,您可以將單一流量記錄腳本放在所有頁面上,以處理您想要跟蹤的所有不同網頁。如果你願意,我可以添加一些代碼示例。

希望這可以幫助你!

*/ 
Define Variables You Want To Store..In this case it is preparing a timestamp, the page (i.e. the $_SERVER['REQUEST_URI']), and the IP 
/* 

$time = time(); 
$page = $_SERVER['REQUEST_URI']; 

//This is used to sort out the correct IP Address to store // 

$client = @$_SERVER['HTTP_CLIENT_IP']; 
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; 
$remote = $_SERVER['REMOTE_ADDR']; 

    if(filter_var($client, FILTER_VALIDATE_IP)) { 
     $ip = $client; 
    } elseif(filter_var($forward, FILTER_VALIDATE_IP)) { 
     $ip = $forward; 
    } else { 
     $ip = $remote; 
    } 

//Use this if you want to see if the data exists already, I usually just store all traffic to make sure people aren't up to anything fishy// 



$stmt = $database->prepare("SELECT ID FROM traffic WHERE IP = :IP AND page = :page"); 
$stmt->bindParam(':IP', $ip); 
$stmt->bindParam(':page', $page); 
$stmt->execute(); 
$result = $stmt->FetchALL(PDO::FETCH_ASSOC); 

if (!isset($result)) { 
    $sql = "INSERT INTO traffic (time,IP,page) VALUES (:time, :ip, :page)"; 
    $params = array(
      ':time' => $time, 
      ':ip' => $ip, 
      ':page' => $page, 
     ); 
    $stmt = $database->prepare($sql); 
    $stmt->execute($params); 
} 
+0

非常感謝。請添加一些代碼,以便我可以正確理解它 –

-1

您需要在mysql或sqlite或其他數據庫服務器中使用,以保存訪問的名稱和數量。 您首先需要創建數據庫並學習如何使用它。不要跑.... 隨着TXT文件,你不能到達很遠...