Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Niezrozumiały dla mnie licznik on-line
Forum PHP.pl > Forum > Przedszkole
Zagiewa
Witam. Uczę się dopiero php i obecnie postanowiłem napisać własny licznik on-line zamiast korzystać z darmowych, problemem jednak było się jak go zrobić (bo nie wiedziałem jakiej funkcji/zmiennej użyć aby rozpoznawała ona obecność czyjego ip na stronie) więc zacząłem szukać darmowego i znalazłem kod na stronie webcoding.pl gdzie poniżej zamieszczam jego kod. Nie wiem czy działa bo jego go nie sprawdzałem ale jako, że się uczę nie sposób skopiować i wkleić skrypt tylko go zrozumieć no i właśnie tutaj mam prośbę do was bo strasznie jak dla mnie ten kod jest zagmatwany:/ Czy ktokolwiek z was mógł by mi go wytłumaczyć linijka po linijce? jest krotki więc dla was nie powinien być jakimś szczególnym wyzwaniem. Z góry dziękuję.
Kod
<?
$minuty=10;
$czas=time()+60*$minuty;
$bazaip = file("online.txt");
$ile=count($bazaip);
$ip = $_SERVER["REMOTE_ADDR"];
for ($i=0;$i<$ile;$i++) {
$pol = explode("`",$bazaip[$i]);
if ($pol[2] if ($pol[1]==$ip) {
$bazaip[$i]="`$ip`$czas` "; $jest=1;
}
}
if ($jest<>1) $bazaip[]="`$ip`$czas` ";
$f = fopen("online.txt","w");flock($f,2);
for ($i=0;$i<$ile+1;$i++) {
if ($bazaip[$i]<>"") { fwrite($f, $bazaip[$i]); $ileip++;}
}
flock($f,3); fclose($f);
echo "Osób on-line:".$ileip.".";
?>
blooregard
Takie rzeczy wyjaśniamy w Przedszkolu.
Przenoszę.
dziamber
No to tak:

Linijka 1: ustawienie minut
Linijka 2: ustawienie czasu
Linijka 3: pobranie pliku tekstowego i zapisanie do zmiennej
Linijka 4: zliczenie ile linijek zawiera plik tekstowy pobrany wyżej
Linijka 5: pobranie ip odwiedzającego
Linijka 6: rozpoczęcie pętli ($i równe zero, wyświetlane póki $i jest mniejsze od $ile, powiększaj $i o jeden przy każdej kolejnej iteracji)
Linijka 7: przypisanie do zmiennej $pol tablicy
Linijka 8: instrukcja warunkowa tu chyba nie ma co tłumaczyć

Tyle Ci na razie napisałem, ogólnie jestem przeciwnikiem zapisywania danych w plikach tekstowych, i nawet nie praktykowałem tego dlatego też funkcje z tym związane opisze ktoś bardziej ogarnięty w tym temacie.
Zagiewa
Ja osobiście też preferuje bazy i korzystam z nim za każdym razem jak potrzebuje chociaż w przypadku liczników wydaje mi się, że tworzenie plików tekstowych jest bardziej praktyczne. Twój opis jest trochę bardzo ubogi tongue.gif na tyle to i ja potrafię sobie to wytłumaczyć ale to nic postaram się zadawać bardziej precyzyjne pytania tongue.gif np. linijka druga choć wiem, że ustawia czas to w jaki sposób? z tego co wiem zmienna czas() przechowuje aktualny czas więc zakładając, że teraz jest 17:46:12 to zmienna $czas będzie miała wartość (17:46:12 + 60*10) = 17:56:02 ? chociaż czytałem, że zmienna time() przechowuje czas w sekundach czyli 17:46:12 to będzie 63972 sekundy czyli zmienna $czas powinna mieć wartość 63972 + 60*10 czyli 64572 prawda? która odp. jest prawidłowa? czy żadna:P
dziamber
http://php.net/manual/en/function.time.php
Coś mi się wydaje, że nie tyle nie rozumiesz co ci się nie chce. Nawet nie sprawdziłeś tego skryptu. Na twoim miejscu bym go uruchomił a pózniej analizował a nie od razu leciał na forum.
Cytat
na tyle to i ja potrafię sobie to wytłumaczyć

Wiesz następnym razem pisz czego nie rozumiesz bo widzę, że niepotrzebnie traciłem czas, może doceń, że chce Ci pomóc a nie zachowujesz się jak przedszkolak, no tak zasugerowałeś się nazwą działu dry.gif
Zagiewa
dziamber nie zrozum mnie źle. Strona którą mi podałeś to już czytałem. Skrypt jak najbardziej zastosuje ale skoro ktoś go umieścił jako gotowca zakładam, że działa ale co z tego, że zobaczę co wyświetla skoro gdy bym miał później sam napisać taki licznik to bym poległ. Haha co do działo to sam zostałem przeniesiony tongue.gif ale nie w tym rzecz. Nie prosiłem od razu o dokładniejsze tłumaczenie bo przyzwyczajony jestem do książek, że jeżeli coś jest tłumaczone to w miarę dokładnie i być może to złe przyzwyczajenie mój błąd, sorki. Ale nawet czytając o zmiennej time() postawiłem to stwierdzenie:

Cytat
czytałem, że zmienna time() przechowuje czas w sekundach


a przynajmniej tak zrozumiałem, ale strona ta nie daje mi odpowiedzi na moje pytanie jaką wartość będzie miała zmienna $czas - mogę jedynie przypuszczać, że mam rację a to czasem za mało. A co do Twojego czasu to nie poszedł na marne tym bardziej, że posłużę się jeszcze Twoją odpowiedzią do kolejnych pytań ale jak najlepiej zrozumieć kod.
mortus
Przede wszystkim time() to nie zmienna, a funkcja. Funkcja ta zwraca aktualny czas w sekundach, ale od 1 stycznia 1970 roku od godziny 00:00:00 GMT. Po drugie podany kod nie ma prawa zadziałać, ponieważ warunek w linii 9 jest co najmniej "dziwny", a na pewno nieprawidłowy. Po trzecie zmienna $czas jest w tym skrypcie zapisywana do pliku, obok adresu ip, ale w sumie nie wiemy po co (i nawet ciężko mi zgadnąć zamiary autora).

Tak szczerze powiedziawszy, to nawet nie ma sensu tłumaczyć tego skryptu. Natomiast schemat postępowania w takim przypadku powinien być następujący:
1. pobieramy adres ip ze zmiennej $_SERVER['REMOTE_ADDR'],
2. odczytujemy zawartość pliku z dysku i odpowiednio rozbijamy na tablicę,
3. w pętli po otrzymanej tablicy sprawdzamy, czy adres ip jest w niej zapisany,
4a. jeśli tak, to pobieramy tylko liczbę zapisanych adresów,
4b. jeśli nie to zapisujemy adres ip do pliku i zwiększamy liczbę adresów online o 1.
Tyle. Sposobów realizacji jest tyle, ilu programistów. Spróbuj coś napisać, a w razie problemów pisz.
Zagiewa
mortus wiec sugerujesz aby napisał coś sam niż skorzystał z tego jak sam wspomniałeś: "co najmniej dziwnego" kodu? tongue.gif Postaram się wykorzystać ten kod i swoja wiedzę i waszą pomoc. Może akurat uda mi się coś sklecić smile.gif
pedro84
@zagiewa: Najlepiej dodać też ciasteczka, a dopiero potem sprawdzać IP. Tez nie idealny sposób, ale skuteczniejszy i dający bardziej wiarygodne wyniki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.