Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [skrypt] Licznik, Licznik odporny na odświzanie...
slammer
post 2.12.2005, 00:10:26
Post #1





Grupa: Zarejestrowani
Postów: 187
Pomógł: 6
Dołączył: 31.08.2005
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


  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. ?>
Go to the top of the page
+Quote Post
strife
post 2.12.2005, 21:29:37
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


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!


--------------------
Go to the top of the page
+Quote Post
Zajec
post 3.12.2005, 11:32:21
Post #3





Grupa: Zarejestrowani
Postów: 1 086
Pomógł: 8
Dołączył: 10.12.2003

Ostrzeżenie: (0%)
-----


Odporny na odświeżanie? A co z przeglądarkami z wyłączonymi cookies?
Go to the top of the page
+Quote Post
slammer
post 5.12.2005, 07:09:42
Post #4





Grupa: Zarejestrowani
Postów: 187
Pomógł: 6
Dołączył: 31.08.2005
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


ale to dziala na sesje nie na cookies
Go to the top of the page
+Quote Post
wojto
post 5.12.2005, 15:09:56
Post #5





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 29.06.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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'];


--------------------
Go to the top of the page
+Quote Post
slammer
post 5.12.2005, 15:51:16
Post #6





Grupa: Zarejestrowani
Postów: 187
Pomógł: 6
Dołączył: 31.08.2005
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


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ń.
Go to the top of the page
+Quote Post
Pigula
post 6.12.2005, 14:53:02
Post #7





Grupa: Zarejestrowani
Postów: 446
Pomógł: 0
Dołączył: 5.03.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Zajec
post 6.12.2005, 17:00:20
Post #8





Grupa: Zarejestrowani
Postów: 1 086
Pomógł: 8
Dołączył: 10.12.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
slammer
post 7.12.2005, 09:19:55
Post #9





Grupa: Zarejestrowani
Postów: 187
Pomógł: 6
Dołączył: 31.08.2005
Skąd: Bielsko-Biała

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Zajec
post 8.12.2005, 08:14:11
Post #10





Grupa: Zarejestrowani
Postów: 1 086
Pomógł: 8
Dołączył: 10.12.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 2.07.2025 - 12:49