Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> statystyki
upeer
post 26.02.2011, 01:51:48
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.02.2011

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


witam, mam do was prosbe. zmodyfikowalem troche kod statystyk ktory znalazlem w necie,
  1. <?php
  2.  
  3. $plik = "licznik/lista";
  4.  
  5.  
  6. $tablica=file($plik); // wrzucamy plik odwiedziny do zmiennej w postaci tablicy
  7. $buffer=$tablica[count($tablica)-1]; // liczymy długość tablicy (ilość linijek w pliku)
  8.  
  9. $lip=explode("!@!@!",$buffer); // zamiast wrzucać date, ip i proxy linijka pod linijką, wrzucamy je w jedną i oddzielamy je ciągiem znaków !@!@! :)
  10.  
  11. $string = file_get_contents($plik); // pobieramy zawartość pliku odwiedziny i przypisujemy do zmiennej $string
  12. $szukane = date("j.m.Y").'!@!@!'.$IP; // zmiennej $szukane przypisujemy szukaną wartość
  13. {
  14. $zzz=fopen($plik,"a"); // otwieramy plik do nadpisania
  15. fputs($zzz,date("G:i:s").'!@!@!'.date("j.m.Y").'!@!@!'.$IP.'!@!@!'.$host."\n"); // zapisujemy odwiedziny w tej 'dziwnej' formie ;)
  16. fclose($zzz); // zamykamy plik
  17. }
  18.  
  19. $plik = file($plik);
  20. $liczba_wierszy = sizeof ($plik);
  21.  
  22. for ($i=0; $i<=$liczba_wierszy; $i++) // pętla przelatuje przez wszystkie zapisane wiersze w poszukiwaniu odwiedzin z dziś, wczoraj i z ostatnich 7 dni
  23. {
  24. $linia=explode("!@!@!",$plik[$i]);
  25.  
  26. if (date('j.m.Y') == $linia[1]) // sprawdza warunek czy jest wpis z dzisiejszą datą
  27. {
  28. $dzis++; // zlicza ilość wszystkich wpisów z dziejszą datą
  29. }
  30. if ($linia[1] == date('j.m.Y',time()-86400) ) // sprawdza warunek czy jest wpis z wczorajszą datą
  31. {
  32. $wczoraj++; // zlicza ilość wszystkich wpisów z wczorajszaą datą
  33. }
  34. }
  35. <font size="2">
  36.  
  37. Wczoraj było: '.$wczoraj.' wejść.<br>
  38. Dzisiaj było: '.$dzis.' wejść.<br>';
  39. ?>
  40.  
  41.  



i moja prosba i pytanie czy da sie usunac automatycznie wpisy z pliku "licznik/lista" które mają powyzej dwoch dni. jesli tak to w jakis sposob
Go to the top of the page
+Quote Post
erix
post 26.02.2011, 12:36:54
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ten skrypt Ci zajeździ pamięć po pewnym czasie.

Da się - zapisujesz całość w pętli, linia po linii, sprawdzając po drodze, czy warunek daty jest prawidłowy. Jeśli nie - continue przed zapisem.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
voice
post 26.02.2011, 12:52:47
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.02.2011

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


a moglbys pokazac mi jak to zrobic, zedytowac ten kod wink.gif
Go to the top of the page
+Quote Post
Valdi_B
post 26.02.2011, 12:55:35
Post #4





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

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


Zacznijmy od "usprawnienia" Twojego kodu:
Datę dziesiejszą / wczorajszą lepiej wygenerować raz, przed pętlą,
$d_dzis = date('j.m.Y');
$d_wczor = date('j.m.Y', time() - 86400);
a nie ciągle od nowa w pętli.

Co do usunięcia "starych" odwiedzin - spróbuj coś takiego:
  1. <?php
  2.  
  3. // Kontrola daty w linii z tablicy
  4. // Wynik - czy zostawić poz. na liście
  5. function ktr_daty($lin) {
  6. global $d_dzis, $d_wczor;
  7.  
  8. // przerób na tablicę
  9. $t_lin = explode("!@!@!", $lin);
  10. $dt = $t_lin[1]; // pole daty
  11. if ($dt == $d_dzis) { // dziś
  12. $zost = true;
  13. } elseif ($dt == $d_wczor) { // wczoraj
  14. $zost = true;
  15. } else {
  16. $zost = false;
  17. }
  18. return $zost; // czy zostawić
  19. } // ktr_daty
  20.  
  21. ...
  22.  
  23. $tablica_ogr = array_filter($tablica,'ktr_daty');
  24.  
  25. ?>
W $tablica_ogr dostajesz listę odwiedzin ograniczoną do dziś / wczoraj.
Zapisz ją do pliku odwiedzin i załatwione.
Go to the top of the page
+Quote Post
upeer
post 26.02.2011, 12:59:31
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.02.2011

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


czyli jesli dobrze rozumiem kod:

  1. 1.
  2. <?php
  3. 2.
  4.  
  5. 3.
  6. // Kontrola daty w linii z tablicy
  7. 4.
  8. // Wynik - czy zostawić poz. na liście
  9. 5.
  10. function ktr_daty($lin) {
  11. 6.
  12. global $d_dzis, $d_wczor;
  13. 7.
  14.  
  15. 8.
  16. // przerób na tablicę
  17. 9.
  18. $t_lin = explode("!@!@!", $lin);
  19. 10.
  20. $dt = $t_lin[1]; // pole daty
  21. 11.
  22. if ($dt == $d_dzis) { // dziś
  23. 12.
  24. $zost = true;
  25. 13.
  26. } elseif ($dt == $d_wczor) { // wczoraj
  27. 14.
  28. $zost = true;
  29. 15.
  30. } else {
  31. 16.
  32. $zost = false;
  33. 17.
  34. }
  35. 18.
  36. return $zost; // czy zostawić
  37. 19.
  38. } // ktr_daty
  39. 20.
  40.  
  41. 21.
  42. ...
  43. 22.
  44.  
  45. 23.
  46. $tablica_ogr = array_filter($tablica,'ktr_daty');
  47. 24.
  48.  
  49. 25.
  50. ?>


mam wrzucic do pliku lista
Go to the top of the page
+Quote Post
Valdi_B
post 26.02.2011, 13:06:03
Post #6





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

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


Samą funkcję wrzuć gdzieś ma początek.
Wywołanie - w tym miejscu Twojego kodu, gdzie już jest wczytana $tablica.

Pytanie tylko - czy taką operację jest sens robić po każdych odwiedzinach.
Raczej należy to robić raz na dobę, albo nawet rzadziej.

Uwaga na marginesie:
Nazwa $tablica "niewiele mówi" (co to za tablica).
Lepszą nazwą byłoby np. $t_odw (tablica odwiedzin).

Ten post edytował Valdi_B 26.02.2011, 13:07:45
Go to the top of the page
+Quote Post
upeer
post 26.02.2011, 13:13:52
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.02.2011

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


sorki ale ja w php dopiero poczatki wink.gif

no wlasnie tez tak mysallem by czyscic to raz na jakis czas powiedzmy co 48 godzin, ale nie wiem jak to zrobic
Go to the top of the page
+Quote Post
Valdi_B
post 26.02.2011, 13:17:37
Post #8





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

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


Poczytaj sobie o takim czymś jak cron.
Narzędzie do uruchamiania wskazanych programów we wskazanych datach / godzinach.

Przy okazji pytanie / uwaga dot. Twojego kodu:
Tak jak jest, to program zlicza wszystkie odwiedziny z dziś / wczoraj.
Z kolei w komentarzach na początku jest mowa o zliczaniu odwiedzin spod danego $IP (chodzi o zmienną $szukane).
Jak chcesz liczyć?

Ten post edytował Valdi_B 26.02.2011, 13:26:59
Go to the top of the page
+Quote Post
upeer
post 26.02.2011, 13:24:22
Post #9





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.02.2011

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


sam raczej nic nie zdziałam ale dzieki za odp wink.gif
Go to the top of the page
+Quote Post
erix
post 26.02.2011, 14:10:54
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Dalej olewacie kryterium pożerania pamięci, ale co tam. tongue.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
upeer
post 26.02.2011, 14:36:39
Post #11





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 19.02.2011

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


erix to co ty bys poradzil, jesli mozesz to pokaz odrazu kod wink.gif
Go to the top of the page
+Quote Post
erix
post 26.02.2011, 15:36:52
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Już setki razy pisałem o tym, że file jest najgorszym z możliwych wyjść.

Pętla: feof + fgets, przykład jest w manualu.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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: 19.07.2025 - 07:28