2017-10-17 9 views
1

J'ai actuellement un script de travail qui compte le nombre d'entre eux des vues et des magasins dans un fichier txt.page Hit Counter - travail mais veulent limiter à par adresse IP

Il fonctionne très bien, mais comment puis-je faire en sorte que la limite à votre adresse IP?

J'ai essayé mais sans compter.

// 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); 

Ci-dessous est mon code mis à jour avec le code Barmar (travail entièrement) qui montrent chaque visiteur combien de fois ils ont été à votre page en fonction de leur adresse IP.

// 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

Y a-t-il une raison spécifique pour laquelle vous stockez le nombre dans un fichier? Aussi si vous echo $ ip quelle est la valeur? – kyle

+0

Vous devez soit placer l'adresse IP dans le nom de fichier, soit placer un tableau associatif codé par IP dans le fichier. – Barmar

Répondre

0

un magasin de tableau associatif qui est calée hors $ip dans le fichier compteur. Vous n'avez pas besoin du fichier ip_XXX.txt dans cette conception.

+0

Merci pour votre aide, je pense que je suis presque là mais je reçois l'erreur suivante avec mon script: Avertissement: Impossible d'utiliser une valeur scalaire comme un tableau dans ****/test/index.php sur ligne 29 J'ai mis à jour mon code ci-dessus :) – Ravenholm

+0

Quelle ligne reçoit cette erreur? – Barmar

+0

J'ai annulé votre modification. Si vous souhaitez afficher le nouveau code, ajoutez-le en tant qu'addition, ne supprimez pas le code d'origine de la question. – Barmar