2017-10-17 6 views
1

現在、ビューの数を数え、.txtファイルに保存する作業スクリプトがあります。ページヒットカウンタ - 動作していますが、IPアドレスごとに制限したい

これはうまくいっていますが、あなたのIPアドレスに制限する方法を教えてください。

私はこれを試しましたが、それは数え切れません。

// Get filename of Page 
$pageName = basename($_SERVER["SCRIPT_FILENAME"], '.php'); 
$ip = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']); 

// Remove .php extension 
$counterName = basename($pageName, ".php").".txt"; 

// Open the file for reading 
// "a+" Read & write the file. Create file if not exist. 
$fp = fopen($counterName, "a+"); 
$fpIP = fopen("ip_".$counterName, "a+"); 

fwrite($fpIP, $ip."-"); 

// Get the existing count 
$count = fread($fp, 1024); 

// Close the file 
fclose($fp); 

// Add 1 to the existing count 
$count = $count + 1; 

// Reopen the file and erase the contents 
$fp = fopen($counterName, "w"); 

$ipRead = file_get_contents('ip_index.txt'); 

if(strpos($ipRead, "$ip") !== FALSE) { 
    echo $count; 
} 
else { 
    fwrite($fp1, $count); 
    echo $count;  
} 
fclose($fp); 

以下は、彼らが自分のIPアドレスに基づいて、あなたのページに行ったことが何回、個々の訪問者を表示しますBarmarのコードは、(完全に動作する)と私の更新されたコードです。

// Get filename of Page 
$pageName = basename($_SERVER["SCRIPT_FILENAME"], '.php'); 

// Remove .php extension 
$counterName = basename($pageName, ".php").".counter"; 

// Get IP 
$ip = $_SERVER['REMOTE_ADDR']?:($_SERVER['HTTP_X_FORWARDED_FOR']?:$_SERVER['HTTP_CLIENT_IP']); 


$count_text = @file_get_contents($counterName); 
$counters = $count_text ? json_decode($count_text, true) : array(); 
if (isset($counters[$ip])) { 
    $counters[$ip]++; 
} else { 
    $counters[$ip] = 1; 
} 
file_put_contents($counterName, json_encode($counters)); 
echo $counters[$ip]; 
+0

ファイルにカウントを格納する特別な理由はありますか?あなたが$ ipをエコーし​​た場合、値は何ですか? – kyle

+0

IPをファイル名に入れるか、IPによってキーされた連想配列をファイルに入れる必要があります。 – Barmar

答えて

0

$ipをオフに設定した連想配列をカウンタファイルに格納します。

$count_text = @file_get_contents($counterName); 
$counters = $count_text ? json_decode($count_text, true) : array(); 
if (isset($counters[$ip])) { 
    $counters[$ip]++; 
} else { 
    $counters[$ip] = 1; 
} 
file_put_contents($counterName, json_encode($counters)); 
echo $counters[$ip]; 

このデザインではip_XXX.txtファイルは必要ありません。

+0

ご協力ありがとうございます。私はほとんどそこにいると思いますが、スクリプトで次のエラーが発生しています: 警告:****/test/index.phpの配列としてスカラー値を使用できません29行 私は上記のコードを更新しました:) – Ravenholm

+0

どのラインがそのエラーを表示していますか? – Barmar

+0

あなたの編集を編集しました。新しいコードを表示して追加する場合は、その質問の元のコードを削除しないでください。 – Barmar

関連する問題