Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: licznik osob online
Forum PHP.pl > Forum > PHP
uczaj21
Prosze o pomoc mam skrypt php pokazujacy ilosc osob na stronie online oraz ilosc osob odwiedzonych strone i nr ip.Problem polega na liczniku osob online na www zawsze pokazuje 1 osobe chodz jest ich wieksza ilosc.Tylko ta opcja zle dziala inne dzialaja prawidlowo
  1. <?php
  2. $ip = $_SERVER['REMOTE_ADDR'];
  3.  
  4. function badIP($ip)
  5. {
  6. $end_line = "r\n";
  7. if(file_exists("banned_ip.txt")){
  8.   $fd = fopen("banned_ip.txt", "r+");
  9. }
  10. else{
  11.   $fd = fopen("banned_ip.txt", "a+");
  12. }
  13. if(!$fd) return false;
  14. while (!feof ($fd)) {
  15.   $line = trim(fgets($fd));
  16.   if($line == $ip){
  17.     fclose($fd);
  18.     return true;
  19.   }
  20. }
  21. fseek($fd, filesize("banned_ip.txt"));
  22. fputs($fd, $ip.$end_line);
  23. fclose($fd);
  24. return false;
  25. }
  26.  
  27. function getHits()
  28. {
  29. if(($fp = @fopen("counter.txt", "r+")) === false)
  30.   return false;
  31. $count = fgets($fp);
  32. if(!badIP($_SERVER['REMOTE_ADDR'])){
  33.   $count = $count + 1;
  34.   fseek($fp, 0);
  35.   fputs($fp, $count);
  36. }
  37. fclose($fp);
  38. return $count;
  39. }
  40. $minut = 1;
  41. $teraz = time()+60*$minut;
  42. $bazaip = file("ip.txt");
  43. $ile = count($bazaip);
  44. $ip = $_SERVER["REMOTE_ADDR"];
  45.  
  46. for ($i=0;$i<$ile;$i++) {
  47. $pol = explode("",$bazaip[$i]);
  48. if ($pol[2]<time()) {$bazaip[$i]="";}
  49. if ($pol[1]==$ip) {
  50. $bazaip[$i]="$ip$teraz <br>\n"; $jest=1;
  51. }
  52. }
  53.  
  54. if ($jest<>1) $bazaip[]="$ip $teraz\n";
  55. $f = fopen("ip.txt","w");flock($f,2);
  56. for ($i=0;$i<$ile+1;$i++) {
  57. if ($bazaip[$i]<>"") { fwrite($f, $bazaip[$i]); $ileip++; }
  58. }
  59. flock($f,3); fclose($f);
  60.  
  61. echo '<font size="2"><u>Gosci na naszej stronie online : </u></font>'.'<b><font color="#099FF0">'.$ileip.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></font>';
  62. echo('<font size="2"><u>Ta strona została odwiedzona : </u></font>'.'<font color="#099FF0"><b>'.getHits().'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></font>');
  63. echo '<font size="2"><u>&nbsp;Twoj numer ip : &nbsp;</u></font>'.'<b><font color="#099FF0">'.$ip.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></b>';
  64. ?>
okitoki
Kod
<?php
$ip = $_SERVER['REMOTE_ADDR'];

function badIP($ip)
    {
        $end_line = "r\n";
        if(file_exists("banned_ip.txt"))
              $fd = fopen("banned_ip.txt", "r+");
        else
            $fd = fopen("banned_ip.txt", "a+");
          if(!$fd) return false;
        while (!feof ($fd))
            {
                $line = trim(fgets($fd));
                if($line == $ip)
                {
                       fclose($fd);
                      return true;
                }
            }
        
    fseek($fd, filesize("banned_ip.txt"));
    fputs($fd, $ip.$end_line);
    fclose($fd);
    return false;
    }

function getHits()
    {
        if(($fp = fopen("counter.txt", "r+")) === false)
              return false;
        $count = fgets($fp);
        if(!badIP($_SERVER['REMOTE_ADDR']))
        {
            $count = $count + 1;
              fseek($fp, 0);
              fputs($fp, $count);
        }
        fclose($fp);
        return $count;
    }
    
$minut = 1;
$teraz = time()+60*$minut;
$bazaip = file("ip.txt");
$jest=0;
$ileip=0;

for ($i=0;$i<count($bazaip);$i++)
{
    if(eregi("([0-9.]{1,})( )([0-9]{1,})",$bazaip[$i],$pol))
    {
        if ($pol[3]<time())    $bazaip[$i]="";
        if ($pol[1]==$ip)
            {
                $bazaip[$i]="$ip $teraz\n";
                $jest=1;
            }
    }
}

if ($jest<>1) $bazaip[]="$ip $teraz\n";
$f = fopen("ip.txt","w");flock($f,2);
for ($i=0;$i<count($bazaip);$i++)
    if ($bazaip[$i]<>"")
        {
            fwrite($f, $bazaip[$i]);
            $ileip++;
        }
flock($f,3); fclose($f);

echo '<font size="2"><u>Gosci na naszej stronie online : </u></font>'.'<b><font color="#099FF0">'.$ileip.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></font>';
echo('<font size="2"><u>Ta strona została odwiedzona : </u></font>'.'<font color="#099FF0"><b>'.getHits().'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></font>');
echo '<font size="2"><u>&nbsp;Twoj numer ip : &nbsp;</u></font>'.'<b><font color="#099FF0">'.$ip.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></b>';
?>
uczaj21
Dzieki serdecznie działa a czy mógł byś wyjaśnić te zmiany w kodzie
okitoki
praktycznie nie wiele zmodyfikowałem twój kod, funkcja eregi powoduje szczegółowe rozbicie zmiennej $bazaip[$i] na IP i time. co powoduje że nie dostają się tam żadne inne znaki typu enter, ma to znaczenie potem w porównaniu
uczaj21
zauważyłem że po zmodifikowaniu kodu licznik odwiedzin po odswiezaniu strony nabija kolejne wartosci nie jest odporny na odswiezanie a byl odporny questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif
okitoki
bo masz w kodzie dużo błędów, i to nie moich
Kod
<?php
$ip = $_SERVER['REMOTE_ADDR'];

function badIP($ip)
    {
        $end_line = "\r\n"; // tu miałes blad exclamation.gif!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        if(file_exists("banned_ip.txt"))
              $fd = fopen("banned_ip.txt", "r+");
        else
            $fd = fopen("banned_ip.txt", "a+");
          if(!$fd) return false;
        while (!feof ($fd))
            {
                $line = trim(fgets($fd));
                if($line == $ip)
                {
                       fclose($fd);
                      return true;
                }
            }
        
    fseek($fd, filesize("banned_ip.txt"));
    fputs($fd, $ip.$end_line);
    fclose($fd);
    return false;
    }

function getHits()
    {
        if(($fp = fopen("counter.txt", "r+")) === false)
              return false;
        $count = fgets($fp);
        if(!badIP($_SERVER['REMOTE_ADDR']))
        {
            $count = $count + 1;
              fseek($fp, 0);
              fputs($fp, $count);
        }
        fclose($fp);
        return $count;
    }
    
$minut = 1;
$teraz = time()+60*$minut;
$bazaip = file("ip.txt");
$jest=0;
$ileip=0;

for ($i=0;$i<count($bazaip);$i++)
{
    if(eregi("([0-9.]{1,})( )([0-9]{1,})",$bazaip[$i],$pol))
    {
        if ($pol[3]<time())    $bazaip[$i]="";
        if ($pol[1]==$ip)
            {
                $bazaip[$i]="$ip $teraz\n";
                $jest=1;
            }
    }
}

if ($jest<>1) $bazaip[]="$ip $teraz\n";
$f = fopen("ip.txt","w");flock($f,2);
for ($i=0;$i<count($bazaip);$i++)
    if ($bazaip[$i]<>"")
        {
            fwrite($f, $bazaip[$i]);
            $ileip++;
        }
flock($f,3); fclose($f);

echo '<font size="2"><u>Gosci na naszej stronie online : </u></font>'.'<b><font color="#099FF0">'.$ileip.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></font>';
echo('<font size="2"><u>Ta strona została odwiedzona : </u></font>'.'<font color="#099FF0"><b>'.getHits().'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></font>');
echo '<font size="2"><u>&nbsp;Twoj numer ip : &nbsp;</u></font>'.'<b><font color="#099FF0">'.$ip.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></b>';
?>
uczaj21
jeśli są jakieś błedy to prosze o zniwelowanie ich ogolnie skrypt to ściągłem z internetu a nie jestem az na takim poziomie aby dojrzec i usunac bledy zalezy mi na tym aby skrypcik dzialal prawidlowo.Dzisiaj zauwazylem jak bylem na uczelni i wszedłem na stronke gdzie zainstalowalem skrypt komp postawiony byl na linuksie i co zauwazylem ze licznik online wcale nie dzialal a licznik odwiedzin odswiezal sie questionmark.gifquestionmark.gif przyszedłem do domu i z ciekawosci sprawdzilem u siebie na win xp i co dziwne licznik online dziala i licznik odwiedzin rowniez questionmark.gifquestionmark.gifquestionmark.gif
okitoki
no cóż, tych błędów ja nie zrobiłem, one już są w skrypcie który tu wstawiłeś, a problem był na linuxie, bo jest lepiej zabespieczony niż windows,
uczaj21
rozumiem ze to nie jest pana wina z tymi bledami lecz prosze o dokonanie zmian aby usunac te bledy Z gory dziekuje
okitoki
ostatni skrypt który ci wysłałem ma już poprawione te błędy exclamation.gif
uczaj21
ok dzieki przetestuje skrypt i sie odezwie z gory dziekuje
phpion
Cytat(uczaj21 @ 10.05.2009, 20:39:38 ) *
rozumiem ze to nie jest pana wina z tymi bledami lecz prosze o dokonanie zmian aby usunac te bledy Z gory dziekuje

<ot>
Zabrzmiało to jak jakiś zleceniodawca, który namierzył błędy po poprzednim programiście i prosi aktualnego o ich poprawienie...
</ot>
okitoki
wiem że mój czas i wiedza jest cenna smile.gif. no cóż czasami trzeba też innym pomóc
uczaj21
Witam ponownie po testowaniu skryptu zauwazylem kolejny mankament tyczacy sie licznika odwiedzin.Zauwazylem iz kiedy wejde na stronke to licznik doda kolejna wartosc lecz tylko raz jak raz zapisze sobie nr ip w pliku banned_ip.txt to juz na zawsze a powinno z tego pliku kasowac sie nr ip po jakims czasie a tu sie nie kasuje i jak juz wejde np na drugi dzien to i tak licznik nie naliczy tego?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif
phpion
Cytat(uczaj21 @ 19.05.2009, 21:27:33 ) *
kiedy wejde na stronke to licznik doda kolejna wartosc lecz tylko raz jak raz zapisze sobie nr ip w pliku banned_ip.txt to juz na zawsze a powinno z tego pliku kasowac sie nr ip po jakims czasie a tu sie nie kasuje i jak juz wejde np na drugi dzien to i tak licznik nie naliczy tego?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif

Masz ewidentne problemy z przekazaniem własnych myśli.

Jeżeli już znalazłeś błąd to czy próbowałeś go wyeliminować? Wydaje mi się, że czekasz aż ktoś zrobi to za ciebie... takie coś nazywa się zleceniem prac.
nieraczek
O nie - znowu uczaj21 słynacy z tego, że czeka aż ktoś mu coś zrobi po czym nic już więcej w danym temacie nie napisze - tak jak zawsze.......
okitoki
Cytat(uczaj21 @ 19.05.2009, 21:27:33 ) *
Witam ponownie po testowaniu skryptu zauwazylem kolejny mankament tyczacy sie licznika odwiedzin.Zauwazylem iz kiedy wejde na stronke to licznik doda kolejna wartosc lecz tylko raz jak raz zapisze sobie nr ip w pliku banned_ip.txt to juz na zawsze a powinno z tego pliku kasowac sie nr ip po jakims czasie a tu sie nie kasuje i jak juz wejde np na drugi dzien to i tak licznik nie naliczy tego?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif


tak jest skonstruowana część tego skryptu zapisująca do pliku ip.txt, zerknij na to może się uda przerobić powiększając czas z minyty na dobe
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.