2017-07-28 5 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); 
} 
?> 

このコードを使用して、セッションを使用して1ページの訪問者数をカウントしています。 しかし、他のすべてのページにもページカウンタを保持したいと考えています。そのため、コードをコピーして他のページに貼り付けると、値が増えません。最初のページではインクリメントされますが、他のページではインクリメントされません。可能な解決策は何ですか?ページカウンターの別のページにある

+0

ここにはいくつかの問題がありますが、そのロジックがサイトの他のページでも機能しない理由はありません。ただし、絶対パスを使用して、すべてのスクリプトがサーバー側のファイルシステム内の同じファイルの場所を指定するようにする必要があります。他のページの – arkascha

+0

には、カウンタ値を格納する別のテキストファイルがあります。問題は、セッションが1つのWebページで開始されたときに、他のページに切り替えると残りのページカウンタの値が増えないようになってしまうことです。 –

+0

申し訳ありませんが、私はあなたの最後のコメントを感知しません。このすべてが訪問者と番号を追跡することであれば、 'piwik'やApacheログファイルアナライザのような既存の実績のあるソリューションを使うのはなぜですか?より簡単でより多くの正確な情報を得ることができます。 – arkascha

答えて

1

データベースに情報を保存することで、私のウェブサイトでこれを行います。 txtファイルを使用するよりも安全です。そうすることを検討する必要があります。また、IPをSESSIONと共に使用すれば、レコードを保存してより徹底することができます。リクエストURI、IP、セッションID /ユーザIDを使用するヘッダファイルにトラフィックログファイルを作成します。

リクエストURIを使用すると、すべてのページに1つのトラフィックログスクリプトを配置して、トラッキングするすべての異なるWebページを処理できます。必要に応じていくつかのコード例を追加することができます。

これがあなたを助けてくれることを願っています!

*/ 
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ファイルを使用すると、遠くに到着することはできません。

関連する問題