Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] licznik
Forum PHP.pl > Inne > Oceny
shpyo
  1. <?php
  2.  
  3. /**
  4. * licznik odwiedzin strony v1.0
  5. * @autor Piotr 'shpyo' Cichosz <piotrek@widok2.net>
  6. * struktura pliku \"licznik.dat\":
  7. * aktulny_dzien||ile_wczoraj||ile_dzisiaj||w_sumie
  8. *
  9. */
  10.  
  11. $arrFile = array();
  12. $arrPlik = array();
  13.  
  14. if( $_COOKIE[ 'licznik' ] )
  15. {
  16. $arrFile = file( &#092;"licznik.dat\" );
  17. $arrPlik = explode(&#092;"||\", $arrFile[0]);
  18. }
  19.  
  20. else
  21. {
  22. setcookie('licznik', '1', time()+(3600*24));  //ustawienie ciasteczek na 24h
  23. $arrFile = file( &#092;"licznik.dat\" );
  24. $arrPlik = explode(&#092;"||\", $arrFile[0]);
  25.  
  26. if( $arrPlik[0] == date(&#092;"d\") )
  27. {
  28. $arrPlik[2]++;  //zwiększenie ilości w dzisiejszym dniu
  29. $arrPlik[3]++;  //zwiększenie ogólnej liczby odwiedzin
  30. }
  31.  
  32. else
  33. {
  34. $arrPlik[0] = date(&#092;"d\");  //nadanie nowej daty
  35. $arrPlik[1] = $arrPlik[2];  //zapamiętanie ile osób odwiedziło stronę wczoraj
  36. $arrPlik[2] = 1;  //ustawienie nowej wartości dla dzisiaj
  37. $arrPlik[3]++;  //zwiększenie ogólnej liczby odwiedzin
  38. }
  39.  
  40. $temp = implode(&#092;"||\", $arrPlik);
  41. $arrFile = fopen( &#092;"licznik.dat\", 'w');
  42. fwrite($arrFile, $temp);
  43. fclose($arrFile);
  44. $arrFile = file( &#092;"licznik.dat\" );
  45. $arrPlik = explode(&#092;"||\", $arrFile[0]);
  46. }
  47.  
  48. echo 'odwiedziło nas: <b>' . $arrPlik[3] . '</b><br />
  49. wczoraj: <b>' . $arrPlik[1] . '</b><br />
  50. dzisiaj: <b>' . $arrPlik[2] . '</b>';
  51.  
  52. ?>


co myślicie o tym?
fajne? Pierwsza z moich publikacji która "idzie" w świat ;].
czekam na uwagi, pytania itp.

działanie można zobaczyć tu: http://widok2.net/~piotrek/licznik/
Vertical
Dobry pomysł. Zwłaszcza podoba mi się to, że pokazuje, ilu ludzi odwiedziło wczoraj i dzisiaj.
trucksweb
ciekway licznik !!tylko jakas grafike sie doda i jest super ! Podoba mi sie gdyz bardzo malo zajmuje ! tongue.gif
hwao
ale jak gosc ma wylaczone cookie to moe nastukac 1000 odwiedzin w ciagu 7 s ;-)
Proponowalbym to zabezpieczyc
mike
Cytat(hwao @ 2004-11-06 21:57:08)
ale jak gosc ma wylaczone cookie to moe nastukac 1000 odwiedzin w ciagu 7 s ;-)
Proponowalbym to zabezpieczyc

To fakt zabezbieczyc można.

Ale z drugiej strony : ranking ...
bela
  1. <?php
  2. /**
  3. * licznik odwiedzin strony v1.0
  4. * @autor Piotr 'shpyo' Cichosz <piotrek@widok2.net>
  5. * struktura pliku \"licznik.dat\":
  6. * aktulny_dzien||ile_wczoraj||ile_dzisiaj||w_sumie
  7. *
  8. */
  9. ?>


pisze się @author winksmiley.jpg
shpyo
@hwao: mike_mech dobrze gada :-) więc jak narazie nie widzę potrzeby, no chyba że ludzie poczują potrzebę wiedzy o ciasteczkach to wtedy....

@bela_666: a o ustawie o języku polskim słyszał ? tongue.gif
kubatron
Cytat(shpyo @ 2004-11-07 09:35:33)
@bela_666: a o ustawie o języku polskim słyszał ? tongue.gif

Tak, tylko że akurat @author się pisze a nie @autor smile.gif
mike
Ja tylko dodam że kod można znacznie skrócić ( o ile piszemy w PHP5 ) stosując:
1. file_get_contents() ;
2. file_put_contents() .
Vengeance
mozna zasotoswać polimorfizm czyli trzymac skrypt i liczbe odwiedzin w jednym pliku edytującym samego siebie. choc nie wiek jak wtedy ma sie sprawa z blokowaniem dostepu
mike
Cytat(Vengeance @ 2004-11-08 16:03:59)
mozna zasotoswać polimorfizm czyli trzymac skrypt i liczbe odwiedzin w jednym pliku edytującym samego siebie. choc nie wiek jak wtedy ma sie sprawa z blokowaniem dostepu

O jakim ty polimorfizmie mówisz questionmark.gif
Bo ja przez polimorfizm rozumiem:

Polimorfizm możemy określić jako wirtualizację operacji; jest to możliwość dynamicznego (późnego, realizowanego w fazie wykonania) wiązania nazwy operacji do wielu implementacji (metod) tej operacji w różnych klasach pozostających w relacji dziedziczenia. Wiązaniu towarzyszy mechanizm wyboru konkretnej implementacji. Wybór implementacji zależy od nazwy metody oraz od typu dynamicznego tego obiektu, dla którego została wywołana operacja, a nie od typu zmiennej, wskazującej ten obiekt.
Vengeance
Hmm mi chodzilo o cos takiego jak np. sa wirusy polimorficzne.
Czyli za każdą infekcją zmieniają swój kod tak aby antywirus nie mógł go łatwo wykyrwać.

Czyli jak dla mnie polimorfizm to 'proces' zmieniania przez aplikacje kodu jej samej.
shpyo
a o to i wersja DELUX (czyli w wersji obiektowej - fajne to jest! :-) )

  1. <?php
  2.  
  3. /****
  4. ** licznik odwiedzin strony v1.0
  5. ** @author Piotr 'shpyo' Cichosz <piotrek@widok2.net> //dedykowane bela_666;-)
  6. ** struktura pliku \"licznik.dat\" :
  7. ** aktualny_dzien||ile_wczoraj||ile_dzisiaj||w_sumie
  8. ****/
  9.  
  10. class Licznik
  11. {
  12.  
  13. var $dzisiaj; //liczba wejść w dzisiejszym dniu
  14. var $wczoraj; //liczba wejść we wczorajszym dniu
  15. var $w_sumie; //ogólna liczba wejść
  16. var $dzien;  //numer dnia
  17.  
  18. function ustawZmienne()
  19. {
  20. $arrFile = array();
  21. $arrDane = array();
  22. $arrFile = file(&#092;"licznik.dat\");
  23. $arrDane = explode(&#092;"||\", $arrFile[0]);
  24. $this->dzien = $arrDane[0];
  25. $this->dzisiaj = $arrDane[2];
  26. $this->wczoraj = $arrDane[1];
  27. $this->w_sumie = $arrDane[3];
  28. }
  29.  
  30.  function pokazDane()
  31. {
  32. echo 'w sumie: <b>'.$this->w_sumie.'</b><br />
  33. wczoraj: <b>'.$this->wczoraj.'</b><br />
  34. dzisiaj: <b>'.$this->dzisiaj.'</b><br />';
  35. }
  36.  
  37. function zapiszDane()
  38. {
  39. $arrFile = fopen( &#092;"licznik.dat\", 'w');
  40. fwrite($arrFile, &#092;"$this->dzien||$this->wczoraj||$this->dzisiaj||$this->w_sumie\");
  41. fclose($arrFile);
  42. }
  43.  
  44.  function zwiekszDane()
  45. {
  46. $this->dzisiaj++;
  47. $this->w_sumie++;
  48. }
  49.  
  50.  function przeladujLicznik()
  51. {
  52. $this->dzien = date(&#092;"d\");
  53. $this->wczoraj = $this->dzisiaj;
  54. $this->dzisiaj = 1;
  55. $this->w_sumie++;
  56. $this->zapiszDane();
  57. }
  58.  
  59. function sprDate()
  60. {
  61. if( $this->dzien == date(&#092;"d\") )
  62. {
  63. $this->zwiekszDane();
  64. $this->zapiszDane();
  65. $this->pokazDane();
  66. }
  67. else
  68. {
  69. $this->przeladujLicznik();
  70. $this->pokazDane();
  71. }
  72. }
  73.  
  74. }
  75.  
  76. $objLicznik = new Licznik;
  77. $objLicznik->ustawZmienne();
  78.  
  79.  
  80. if( isset ( $_COOKIE[ 'licznik' ] ) )
  81. {
  82.  $objLicznik->pokazDane();
  83. }
  84. else
  85. {
  86. setcookie('licznik', '1', time()+(60*60));
  87. $objLicznik->sprDate();
  88. }
  89.  
  90.  
  91. ?>
scanner
A gdzie się podział konstruktor w tej klasie?
Dla jakiej wersji php to jest napisane?

Kiepsko zaprojektowana klasa.
Jak dla mnie powinny być metody typu:
  1. <?php
  2.  
  3. $Counter->getYesterday();
  4. $Counter->getToday();
  5. $Counter->getTotal();
  6. $Counter->getByDate( $iTimestamp );
  7.  
  8. ?>

metody te zwracały by int jako wynik a echo by sie działo już w głownym skrypcie...
shpyo
Wiesz scanner, to jest mój pierwszy skrypt pisany obiektowo. Fakt, może jest źle zaprojektowane, ale działa biggrin.gif.

Też myślałem aby wyciągać odpowiednie dane metodami, ale to by mi tylko klasę powiększyło. Zaczynam się przykonuwać co do klas w php. Jest to bardzo uzyteczne, pod warunkiem że się ją dobrze zaplanuje haha.gif.
Mamber
Mi wyskakuje cos takiego:

Kod
Warning: Cannot modify header information - headers already sent by (output started at /home/.../public_html/test/index.php:123) in /home/.../public_html/test/index.php on line 431
odwiedziło nas: 2
wczoraj:
dzisiaj: 2


Na mojej stronie linia 431 wyglada tak:

  1. <?php
  2. setcookie('licznik', '1', time()+(3600*24));  //ustawienie ciasteczek na 24h
  3. ?>


Jak to naprawić ?
shpyo
  1. <?php
  2. ?>


trzeba dać to na samym początku strony na której jest licnik!
Strzałek
Cytat(mike_mech @ 2004-11-08 08:48:28)
Ja tylko dodam że kod można znacznie skrócić ( o ile piszemy w PHP5 ) stosując:
1. file_get_contents() ;
2. file_put_contents() .

http://pl.php.net/manual/pl/function.file-get-contents.php

Tam jest coś takiego:

Manual php napisał:
Cytat("Manual php mówi:")
file_get_contents

(php 4 >= 4.3.0, php 5)


więc żeby użyć tych funkcji wystarczy mieć php 4.3.0 nowsze

a co do klasy. To funkcję ustaw zmienne możesz zrobić konstruktorem ...
dr_bonzo
Cytat
file_get_contents
(php 4 >= 4.3.0, php 5)
więc żeby użyć tych funkcji wystarczy mieć php 4.3.0 nowsze

Nie tych ale tej: dla file_get_contents wystarczy 4.3.0 ale file_put_contents jest dostepne dopiero od wersji 5.
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.