Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Niezrozumiały dla mnie licznik on-line
Zagiewa
post 7.04.2010, 16:21:31
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


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.".";
?>
Go to the top of the page
+Quote Post
blooregard
post 7.04.2010, 16:25:27
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Takie rzeczy wyjaśniamy w Przedszkolu.
Przenoszę.


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
dziamber
post 7.04.2010, 16:34:28
Post #3





Grupa: Zarejestrowani
Postów: 57
Pomógł: 18
Dołączył: 15.04.2009
Skąd: Kwidzyn

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


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.
Go to the top of the page
+Quote Post
Zagiewa
post 7.04.2010, 16:51:35
Post #4





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


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
Go to the top of the page
+Quote Post
dziamber
post 7.04.2010, 16:57:10
Post #5





Grupa: Zarejestrowani
Postów: 57
Pomógł: 18
Dołączył: 15.04.2009
Skąd: Kwidzyn

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


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
Go to the top of the page
+Quote Post
Zagiewa
post 7.04.2010, 17:20:24
Post #6





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


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.
Go to the top of the page
+Quote Post
mortus
post 7.04.2010, 17:58:29
Post #7





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.

Ten post edytował mortus 7.04.2010, 17:46:35
Go to the top of the page
+Quote Post
Zagiewa
post 7.04.2010, 20:03:49
Post #8





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 12.08.2009

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


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
Go to the top of the page
+Quote Post
pedro84
post 7.04.2010, 21:43:03
Post #9





Grupa: Nieautoryzowani
Postów: 2 249
Pomógł: 305
Dołączył: 2.10.2006

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


@zagiewa: Najlepiej dodać też ciasteczka, a dopiero potem sprawdzać IP. Tez nie idealny sposób, ale skuteczniejszy i dający bardziej wiarygodne wyniki.


--------------------
Google knows the answer...
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 16.07.2025 - 00:41