Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: statystyki
Forum PHP.pl > Forum > Gotowe rozwiązania
upeer
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
erix
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.
voice
a moglbys pokazac mi jak to zrobic, zedytowac ten kod wink.gif
Valdi_B
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.
upeer
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
Valdi_B
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).
upeer
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
Valdi_B
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ć?
upeer
sam raczej nic nie zdziałam ale dzieki za odp wink.gif
erix
Dalej olewacie kryterium pożerania pamięci, ale co tam. tongue.gif
upeer
erix to co ty bys poradzil, jesli mozesz to pokaz odrazu kod wink.gif
erix
Już setki razy pisałem o tym, że file jest najgorszym z możliwych wyjść.

Pętla: feof + fgets, przykład jest w manualu.
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.