Witam,
Jestem w zasadzie "nowy w php".
Stworzyłem skrypt w php - licznik odwiedzin - niestety nie działa prawidłowo. Ma być odporny na odświeżanie (zapis czasu na IP odwiedzającego).
[php:1:e01299dbba]<?php
$nabij = FALSE;
$ip=$_SERVER['REMOTE_ADDR'];
$czas_teraz=date('U');
$plik_l="licznik_gl.in";
$plik_g="licznik.in";
$plik_l_tab=file($plik_l);
for ($i=0; $i< count($plik_l_tab); $i++)
{
$linia=explode("|&&|", $plik_l_tab[$i]);
if ($linia[0]==$ip)
$czas_roznica= ($czas_teraz)-($linia[1]);
$czas_nabijaj= "3600";
if ($czas_roznica <= $czas_nabijaj)
{
$wpis_po="$ip.'|&&|'.$czas_teraz.'|&&|'n";
$plik=file_get_contents($plik_l);
$plik=str_replace($plik[$i],$wpis_po,$plik);
$odczyt=fopen($plik_l,"w");
flock($odczyt,LOCK_EX);
fputs($odczyt,$plik);
flock($odczyt,LOCK_UN);
fclose($odczyt);
$plik=fopen($plik_g,"r");
$ile=fgets($plik,80);
$ile++;
fclose($plik);
$plik=fopen($plik_g,"w");
flock($plik,LOCK_EX);
fputs($plik,$ile);
flock($plik,LOCK_UN);
fclose($plik);
$nabij=TRUE;
}
}
if (!$nabij)
{
$odczyt=fopen($plik_l,"a");
flock($odczyt,LOCK_EX);
fputs($odczyt,"$ip|&&|$czas_teraz|&&|n");
flock($odczyt,LOCK_UN);
fclose($odczyt);
$plik=fopen($plik_g,"r");
$ile=fgets($plik,80);
$ile++;
fclose($plik);
$plik=fopen($plik_g,"w");
flock($plik,LOCK_EX);
fputs($plik,$ile);
flock($plik,LOCK_UN);
fclose($plik);
}
?>[/php:1:e01299dbba]
Założenia:
Jeden plik służy do zapis numeru IP i czasu $plik_l="licznik_gl.in"
a drugi do ilości odwiedzin. $plik_g="licznik.in";
jeżeli nie ma zapisu numeru IP dopisuje do pliku numer IP i czas
jeżeli czas IP jest równy lub większy od czasu zadeklarowanego "3600" to ma zostac zmieniony czas dla konkretnego IP na czas bieżący i zwiększony licznik o 1.
Jezeli czas jest mniejszy to ma zostać zminiony tylko czas na czas bieżący
Problem
Niestety nie mam pojęcia gdzie robie błąd w skrypcie. Może ktoś mi pomoże go rozwiązać.