[PHP] Licznik

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
kroma
Posty: 14
Rejestracja: ndz lip 04, 2004 12:17 am
Lokalizacja: Szczecin
Kontakt:

[PHP] Licznik

Post autor: kroma »

witam. chcialem zrobic licznik wejsc na strone, z tym ze jezeli ktos by wszedl z danego ip w danym dniu to juz by nei naliczalo jego wejscia, chcialem zrobic tak ze dla kazdego dnia tworzylby sie plik ip_$dzien.txt (bo w bazy danych sie jeszcze nie bawilem) ,pozniej skrypt przeszukiwalby tablice i dodawal lub nie wejscie.
Moj problem: probuje i probuje i nie moge zrobic takiego manewru, ze gdy jest ip w tablicy to ma go nie dopisywac po raz kolejny a tym samym nie sumowac kolejnego wejscia:
[php]<?php
//SPRAWDZANIE IP i TWORZENIE PLIKU IP_$dzien
$ip=$_SERVER["REMOTE_ADDR"];
$dzien=date("d-m");
if (!file_exists("ip_$dzien.txt"))
{
$plik_ip=fopen("ip_$dzien.txt","w");
}

$tablica_ip=array();
$tablica_ip=file("ip_$dzien.txt");

for ($i=0;$i<=count($tablica_ip);$i++)
{

if (!in_array($ip,$tablica_ip))
{
$plik_ip=fopen("ip_$dzien.txt","a+");
fputs($plik_ip,"$ip\r\n");
fclose($plik_ip);
}
}
?>[/php]

z gory dziekuje za jakokolwiek pomoc :]
Tombard
Posty: 16
Rejestracja: śr lip 14, 2004 10:56 am

Re: [PHP] Licznik

Post autor: Tombard »

mam taki skrypt ale jest strasznie długi i musiał bym go przepisać z książki , ale może ty sam masz taką :) nazywa się 101 praktycznych skryptów , oczywiście w PHP .
kroma
Posty: 14
Rejestracja: ndz lip 04, 2004 12:17 am
Lokalizacja: Szczecin
Kontakt:

Re: [PHP] Licznik

Post autor: kroma »

sęk w tym ze sam robie ten skrypt, nie chce przepisywac bezmyslnie z ksiazki, ucze sie dopiero i chce wszystko zrozumiec 8) , ktos mi pomoze??
mistrzu
Posty: 4
Rejestracja: ndz gru 01, 2002 11:05 am
Lokalizacja: Jastrzębie Zdrój
Kontakt:

Re: [PHP] Licznik

Post autor: mistrzu »

Musisz usunąć znaki końca linii (\r i \n) z tablicy żeby funkcja in_array() zwróciła true. Zastosuj taką pętelke:

[php]<?php
foreach($tablica_ip as $key => $value)
{
$tablica_ip[$key] = trim($tablica_ip[$key]);
}
?>[/php]

Jeszcze jedno: Pętla w linii 13 jest zbędna. Funkcja in_array() automatycznie przekopuje tablice.
kroma
Posty: 14
Rejestracja: ndz lip 04, 2004 12:17 am
Lokalizacja: Szczecin
Kontakt:

Re: [PHP] Licznik

Post autor: kroma »

dzieki mistrzu, teraz mi skrypcik dziala jak ma dzialac, co prawda narazie na *.txt ale od czegos trzeba zaczynac :D
kroma
Posty: 14
Rejestracja: ndz lip 04, 2004 12:17 am
Lokalizacja: Szczecin
Kontakt:

Re: [PHP] Licznik

Post autor: kroma »

no to jak juz ciagne ten licznik to do konca. chce zrobic zeby wyswietlal odslony, odwiedziny w bierzacym dniu i odwiedziny (suma wszystkich dni). odslony mi dzialaja, odwiedziny tez, ale obawiam sie ze suma tych odwiedzin nie bedzie mi dzialac jak miesiace beda od 10-12
[php]<?php
//SPRAWDZANIE IP i TWORZENIE PLIKU IP_$dzien
$ip=$_SERVER["REMOTE_ADDR"];
$dzien=date("d");
$miesiac=date("m");
if (!file_exists("licznik/ip_$dzien-$miesiac.txt"))
{
$plik_ip=fopen("licznik/ip_$dzien-$miesiac.txt","w");
}

$tablica_ip=array();
$tablica_ip=file("licznik/ip_$dzien-$miesiac.txt");
foreach($tablica_ip as $key => $value)
{
$tablica_ip[$key] = trim($tablica_ip[$key]);
}

if (!in_array($ip,$tablica_ip))
{
$plik_ip=fopen("licznik/ip_$dzien-$miesiac.txt","a");
fputs($plik_ip,"$ip\r\n");
fclose($plik_ip);
}
// TUTAJ NIE WIEM JAK TO ZROBIC BO MISIACE OD 1-9 MAJA PRZED SOBA ZERO, DLATEGO DODALEM 0 PRZED $i (licznik od miesiaca), ALE TO NIE DZIALA W MIESIACACH 10-12 BO POZNIEJ JUZ NIE MA ZERA, JKAK TO ZROBIC? JEST FUKNCJA DATE, KTORA ZWRACA NUMER MIESIACA BEZ ZERA NA POCZATKU ??
for ($j=1;$j<=31;$j++)
{
for($i=1;$i<=12;$i++)
{
if (file_exists("licznik/ip_$j-0$i.txt"))
{
$suma=0;
$tablica_suma=file("licznik/ip_$j-0$i.txt");
$suma=count($tablica_suma);
$calosc=$suma+$calosc;
}
}
}

//ODWIEDZINY TO ILOSC IPEKOW W TABLICY $tablica_ip
$odwiedzin=count($tablica_ip);
//ZLICZANIE ODSLON
if (file_exists("licznik/licznik.txt"))
{
$plik=fopen("licznik/licznik.txt","r");
$ilosc=fgets($plik,1024);
fclose($plik);
} else $ilosc=0;

$ilosc++;

$plik=fopen("licznik/licznik.txt","w");
fputs($plik,"$ilosc");
fclose($plik);
echo ("Ilosc odslon na stronie: <big>$ilosc</big><br>");
echo ("Ilosc odwiedzin dzisiaj: <big>$odwiedzin</big><br>");
echo ("Ilosc wszystkich odwiedzin: <big>$calosc</big>");
?>


</html>
?>[/php]
viraptor
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn cze 28, 2004 12:58 pm
Kontakt:

Re: [PHP] Licznik

Post autor: viraptor »

Albo

Kod: Zaznacz cały

$miesiace=date('n');
albo

Kod: Zaznacz cały

if($i <10) $nazwa="licznik/ip_$j-0$i.txt";
else $nazwa="licznik/ip_$j-$i.txt";
 if (file_exists($nazwa))
...
Ale chyba sam przyznasz, ze to pytanie bylo nie na miejscu... skladnie if() chyba znasz, a date() jest opisany na php.net
kroma
Posty: 14
Rejestracja: ndz lip 04, 2004 12:17 am
Lokalizacja: Szczecin
Kontakt:

Re: [PHP] Licznik

Post autor: kroma »

bylo, teraz tak stwierdzam :roll: , dzieki bardzo za pomoc
ODPOWIEDZ