Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt] Licznik
Forum PHP.pl > Inne > Oceny
slammer
  1. <?php
  2. //tworzenie nowej sesji
  3.  
  4. //odczytywanie danych z pliku
  5. $path = 'Status/licznik.txt';
  6.  
  7. //sprawdza czy plik istnieje jesli nie to tlumi blad i tworzy nowy
  8. if (!file_exists($path))
  9. {
  10. @fopen($path, "w");
  11. @fputs($fp, "0|0|0|0|0|0");
  12. @fclose($fp);
  13. }
  14. $plik = file($path);
  15. $data = explode('|',$plik[0]);
  16. $fp = fopen($path, "w");
  17.  
  18. //przypisanie danych z pliku do zmiennych
  19. $dzis = $data[0];
  20. $wczoraj = $data[1];
  21. $miesiac = $data[2];
  22. $calos = $data[3];
  23. $zeszly_miech = $data[4];
  24. $d = $data[5];
  25. $m = $data[6];
  26.  
  27. //sprawdzenie aktualnego dnia i w wypadku zmiany odpowiednie ustawienie licznika
  28. $d_dzis = date('d');
  29. if ($d != $d_dzis) 
  30. {
  31. $wczoraj = $dzis;
  32. $dzis = 0;
  33. }
  34.  
  35. //sprawdzenie aktualnego miesiaca i w wypadku zmiany odpowiednie ustawienie liczni
    ka
  36. $m_dzis = date('m');
  37. if ($m != $m_dzis)
  38. {
  39. $zeszly_miech = $miesiac;
  40. $miesiac = 0;
  41. }
  42.  
  43. //sprawdzenie czy strona zostala odswiezona, jesli tak nie zostana przekazane dane
     do licznika
  44. if(!session_is_registered('sesja')){
  45. $dzis += 1;
  46. $miesiac += 1;
  47. $calos += 1;
  48. }
  49.  
  50. //sprawdza czy plik jest zablokowany
  51. if(!flock($fp, LOCK_EX))
  52. {
  53.  fclose($fp);
  54.  return;
  55. }
  56.  
  57. //zapisanie stnu licznika do pliku
  58. else
  59. {
  60.  $ciag = $dzis.'|'.$wczoraj.'|'.$miesiac.'|'.$calos.'|'.$zeszly_miech.'|'.$d_dzis.'|'.$m_dzis;
  61.  fwrite($fp, $ciag);
  62.  flock($fp, LOCK_UN);
  63.  fclose($fp);
  64. }
  65.  
  66. //rejesracja zmiennej sesji ktora posluzy do sprawdzenia odswierzania strony
  67.  
  68. //wypisanie stanu licznika na ekran
  69. echo 'Odwiedzin Dzis:'.$dzis.'<br>Odwiedzin Wczoraj:'.$wczoraj.'<br>Odwiedzin w tym m-cu:'.$miesiac.'<br>Odwiedzin w zeszlym m-cu:'.$zeszly_miech.'<br>Lacznie:'.$calos;
  70.  
  71. ?>
strife
Witam,

Proponuje zamknąć skrypt w funkcji/klasie, a kod uczynić bardziej przejrzystym, więcej odstępów. Jeśli zawierało by się to w klasie dodał bym kilka metod które odpowiadały by za tworzenie nowego pliku licznika, zerowania, wyświetlania jego zawartości etc. Generalnie nic nadzwyczajnego, skrypt do napisania w kilka minut...

Pozdrawiam!
Zajec
Odporny na odświeżanie? A co z przeglądarkami z wyłączonymi cookies?
slammer
ale to dziala na sesje nie na cookies
wojto
Troche nieoptymalnie napisany, do zmiany:
  1. <?php
  2. $dzis = $data[0];
  3. $wczoraj = $data[1];
  4. $miesiac = $data[2];
  5. $calos = $data[3];
  6. $zeszly_miech = $data[4];
  7. $d = $data[5];
  8. $m = $data[6];
  9. ?>
niepotrzebne przypisania, mozesz korzystac caly czas z elementow tablicy $data, czyli $data[0], $data[1] i na nich pracowac, wtedy moglbys na koncu zamiast:
  1. <?php
  2. $ciag = $dzis.'|'.$wczoraj.'|'.$miesiac.'|'.$calos.'|'.$zeszly_miech.'|'.$d_dzis.'|'.$m_dzis;
  3. ?>
dac implode dla tej tablicy

  1. <?php
  2. $dzis += 1;
  3. ?>
szybciej bedzie: $dzis++;

  1. <?php
  2. ?>
skrypt bedzie dzialal tylko na serwerach z wylaczonym register_globals, aby dzialal na kazdym serwerze powinienes uzywac $_SESSION['sesja'];
slammer
Dzieki za wskazówki! Jestem początkujący więc ma to dla mnie wielkie znaczenie.

  1. <?php
  2. $dzis = $data[0];
  3. $wczoraj = $data[1];
  4. $miesiac = $data[2];
  5. $calos = $data[3];
  6. $zeszly_miech = $data[4];
  7. $d = $data[5];
  8. $m = $data[6];
  9. ?>

Moze i nieoptymalne, ale dzieki temu lepiej sie orientuje w skrycie.



  1. <?php
  2. if($_SESSION['sesja'] != 1){
  3. $dzis++;
  4. $miesiac++;
  5. $calos++;
  6. }
  7.  
  8. if(!flock($fp, LOCK_EX))
  9. {
  10. fclose($fp);
  11. return;
  12. }
  13. else
  14. {
  15. $tab = array($dzis, $wczoraj, $miesiac, $calos, $zeszly_miech, $d_dzis, $m_dzis, $r_dzis);
  16. $ciag = implode("|", $tab);
  17.  
  18.  fwrite($fp, $ciag);
  19.  flock($fp, LOCK_UN);
  20.  fclose($fp);
  21. }
  22.  
  23. $_SESSION['sesja'] = 1;
  24. ?>

Zmienione wedle zaleceń.
Pigula
ale z tego co wiedze to jak ktos wcodzi na strone to go zlicza i dobrze tongue.gif ale jak wylaczy przegladarke i wejdzie jeszcze raz po 10s to znowu go zliczy to zdecydowanie zle sad.gif powinienes dolozyc cookie i/albo zapis ip do bazy to poprawi miarodajnosc wynikow winksmiley.jpg
Zajec
Jak będzie miał odwiedzający cookies wyłączone to niekoniecznie zostanie nawiązana sesja.

Jak zamknie się przeglądarkę, to część sesji jest zrywana.
slammer
Z tego co się orientuje to 99% użytkowników ma włączone cookies. Wg mnie wyłączenie tej opcji jest bez sensowne gdyż uniemożliwia kożystanie z większośći stron internetowych.

A co do cookies wyglądałoby to tak:
  1. <?php
  2.  
  3. //odczytywanie danych z pliku
  4. $path = 'Status/licznik.txt';
  5.  
  6. //sprawdza czy plik istnieje jesli nie to tlumi blad i tworzy nowy
  7. if (!file_exists($path))
  8. {
  9. @fopen($path, "w");
  10. @fputs($fp, "0|0|0|0|0|0");
  11. @fclose($fp);
  12. }
  13. $plik = file($path);
  14. $data = explode('|',$plik[0]);
  15. $fp = fopen($path, "w");
  16.  
  17. //przypisanie danych z pliku do zmiennych
  18. $dzis = $data[0];
  19. $wczoraj = $data[1];
  20. $miesiac = $data[2];
  21. $calos = $data[3];
  22. $zeszly_miech = $data[4];
  23. $d = $data[5];
  24. $m = $data[6];
  25.  
  26. //sprawdzenie aktualnego dnia i w wypadku zmiany odpowiednie ustawienie licznika
  27. $d_dzis = date('d');
  28. if ($d != $d_dzis) 
  29. {
  30. $wczoraj = $dzis;
  31. $dzis = 0;
  32. }
  33.  
  34. //sprawdzenie aktualnego miesiaca i w wypadku zmiany odpowiednie ustawienie liczni
    ka
  35. $m_dzis = date('m');
  36. if ($m != $m_dzis)
  37. {
  38. $zeszly_miech = $miesiac;
  39. $miesiac = 0;
  40. }
  41.  
  42. //sprawdzenie czy strona zostala odswiezona, jesli tak nie zostana przekazane dane
     do licznika
  43. if($_COOKIE['sprawdz'] != 1){
  44. $dzis++;
  45. $miesiac++;
  46. $calos++;
  47. }
  48.  
  49. if(!flock($fp, LOCK_EX))
  50. {
  51. fclose($fp);
  52. return;
  53. }
  54. //zapisanie stanu licznika do tablicy
  55. else
  56. {
  57. $tab = array($dzis, $wczoraj, $miesiac, $calos, $zeszly_miech, $d_dzis, $m_dzis, $r_dzis);
  58. $ciag = implode("|", $tab);
  59.  
  60.  fwrite($fp, $ciag);
  61.  flock($fp, LOCK_UN);
  62.  fclose($fp);
  63. }
  64.  
  65. //stworzenie pliku cookie ktory posluzy do sprawdzenia odswiezania strony
  66. setcookie("sprawdz", '1', time()+30*86400);
  67.  
  68. //wypisanie stanu licznika na ekran
  69. echo 'Odwiedzin Dzis:'.$dzis.'<br>Odwiedzin Wczoraj:'.$wczoraj.'<br>Odwiedzin w tym m-cu:'.$miesiac.'<br>Odwiedzin w zeszlym m-cu:'.$zeszly_miech.'<br>Lacznie:'.$calos;
  70.  
  71. ?>


No i plik musi byc includowany przez np. index.php z opcja ob_start(); Jak sie go wlaczy bezposrednio to wywala błąd.
Zajec
Korzystanie.

Gdyby fałszowana była jedna odsłona strony na 100, to jeszcze bym nie narzekał. Ale jeśli taka osoba odrzucająca cookies wejdzie na 10 podstron, to masz już nieco większe przekłamanie w wartości licznika.

Poza tym ten 1% ludzi nie koniecznie odrzuca cookies z wszystkich stron. W Operze można np. wybrać, aby przed dodaniem cookies zawsze przeglądarka się najpierw mnie zapytała o zgodę. A użytkownik korzystający z tej opcji zgodzi sie na cookie raczej tylko wtedy, gdy się gdzieś loguje.
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.