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ć. -------------------- marko
|
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 29.11.2003 Ostrzeżenie: (0%)
|
mysle, ze skrypt na licznik z blokada bedzie duzo lepszy jezeli zamiast zapisaywania IP w plikach uzyjesz ciasteczek.
ciasteczka bardzo latwo sie robi wec jesli nic nie bedziesz pogl wykabinowac to daj znac gg:2077194 |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 26.02.2004 Ostrzeżenie: (0%)
|
ja jednak nie chce licznika opartego na ciasteczkach.
-------------------- marko
|
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 29.11.2003 Ostrzeżenie: (0%)
|
nie wiem co moze byc zle ale zaraz sprawdze i ci odpowiem
a to wszystko dlatego, ze nie chcesz ciasteczek --------------------------------------------------------------- dobra zaraz napisze bo to rzeczywiscie kiepsko dziala bede to robic na zasadzie: 1.podanie wszytkich zmiennych do edycji 2.sprawdzenie czy dane IP jest w pliku 3. jesli jest to sprawdzimy czas 4.jesli godzina w pliku jest wieksza lub rowna to naliczamy i zmieniamy czas 5.jesli nie nic nie robimy 6.jesli nie ma to naliczamy goscia to dodajemy do pliku 3.konczymy skrypt |
|
|
|
Post
#5
|
|
|
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 gdydby gtos czegos nie kapowal to zapraszam na gg:2077194 lub tlen: ig_gi dzieki temu skryptowi sprawdzilem siebie:P |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 26.02.2004 Ostrzeżenie: (0%)
|
Trochę powalczyłemze skryptem i oto wynik. Może ktoś przetestuje czy działa.
Ewntualnie poprawi [php:1:438fba8b32] <?php. ############# ## xmarko ### ############# $nabijaj=FALSE; $ip=$_SERVER['REMOTE_ADDR']; $czas_teraz=date('U'); $plik_d="licznik_d.in"; // dane $plik_g="licznik.in"; // zapisy ilosci odwiedzajacych $czas_nabijaj="3600"; ########################## ##### FUNKCJE ##### ########################## function zmien_odczyt() { global $plik_d; global $czas_teraz; global $ip; $plik = file($plik_d); for ($i=0; $i < count($plik); $i++) { $linia = explode("|&&|", $plik[$i]); if ($linia[0] == $ip) { $wpis_po=$ip."|&&|".$czas_teraz."|&&|n"; $plik1=file_get_contents($plik_d); $plik1=str_replace($plik[$i],$wpis_po,$plik1); $odczyt=fopen($plik_d,"w"); flock($odczyt,LOCK_EX); fputs($odczyt,$plik1); flock ($odczyt,LOCK_UN); fclose ($odczyt); $nabijaj = TRUE; break; } } } function nabij() { global $plik_g; $odczyt=fopen($plik_g,"r"); $ile=fgets($odczyt,80); $ile++; fclose($odczyt); $odczyt=fopen($plik_g,"w"); flock($odczyt,LOCK_EX); fputs($odczyt,$ile); flock($odczyt,LOCK_UN); fclose($odczyt); } function dopisz() { global $plik_d; global $ip; global $czas_teraz; $odczyt=fopen($plik_d,"a"); flock($odczyt,LOCK_EX); fputs($odczyt,"$ip|&&|$czas_teraz|&&|n"); flock($odczyt,LOCK_UN); fclose ($odczyt); } ########################## ##### DZIAŁANIE ##### ########################## $plik_d_tab=file($plik_d); for ($i=0; $i< count($plik_d_tab); $i++) { $linia=explode("|&&|",$plik_d_tab[$i]); if ($linia[0]==$ip) { $czas_roznica=$czas_teraz - $linia[1]; if ($czas_roznica < $czas_nabijaj) { zmien_odczyt(); $nabijaj=TRUE; } else{ nabij(); zmien_odczyt(); $nabijaj=TRUE; } } } if(!$nabijaj) { nabij(); dopisz(); } ?>[/php:1:438fba8b32] -------------------- marko
|
|
|
|
![]() ![]() |
|
Aktualny czas: 20.08.2025 - 02:05 |