Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wyświetleniem statystyk strony
Forum PHP.pl > Forum > PHP
LucKy_skiLL
Witam, mam skrypt na naliczanie odwiedzających i osób online, lecz mam problem z wyświetleniem tego.


Skrypt

  1. <?
  2.  
  3. ########################### Licznik uq / online
  4.  
  5. if ($_SERVER["HTTP_X_FORWARDED_FOR"] != "")
  6. {
  7. $IP = $_SERVER["HTTP_X_FORWARDED_FOR"];
  8. $proxy = $_SERVER["REMOTE_ADDR"];
  9. $host = @gethostbyaddr($_SERVER["HTTP_X_FORWARDED_FOR"]);
  10. }
  11. else
  12. {
  13. $IP = $_SERVER["REMOTE_ADDR"];
  14. $host = @gethostbyaddr($_SERVER["REMOTE_ADDR"]);
  15. } // tutaj pobieramy IP i sprawdzamy czy delikwent łączy się przez proxy
  16.  
  17. $ref = $_SERVER['HTTP_REFERER'];
  18.  
  19. $plik = "lista";
  20.  
  21. $tablica=file($plik); // wrzucamy plik odwiedziny do zmiennej w postaci tablicy
  22. $buffer=$tablica[count($tablica)-1]; // liczymy długość tablicy (ilość linijek w pliku)
  23.  
  24. $lip=explode("!@!@!",$buffer); // zamiast wrzucać date, ip i proxy linijka pod linijką, wrzucamy je w jedną i oddzielamy je ciągiem znaków !@!@! :)
  25.  
  26. $string = file_get_contents($plik); // pobieramy zawartość pliku odwiedziny i przypisujemy do zmiennej $string
  27. $szukane = date("j.m.Y").'!@!@!'.$IP; // zmiennej $szukane przypisujemy szukaną wartość
  28. if (preg_match('/'.$szukane.'/i', $string)) // szukamy czy istnieje już wpis z taką datą i adresem IP
  29. {
  30. end; // jeśli już istnieje to nic nie dodajemy do listy
  31. }
  32. else // jeśli niema takiego wpisu to zostaje on dodany
  33. {
  34. $zzz=fopen($plik,"a"); // otwieramy plik do nadpisania
  35. fputs($zzz,date("G:i:s").'!@!@!'.date("j.m.Y").'!@!@!'.$IP.'!@!@!'.$host.'!@!@!'.$ref."\n"); // zapisujemy odwiedziny w tej 'dziwnej' formie ;)
  36. fclose($zzz); // zamykamy plik
  37. }
  38.  
  39. $zzz=fopen($plik,"r"); //otwieranie pliku tylko do odczytu
  40. while ($linia=fgets($zzz,4096))// pętla która czyta plik w którym zapisana jest lista odwiedzin
  41. {
  42. $unikalne++; // taki durny sposób na policzenie linijek - czyli ilości całkowitej wejść na naszą stronę :)
  43. }
  44. fclose($zzz);// zamykanie pliku
  45.  
  46. $plik = file($plik);
  47. $liczba_wierszy = sizeof ($plik);
  48.  
  49. 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
  50. {
  51. $linia=explode("!@!@!",$plik[$i]);
  52.  
  53. if (date('j.m.Y') == $linia[1]) // sprawdza warunek czy jest wpis z dzisiejszą datą
  54. {
  55. $dzis++; // zlicza ilość wszystkich wpisów z dziejszą datą
  56. }
  57. if ($linia[1] == date('j.m.Y',time()-86400) ) // sprawdza warunek czy jest wpis z wczorajszą datą
  58. {
  59. $wczoraj++; // zlicza ilość wszystkich wpisów z wczorajszaą datą
  60. }
  61.  
  62. if (time()-604800 <= strtotime($linia[1])) // sprawdza warunek czy są wpisy z ostatnich 7 dni
  63. {
  64. $tydzien++; // zlicza ilość wszystkich wpisów z ostatnich 7 dni
  65. }
  66. }
  67.  
  68. $ID = session_id(); // przypisujemy $ID id sesji
  69. $czas = time(); // aktualny czas
  70. $do_zapisania="$ID:$czas"; // sposób w jaki zapisujemy aktualnie znajdującą się osobę na stronie: "id sesji":"czas w sekundach"
  71. $min_czas=300; // czas przez jaki zapisane jest wejście danej osoby
  72. $plik2="online"; // plik w którym są zapisywane osoby aktualnie przeglądające naszą stronie - ostatnie 5 minut
  73. $nowa=false; // ustala domyślną zmienną która oznacza że nie będzie nowego wpisu
  74.  
  75. $odczyt = fopen($plik2, "r"); // otwiera plik tylko do odczytu
  76. $users = fread($odczyt, filesize($plik2)); // odczytuje plik
  77. fclose($odczyt); // zamyka plik
  78.  
  79. if ($users=="") // sprawdzenie czy jest już jakiś wpis w pliku "online", jeśli nie to dodaje wpis: "$ID:$dzis_data"
  80. {
  81. $online=1;
  82. $save=$do_zapisania;
  83. }
  84. else // w innym przypadku sprawdza istniejące wpisy
  85. {
  86. $uzytkownik=explode("\n", $users);
  87. while (list($key,$value)=each($uzytkownik))
  88. {
  89. list($old_id, $old_time) = explode(":",$value); // przypisywanie listy zmiennych
  90. if ($old_id!=$ID) // jeżeli istniejący id się różni od aktualnie sprawdzanego id
  91. {
  92. if ($czas-$old_time < $min_czas)
  93. {
  94. $new[]=$old_id.":".$old_time; // przypisanie zmiennej $new[] która jest tablicą id sesji starych danych
  95. }
  96. }
  97. else
  98. {
  99. $new[]=$do_zapisania; // przypisanie zmiennej $new[] która jest tablicą id sesji $ID:$dzis_data
  100. $nowa=true; // zezwolenie na dodanie nowego wpisu
  101. }
  102. }
  103. if ($nowa==false) // jeżeli nie ma nowego wpisu
  104. {
  105. $new[]=$do_zapisania; // przypisanie zmiennej $new[] która jest tablicą id sesji $ID:$dzis_data
  106. }
  107. $online=count($new); // zliczenie ilości wpisów, które oznaczają ilość osób aktualnie znajdujących się na naszej stronie
  108. $save=implode("\n",$new); // przygotowanie nowego wpisu który zostane dodany w nowej linii
  109. }
  110.  
  111. $zapisz_plik = fopen($plik2, "w"); // otwieranie pliku do zapisu
  112. fwrite($zapisz_plik, $save); // zapis pliku z nowymi wartościami
  113. fclose($zapisz_plik); // zamknięcie includes/tmp
  114.  
  115. function listaip() {
  116.  
  117. function truncateUrl($url,$start,$end,$limit){
  118. if(strlen($url)>$limit){
  119. $poczatek = substr($url,0,$start);
  120. $koniec = substr($url,-$end);
  121. $newUrl = $poczatek.'...'.$koniec;
  122. return $newUrl;
  123. }else{
  124. return $url;
  125. }
  126. }
  127.  
  128. $plik = "lista";
  129. $buffer=$tablica[count($tablica)-1];
  130. $plik = file($plik);
  131.  
  132. echo "\n";
  133.  
  134. switch ($_GET['pokaz'])
  135. {
  136. case'uq':
  137. {
  138. echo"<TABLE BORDER='1'>
  139.  
  140. <tr>
  141. <td width='15%'><font size='1' face='Tahoma' color='red'><b>Data</td>
  142. <td ><font size='1' face='Tahoma' color='red'><b>IP</td>
  143. <td width='30%'><font size='1' face='Tahoma' color='red'><b>Host</td>
  144. <td ><font size='1' face='Tahoma' color='red'><b>Adres strony</td>
  145. </tr>";
  146.  
  147. $liczba_wierszy = sizeof ($plik);
  148.  
  149. for ($i=$liczba_wierszy-80; $i<=$liczba_wierszy-1; $i++) // wyświetlimy teraz ostatnie 20 wpisów, zamiast wszystkich których może być kilka tysięcy...
  150. {
  151. $linia=explode("!@!@!",$plik[$i]);
  152. echo "<tr><td><font size='1' face='Tahoma' color='#c0c0c0'><b>$linia[1] $linia[0]</td>
  153. <td><font size='1' face='Tahoma' color='#c0c0c0'><b>$linia[2]</td>
  154. <td><font size='1' face='Tahoma' color='#c0c0c0'><b>$linia[3]</td>
  155. <td><font size='1' face='Tahoma' color='#c0c0c0'><b><a href='$linia[4]'>";echo truncateUrl($linia[4],50,5,55);echo"</a></td>
  156. </tr>";
  157. }
  158. echo'</TABLE>';
  159. }
  160. break;
  161. }
  162.  
  163. }
  164. ?>



  1. Wyświetlanie



  1. $plik = "lista";
  2.  
  3. function truncateUrl($url,$start,$end,$limit){
  4. if(strlen($url)>$limit){
  5. $poczatek = substr($url,0,$start);
  6. $koniec = substr($url,-$end);
  7. $newUrl = $poczatek.'...'.$koniec;
  8. return $newUrl;
  9. } else {
  10. return $url;
  11.  
  12. }
  13.  
  14. echo"<table width='755px' border='1' rules='all' frame='void'>
  15.  
  16. <tr align='center'>
  17. <td width='16%'><font size='1' face='Tahoma' color='red'><b>Data</td>
  18. <td ><font size='1' face='Tahoma' color='red'><b>IP</td>
  19. <td width='30%'><font size='1' face='Tahoma' color='red'><b>Host</td>
  20. <td ><font size='1' face='Tahoma' color='red'><b>Adres strony</td>
  21. </tr>";
  22.  
  23. $liczba_wierszy = sizeof ($plik);
  24.  
  25. for ($i=$liczba_wierszy-80; $i<=$liczba_wierszy-1; $i++) // wyświetlimy teraz ostatnie 20 wpisów, zamiast wszystkich których może być kilka tysięcy...
  26. {
  27. $linia=explode("!@!@!",$plik[$i]);
  28. echo "<tr><td><font size='1' face='Tahoma' color='#c0c0c0'><b>$linia[1] $linia[0]</td>
  29. <td><font size='1' face='Tahoma' color='#c0c0c0'><b>$linia[2]</td>
  30. <td><font size='1' face='Tahoma' color='#c0c0c0'><b>";echo truncateUrl($linia[3],31,5,36);echo"</td>
  31. <td><font size='1' face='Tahoma' color='#c0c0c0'><b><a href='$linia[4]'>";echo truncateUrl($linia[4],42,5,47);echo"</a></td>
  32. </tr>";
  33. }
  34. echo'</TABLE>';



Plik lista


  1. 17:50:15!@!@!27.07.2012!@!@!7*.25*.1*7.141!@!@!*7-25*-15*-1*1.adsl.inetia.pl!@!@!
  2. 17:46:42!@!@!28.07.2012!@!@!*7.2*4.1*9.1*8!@!@!7*-*5*-1*9-**8.adsl.inetia.pl!@!@!




I niestety nie wyświetla mi tych rekordów z pliku lista, wygląda to tak: http://ss-host.pl/images/1jvj.png
sebastian.rozmus
Hejka,

chyba chodziło Ci o coś takiego:

  1. $plik = file_get_contents("lista");
  2. $plik = explode( "\n", $plik );
  3. $liczba_wierszy = sizeof ($plik);


prawda?

ponadto:

  1. for ($i=$liczba_wierszy-80; $i<=$liczba_wierszy-1; $i++)


chyba powinno być:

  1. for ($i=( $liczba_wierszy-20 ) >= 0 ? $liczba_wierszy-20 : 0) ; $i<=$liczba_wierszy-1; $i++)
LucKy_skiLL
Raczej nie, nic nie pomogło.
sebastian.rozmus
Przepraszam, zrobiłem literówkę. Powinno być:

  1. for ( $i=($liczba_wierszy-20 >= 0 ? $liczba_wierszy-20 : 0) ; $i<=$liczba_wierszy-1; $i++)


chyba powinno załatwić sprawę. Swoją drogą wcześniejszy kod powinien wyrzucić syntax error

EDIT: Pozatym w funkcji truncateUrl nie dałeś zamknięcia sekcji else ; ) jak to zmienisz to będzie już śmigało
LucKy_skiLL
Cytat(sebastian.rozmus @ 28.07.2012, 23:34:44 ) *
EDIT: Pozatym w funkcji truncateUrl nie dałeś zamknięcia sekcji else ; ) jak to zmienisz to będzie już śmigało


To błąd przy kopiowaniu, w pliku mam klamre, co do pętli for to zmieniłem i nic nie pomogło, tylko zmieniło mi wygląd na taki

http://ss-host.pl/images/1yuy.png
sebastian.rozmus
Kod który podałeś, po dodaniu klamry i wprowadzeniu moich poprawek działa na localhoście ; )
LucKy_skiLL
Ale którym kodem Pan to wyświetla ?
sebastian.rozmus
Po sklejeniu działa poprawnie:

  1. <?php
  2. $plik = file_get_contents("lista");
  3. $plik = explode( "\n", $plik );
  4. $liczba_wierszy = sizeof ($plik);
  5.  
  6. function truncateUrl($url,$start,$end,$limit){
  7. if(strlen($url)>$limit){
  8. $poczatek = substr($url,0,$start);
  9. $koniec = substr($url,-$end);
  10. $newUrl = $poczatek.'...'.$koniec;
  11. return $newUrl;
  12. } else {
  13. return $url;
  14. }
  15. }
  16.  
  17. echo"<table width='755px' border='1' rules='all' frame='void'>
  18. <tr align='center'>
  19. <td width='16%'><font size='1' face='Tahoma' color='red'><b>Data</td>
  20. <td ><font size='1' face='Tahoma' color='red'><b>IP</td>
  21. <td width='30%'><font size='1' face='Tahoma' color='red'><b>Host</td>
  22. <td ><font size='1' face='Tahoma' color='red'><b>Adres strony</td>
  23. </tr>";
  24.  
  25. $liczba_wierszy = sizeof ($plik);
  26. for ( $i=($liczba_wierszy-20 >= 0 ? $liczba_wierszy-20 : 0) ; $i<=$liczba_wierszy-1; $i++) // wyświetlimy teraz ostatnie 20 wpisów, zamiast wszystkich których może być kilka tysięcy...
  27. {
  28. $linia=explode("!@!@!",$plik[$i]);
  29. echo "<tr><td><font size='1' face='Tahoma' color='#c0c0c0'><b>$linia[1] $linia[0]</td>
  30. <td><font size='1' face='Tahoma' color='#c0c0c0'><b>$linia[2]</td>
  31. <td><font size='1' face='Tahoma' color='#c0c0c0'><b>";echo truncateUrl($linia[3],31,5,36);echo"</td>
  32. <td><font size='1' face='Tahoma' color='#c0c0c0'><b><a href='$linia[4]'>";echo truncateUrl($linia[4],42,5,47);echo"</a></td>
  33. </tr>";
  34. }
  35. echo'</TABLE>';
  36.  
  37. ?>
LucKy_skiLL
Teraz działa, dziękuje, mam jeszcze jeden problem, ponieważ tabelka mi się trochę nie mieści, wygląda to tak:

http://ss-host.pl/images/1rrr.png


Zmieniałem table width='755px', ale nic nie pomogło.
BaN
width dla table powinno być bez jednostek px, zobacz: Calculating the width of columns
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.