Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] zapisanie i edytowanie IP'ków - Licznik
Forum PHP.pl > Forum > Przedszkole
-astronom-
witam! pierwszy raz u was :D

mam plik w którym mam zamiar gromadzić ip każdego kto odwiedzi moją strone. jeśli ktoś odwiedza ją poraz kolejny liczba stojąca przy ip ma zostać zwiększona. jesli pierwszy raz to tworzy nową linie: IP;0;\n
format wygląda tak:
100.100.100.100;0;
seperator ';'
jedna linia jeden user.

mój kod wygląda tak


  1. <?php
  2. //sprawdza czy ip jest w pliku, jesli jest zwiększa liczbe o jeden.
  3. $klient = $_SERVER['REMOTE_ADDR'];//ip usera
  4. $ipiczek=fopen("name_clients.txt","r");
  5. $ip_tekst =fread($ipiczek, filesize("name_clients.txt"));
  6. fclose($ipiczek);
  7. $ipdane = explode(";", $ip_tekst); //dane podzielone w tablicy wczytane z pliku
  8. $bool_ip_exist=false;
  9.  
  10. for ($int = 0; $int<sizeof($ipdane)-1; $int++)
  11. //przesukanie czy w pliku jest dany ipik
  12. {
  13. if($klient == $ipdane[$int])
  14. //jeśli tak! zwiększ zmienną o 1
  15. {
  16. $ipdane[$int+1]++;
  17. $bool_ip_exist=true;//informacja że ip jest. false - nie znaleziono
  18. }
  19. }
  20.  
  21. for($int = 0; $int>sizeof($ipdane)-1; $int+2)
  22. //scalanie stringa
  23. {
  24.  
  25. $date_to_file .= $ipdane[$int].";".$ipdane[$int+1].";\n";
  26.  
  27. }
  28. //end save str to file
  29. $ipiczek=fopen("name_clients.txt","a");
  30. $open_to_write =fwrite($ipiczek, $date_to_file);
  31. fclose($ipiczek);
  32.  
  33. if($bool_ip_exist==false)
  34. //nie znaleziono ipka w pliku
  35. {
  36.  
  37. $plik_ip_do_zapisu=fopen("name_clients.txt","a");//dopisuje na końcu pliku
  38. fwrite($plik_ip_do_zapisu, $klient.";0;");//zapisuje ip nowego usera + ; + 0 + ;
  39. fclose($plik_ip_do_zapisu);
  40. }
  41. ?>
piotrooo89
no dobrze ale w czym problem?
-astronom-
no tak nie napisałem.

uruchamiam plik lokalnie w pliku mam "127.0.0.1;0;" odświeżam i nic. z każdym odświeżeniem powinna być inkrementacja. jest bez zmian. dodam że wcześniej zwracało mi że nie może być odczytane 0 bitów, tzn musi być wiecej w lini:
  1. $ip_tekst =fread($ipiczek, filesize("name_clients.txt"));
teraz nic nie zwraca i nic sie nie dzieje.

pogubiłem się w tym kodzie już. wyświetlam tablice kombinuje - bezskutecznie.
piotrooo89
wyskrobałem Ci coś takiego na szybko:

  1. $imie = $_SERVER['LOGNAME'];
  2. $fileName = 'nazwy';
  3. $update = false;
  4.  
  5. if ( is_file($fileName) )
  6. {
  7. $plik = file($fileName, FILE_SKIP_EMPTY_LINES);
  8.  
  9. foreach ($plik as $linia => $string)
  10. {
  11. $liniaTmp = $string;
  12. $strTmp = explode(';', $string);
  13.  
  14. if ( $strTmp[0] == $imie )
  15. {
  16. $licznik = $strTmp[1] + 1;
  17. $liniaTmp = $imie.';'.$licznik.PHP_EOL;
  18. $update = true;
  19. }
  20.  
  21. $newFile[$linia] = $liniaTmp;
  22. }
  23.  
  24. if ( $update === false )
  25. {
  26. $line = $imie.';0'.PHP_EOL;
  27. $newFile[] = $line;
  28. }
  29.  
  30. file_put_contents($fileName, $newFile);
  31. }
  32. else
  33. {
  34. $line = $imie.';0'.PHP_EOL;
  35. file_put_contents($fileName, $line);
  36. }
-astronom-
  1. file_put_contents()
- ciekawa a zarazem zaawansowana funkcja.

kod działa fenomenalnie! czapki z głów! dzieki.

mam takie pytanie: czy może się tak zdarzyć że (przeciętny - darmowy) hosting zablokuje użycie stałych których użyłeś? FILE_SKIP_EMPTY_LINES i PHP_EOL
piotrooo89
jeśli na serwerze jest wersja php >5.0.2 to nie powinno być problemu.
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.