Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Licznik - cos nie tak w skrypcie (oparty na plikach)
xmarko
post
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 26.02.2004

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
iggi
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.11.2003

Ostrzeżenie: (0%)
-----


oto w nowej odpowiedzi umieszczam kod dwóch plików.

1. plik licz.php - glowny plik skryptu

[php:1:00afeadd0d]<?php
###########################
##Autor:iggi###############
##Mail:iggi@kgb.pl#########
##gg:2077194###############
###########################

## KONFIKURACJA ## MOŻNA EDYTOWAĆ ##

$plik_licznika = "licznik.in"; //liczba typa
$plik_ip = "ip.in"; //dane o IP i godzinie
$czas_blokady=3600; //w sekundach

## KONFIGURACJA DALSZA ## NIE EDYTOWAĆ ##

$now = date("U");
$block = $now+$czas_blokady;
$ip=getenv("REMOTE_ADDR");
$ajpi=file("$plik_ip");
include("functions.php");

## FUNKCJE WYKONYWALNE ##

if(checkip($ip, $plik_licznika, $plik_ip, $now, $block, $ajpi)==1)
{
}
else
{
addguest($plik_licznika);
adduser($ip, $plik_ip, $block);
}


## WYPISUJE LICZBĘ TYPA ##

readfile("$plik_licznika");

?>[/php:1:00afeadd0d]


2. plik functions.php - funkcje potrzebne do dzialania skryptu

[php:1:00afeadd0d]<?php
// dodaj gościa
function addguest($plik)
{
$fp = fopen($plik, "r+");
$count = fgets($fp, 10);
$count ++;
fseek($fp, 0);
fwrite($fp, $count, 10);
fclose($fp);
}

//uaktualnij usera
function updateuser($ip, $plik)
{
$zmiennik = "$ip|$now";
str_replace($ajpi[$i],$zmiennik,$plik, $new);
}

//dodaj usera
function adduser($ip, $plik1, $block)
{
$fp = fopen($plik1, "r+");
fputs($fp, "$ip|$blockn");
fclose($fp);
}

function checkip($ip, $plik, $plik1, $now, $block, $ajpi)
{
for($i=0 ; $i < count($ajpi) ; $i++)
{
$a = split("[|]", $ajpi[$i]);

if(eregi($ip, $ajpi[$i]))
{
if($a[1] <= $now)
{
addguest($plik_licznika);
updateuser($ip, $plik_ip, $now);
$r=1;
}
else
{
$r=1;
}
}
else
{
$r=0;
}
}
return($r);
}

?>
[/php:1:00afeadd0d]

dodatkowo sa jeszcze 2 pliki:
-licznika.in - liczba gosci
-ip.in - IP odwiedzajcych.

w celu wyswietlenia zawartosci nalezy zaincludowac plik licz.php (on wyswietla (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) )

gdydby gtos czegos nie kapowal to zapraszam na gg:2077194 lub tlen: ig_gi

dzieki temu skryptowi sprawdzilem siebie:P
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 06:48