Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [skrypt]licznik odwiedzin, proszę o ostre oceny + wskazówki
enigma
post 30.10.2006, 09:48:20
Post #1





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


Witam, php jak narazie tylko liznąłem i będzie to widać po skrypcie biggrin.gif
Ma on służyć do robienia statystyk dla każdej podstrony, oraz zliczać ilość odwiedzin z każdej strony
skrypt musi operować na plikach biggrin.gif
prosze o krytykę, tylko błagam nie śmiać się, wiem że tu wszystko będzie do krytykowania, ale jednoczesnie proszę o uwagi, jak coś można zrobić szybciej lepiej (w sumie już mam pomysł na dużo krótszy i szybszy skrypt), bo napewno pomoze mi to w nauce

  1. <?php
  2.  
  3.  function FunMeter ()
  4. {
  5.  if (!(file_exists('MetersFile/visits/')))//tworzy katalog na pliki ze statystykami
  6. mkdir ('MetersFile/visits/', 0700);
  7.  $file=($_SERVER['PHP_SELF']);//pobieram nazwe strony (pliku php) - plik z liczba odwiedzin nazywa się tak samo
  8.  $begin=strpos($file,'/') + 1;
  9.  $end=strpos($file,'.php');
  10.  $name=substr($file,$begin,$end-$begin);
  11.  if (!(file_exists('MetersFile/visits/'.$name.'.txt')))//tworzenie plików na statytyki
  12.  {
  13.  $file = fopen ('MetersFile/visits/'.$name.'.txt', 'w+');
  14.  fputs ($file,'0');
  15.  fclose ($file);
  16.  }
  17.  $file = fopen ('MetersFile/visits/'.$name.'.txt', 'r+'); 
  18.  if ($file)//odczytywanie i uaktualnianie statystyk
  19.  {
  20.  flock ($file, 2);
  21.  $visits = fgets($file, 20);
  22.  $visits++;
  23.  fseek ($file, 0);
  24.  fputs ($file, $visits);
  25.  flock ($file,3);
  26.  fclose ($file);
  27.  }
  28.  return $visits;//zwraca tablicę w celu późniejszego odczytania na stronie
  29. }
  30.  
  31.  
  32. function CatchIP ()
  33. {
  34.  if (!(file_exists('MetersFile/ip/')))//tworzy katalog na pliki ze statystykami
  35. mkdir ('MetersFile/ip/', 0700);
  36.  $ip = $_SERVER['REMOTE_ADDR']; 
  37.  $file=($_SERVER['PHP_SELF']);//pobieram nazwe strony (pliku php) - plik z liczba odwiedzin nazywa się tak samo
  38.  $begin=strpos($file,'/') + 1;
  39.  $end=strpos($file,'.php');
  40.  $name=substr($file,$begin,$end-$begin);
  41.  if (!(file_exists('MetersFile/ip/'.$name.'IP.txt')))//tworzenie plików na statytyki
  42.  {
  43.  $file = fopen ('MetersFile/ip/'.$name.'IP.txt', 'w+');
  44.  fputs ($file,'');
  45.  fclose ($file);
  46.  }
  47.  $file = fopen ('MetersFile/ip/'.$name.'IP.txt', 'r'); 
  48.  $i = 0;
  49.  if ($file)//odczyt i aktualizacja pliku
  50.  {
  51.  flock ($file, 2);
  52.  while(!feof($file))//zapis z pliku do tablicy, i zwiększenie liczby odwidzin dla konkretnej strony
  53.  {
  54.  $ip_count = fgets($file, 20);
  55.  $data = explode(':',$ip_count);
  56.  $ip_addr[$data[0]] = trim($data[1]);
  57.  }
  58. $ip_addr[$ip]++;
  59. fclose ($file);
  60. $klucze = array_keys($ip_addr);
  61. if(in_array($ip, $klucze))//nadpisanie zaktualizowanych informacji
  62. {
  63. $file = fopen ('MetersFile/ip/'.$name.'IP.txt', 'w+'); 
  64. for($x=0,$n=count($klucze);$x<$n;$x++)
  65. if($klucze[$x])
  66. fputs($file, $klucze[$x].':'.$ip_addr[$klucze[$x]]."rn");
  67. }
  68. else
  69. {$file = fopen ('MetersFile/ip/'.$name.'IP.txt', 'a');
  70. fputs($file, $ip.':1'."rn");}
  71.  fclose ($file);
  72.  }
  73.  return $ip_addr;//zwraca tablicę w celu późniejszego odczytania na stronie
  74. }
  75. ?>


całość razem z funkcjami odczytującymi można pobrać http://www.pawel-ryznar.yoyo.pl/Projekty/php/Visionsave.zip

Pozdrawiam
Go to the top of the page
+Quote Post
Adrian Staniszew...
post 30.10.2006, 11:33:33
Post #2





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Łódź

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


twoja metoda obslugi podstron jest bledna.. PHP_SELF nie zwraca calego linku..dostajesz postac typu.. index.php, news.html.. itp..

a co gdy moje linki maja postac np. index.php?go=news, news.php5?id=12 ?

musisz inaczej pobieraz linki, a nawet wtedy nie bedziesz mial pewnosci czy jestes na innej podstronie czy tez po prostu zmieniles jakas wartosc lub wyslales jakis parametr zmieniajacy jakas drobna czesc www, ale nie zmieniajacej tresci podstrony..


--------------------
Programy antywirusowe
Komputery, internet
Twój Słownik OnLine
Go to the top of the page
+Quote Post
enigma
post 30.10.2006, 11:39:36
Post #3





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


Cytat(Adrian Staniszewski @ 30.10.2006, 11:33:33 ) *
twoja metoda obslugi podstron jest bledna.. PHP_SELF nie zwraca calego linku..dostajesz postac typu.. index.php, news.html.. itp..

ale o to chodzi, dostaję index.php, obcinam .php, dodaję .txt i mam plik index.txt w którym jest liczba odwiedzin
Go to the top of the page
+Quote Post
bim2
post 30.10.2006, 14:25:38
Post #4





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


I tu jest problem, bo ja np uzywam index.php?podstrona=index index.php?podstrona=kontakt... rozumiesz?


--------------------
Go to the top of the page
+Quote Post
Adrian Staniszew...
post 30.10.2006, 15:21:42
Post #5





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Łódź

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


Przeczytaj jeszcze raz mojego posta.. podstrona to nie zawsze - a nawet zazwyczaj - samo index.php, news.php itp..


--------------------
Programy antywirusowe
Komputery, internet
Twój Słownik OnLine
Go to the top of the page
+Quote Post
enigma
post 1.11.2006, 17:36:08
Post #6





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


hmm, a cobyście poradzili questionmark.gif? smile.gif
Go to the top of the page
+Quote Post
phpion
post 3.11.2006, 08:27:56
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Moze jakis parametr w kodzie, ktory bedzie okreslal czy linki sa jako index.php?strona=jakas czy jako jakas.php. Parametrem tym moze byc takie cos:
  1. <?php
  2. $param = 'strona';
  3. // lub
  4. $param = NULL;
  5. ?>

i potem w kodzie sprawdzasz czy $param is_null i jesli tak to przyjmujemy ze linki sa jak do tej pory czyli jakas.php, natomiast jesli ma jakas wartosci to jako nazwe strony podajesz wartosc zmiennej, ktorej nazwa jest wartoscia parametru smile.gif ($$param - juz pomijajac $_GET i te sprawy). Moze wlasnie tak.
Go to the top of the page
+Quote Post
Adrian Staniszew...
post 3.11.2006, 10:58:36
Post #8





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Łódź

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


Ja bym to wrzucil do klasy i w przypadku stron statycznych lub "pojedynczych" normalnie wywolywal klase dodajac parametr "name"

np.
  1. <?
  2.  
  3. $licznik = new Counter('0', 'news#id');
  4.  
  5. ?>

teraz taki kod dajesz w plikach zmieniajacych sie - np. w news czy artach, a gdzie indziej dajesz po prostu $PHP_SELF

parametr $id mozesz oczywiscie zamienic innym, identyfikujacym twoja strone np. page#news, page#arts, go#download itp..


--------------------
Programy antywirusowe
Komputery, internet
Twój Słownik OnLine
Go to the top of the page
+Quote Post
enigma
post 3.11.2006, 17:16:47
Post #9





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


Cytat(Adrian Staniszewski @ 3.11.2006, 10:58:36 ) *
Ja bym to wrzucil do klasy i w przypadku stron statycznych lub "pojedynczych" normalnie wywolywal klase dodajac parametr "name"

znaczy się, cały licznik do klasy


Cytat(Adrian Staniszewski @ 3.11.2006, 10:58:36 ) *
parametr $id mozesz oczywiscie zamienic innym, identyfikujacym twoja strone np. page#news, page#arts, go#download itp..

czyli jakby strona z newsami miała 5 podstron, numerowanych, to jako id zwracany byłby numer podstrony i taki też plik tworzony np. news#5.txt , tak??
Go to the top of the page
+Quote Post
Adrian Staniszew...
post 3.11.2006, 18:41:27
Post #10





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Łódź

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


Tak, ale niekoniecznie uzywaj # w nazwach plikow.. Polecam uzyc np. "_"


--------------------
Programy antywirusowe
Komputery, internet
Twój Słownik OnLine
Go to the top of the page
+Quote Post
enigma
post 3.11.2006, 21:25:58
Post #11





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


tak tyczy się też pierwszego pytanie z postu nr 9 questionmark.gif tongue.gif
czy może są jeszcze jakieś uwagi, jeśli nie to wielkie głównie dla Adriana smile.gif
Go to the top of the page
+Quote Post
Adrian Staniszew...
post 3.11.2006, 22:48:55
Post #12





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Łódź

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


Tak do obu pytan smile.gif

Skoro - a raczej jesli - przepiszesz to do klasy to dodaj mozliwosc zablokowania countera ciasteczkiem - bedzie to szybsze i wydajniejsze rozwiazanie.

Osobiscie niezbyt tez widze zastosowanie dla Cach_IP.. niby fajnie bo mam adresy IP odwiedzajacych ale po co to mi ? geolokalizacje moglbym zrobic, ale i tak nie bede wiedzial kiedy mialy wejscia z danych IP, nie wiem tez ile razy mialy miejsce.

Pomysl nad rozbudowaniem systemu to prosciutkich statystyk.

Pozdrawiam

p.s
co wielkie dla adriana:P


--------------------
Programy antywirusowe
Komputery, internet
Twój Słownik OnLine
Go to the top of the page
+Quote Post
enigma
post 4.11.2006, 08:57:07
Post #13





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


Cytat(Adrian Staniszewski @ 3.11.2006, 22:48:55 ) *
dodaj mozliwosc zablokowania countera ciasteczkiem - bedzie to szybsze i wydajniejsze rozwiazanie.

to znaczy, co konkretnie mam blokować, albo raczej w jakim celu


Cytat(Adrian Staniszewski @ 3.11.2006, 22:48:55 ) *
Osobiscie niezbyt tez widze zastosowanie dla Cach_IP.. niby fajnie bo mam adresy IP odwiedzajacych ale po co to mi ? geolokalizacje moglbym zrobic, ale i tak nie bede wiedzial kiedy mialy wejscia z danych IP, nie wiem tez ile razy mialy miejsce.

heh w sumie to nie jest bardzo potrzebne, ale nie trzeba odpalać tej funkcji na p[odstronach tongue.gif a co do tego ile razy miały miejsce odwiedziny z danego ip, przeciez liczy dla każdego osobno biggrin.gif


Cytat(Adrian Staniszewski @ 3.11.2006, 22:48:55 ) *
Pomysl nad rozbudowaniem systemu to prosciutkich statystyk.

do tego właśnie chcę zmierzać cool.gif

Cytat(Adrian Staniszewski @ 3.11.2006, 22:48:55 ) *
co wielkie dla adriana:P

hmm tongue.gif wielkie DZIĘKUJE thumbsupsmileyanim.gif
Go to the top of the page
+Quote Post
Adrian Staniszew...
post 5.11.2006, 16:46:58
Post #14





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Łódź

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


dodaj mozliwosc dodania ciastka w zliczaniu odslon oraz moze okreslenia czasu dla ciastka

sprawdzasz wtedy czy jest ciacho jak jest to nie zliczasz a jak nie ma to zliczasz

pozwoli to np. na stworzenie statystyk odslon i odwiedzin(teoretycznie uniq)


--------------------
Programy antywirusowe
Komputery, internet
Twój Słownik OnLine
Go to the top of the page
+Quote Post
enigma
post 5.11.2006, 18:12:39
Post #15





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


Cytat(Adrian Staniszewski @ 5.11.2006, 16:46:58 ) *
pozwoli to np. na stworzenie statystyk odslon i odwiedzin(teoretycznie uniq)

- odwiedziny - czyli co, zliczanie wejścia danego gościa raz w ciągu dnia np??
- a odsłona (to znaczy ile razy odświeżono stronę + ilość wejść w ciągu dnia)
dobrze te terminy rozumiem tongue.gif questionmark.gif

jako że nie miałem jeszcze z o obiektami wiele do czynienia zapytam o klasę, czy dobrze myślę tongue.gif
  1. <?php
  2. class licznik
  3. {
  4. var $tryb_wyswietlania  //0-tekstowy, 1-graficzny
  5. var $plik_statystyk  //$PHP_SELF dla zwykłych stron, nazwa_id dla kombinowanych tongue.gif
  6. var $tryb_zapisu  //0 -baza danych, 1 -pliki
  7.  
  8. function licznik
  9.  {
  10. //inicjalizacja trybów, rodzaju plików
  11. //i inne ...
  12.  }
  13.  
  14. function odczyt_statystyk {;}
  15. function zapis_statystyk {;}
  16. .
  17. . //itd itp :)
  18. .
  19. }
  20. ?>
Go to the top of the page
+Quote Post
Adrian Staniszew...
post 5.11.2006, 20:18:23
Post #16





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Łódź

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


no mozna powiedziec ze dobrze.. ale napisz cos wiecej - ja bym zrobil to nieco inaczej, moze w wolnej chwili napisze taka klase w PHP5 winksmiley.jpg a narazie napisz cos wiecej na temat swojej

nadaj jakies wartosci zmiennym w var - wartosci domyslne i dodaj na koncu ";"


--------------------
Programy antywirusowe
Komputery, internet
Twój Słownik OnLine
Go to the top of the page
+Quote Post
enigma
post 6.11.2006, 19:34:30
Post #17





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


Cytat(Adrian Staniszewski @ 5.11.2006, 20:18:23 ) *
no mozna powiedziec ze dobrze.. ale napisz cos wiece
trochę to przemyślałem, i myślę że można zrobić kilka klas (żeby nie wszystko było pod licznik, można powiedzieć: początek frameworka tongue.gif) Przypominam że nie miałem do czynienia z pisaniem programów obiektowych no i narazie nie znam zbyt dokładnie obiektówki w php, znam c++, więc może być trochę błędów składniowych
dobra, a teraz przechodzę do licznika

=================================

klasa do pobierania informacji o pliku php, jego tytuł, nazwę, może się przydać do innych rzeczy, nie tylko do licznika
file_info.php
  1. <?php
  2. class file_info
  3.  {
  4. var $file_name;
  5. var $site_title; // pobierane z <title> </title>
  6. var $name_type; // 0 - $PHP_SELF, 1 - rozszerzona
  7.  
  8. public:
  9. function file_info($param = 0) // konstruktor
  10.  {
  11.  $this -> $name_type = $param;
  12. }
  13. function get_title() {;} // zapis do zmiennej $site_title
  14. function get_file_name() {;} // zapis do zmiennej $file_name
  15.  }
  16. ?>


klasa tworząca "pojemnik" na dane
data_container.php
  1. <?php
  2. class data_container
  3.  {
  4.  // zmienne
  5.  function data_container($param = 0) // konstruktor
  6. {
  7. // 0 - pliki, 1 - baza danych
  8. }
  9.  // inne funkcje odpowiedzialne za łączenie z bazą danych
  10.  // lub tworzenie plików
  11. }
  12. ?>


główna klasa - licznik
counter.php
  1. <?php
  2. class counter
  3.  {
  4. include("file_info.php");
  5. include("data_container.php");
  6. var $name_type; // 0 - $PHP_SELF, 1 - rozszerzona
  7. var $file = new file_info($name_type); // tworzy nowy obiekt, informacji o pliku
  8. var $site_title; // pobierane z <title> </title>
  9. var $file_name = $file -> get_file_name(); // do zmiennej zapisuje nazwę bieżącego pliku php
  10.  
  11. public:
  12. function record_stat() // jeśli nie chce wypisywać statystyki na stronie to używamy tej funkcji w pliku
  13. {
  14.  if(isset($refreshes))
  15.  //jeśli ciacho istnieje no to tylko zwiększamy ilość ODSŁON
  16. else
  17. //zwiększenie liczby ODWIEDZIN, i aktualizacja pliku lub bazy
  18. }
  19.  
  20. public:
  21. function show_stat() // jeśli chce wypisywać statystyki na stronie to używamy tej funkcji w pliku
  22. {
  23.  $this -> record_stat();
  24.  // wypisywanie statystyki na stronę
  25. }
  26. }
  27. ?>


przykładowa strona index.php
  1. <html>
  2. <?php
  3. include("counter.php");
  4. licznik = new counter() // zostawiam parametr domyślny, bo plik nazywa się normalnie
  5. ?>
  6. <body>
  7. <?php
  8. echo $licznik -> show_stat();
  9. ?>
  10. </body>
  11. </html>


Cytat(Adrian Staniszewski @ 5.11.2006, 20:18:23 ) *
ja bym zrobil to nieco inaczej, moze w wolnej chwili napisze taka klase w PHP5 winksmiley.jpg a narazie napisz cos wiecej na temat swojej

to jeszcze nic nie pokazuj tongue.gif chcę sam do tego dojść, oczywiście ze wskazówkami

Pozdrawiam

Ten post edytował enigma 6.11.2006, 19:35:23
Go to the top of the page
+Quote Post
Adrian Staniszew...
post 6.11.2006, 22:51:39
Post #18





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 17.10.2006
Skąd: Łódź

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


napewno nie framewroka tongue.gif raczej malego systemu, jednak nie rozdrabniaj sie za bardzo

funkcje definiujemy
Kod
public/private function nazwa() {}


a tak wlasciwie to piszesz w php4 czy 5 ? jak 5 to zamien te var na public/private/protected

caly czas czekam na jakis kod.. nie same "Szablony"

Ten post edytował Adrian Staniszewski 7.11.2006, 09:16:28


--------------------
Programy antywirusowe
Komputery, internet
Twój Słownik OnLine
Go to the top of the page
+Quote Post
enigma
post 7.11.2006, 09:26:01
Post #19





Grupa: Zarejestrowani
Postów: 163
Pomógł: 0
Dołączył: 10.09.2006

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


Cytat(Adrian Staniszewski @ 6.11.2006, 22:51:39 ) *
napewno nie framewroka tongue.gif raczej malego systemu
o czegos trzeba zacząć tongue.gif


Cytat(Adrian Staniszewski @ 6.11.2006, 22:51:39 ) *
jednak nie rozdrabniaj sie za bardzo

więcej klas nie będzie, a te 2 pierwsze mogą się przydać do innych celów


Cytat(Adrian Staniszewski @ 6.11.2006, 22:51:39 ) *
a tak wlasciwie to piszesz w php4 czy 5 ?
chcę w 5, jestem w trakcie czytania manuala


Cytat(Adrian Staniszewski @ 6.11.2006, 22:51:39 ) *
caly czas czekam na jakis kod.. nie same "Szablony"
spokojnie tongue.gif pierwsze muszę stworzyć dobry szablon, a późnie zabierać się za konkretne pisanie, także proszę jescze o uwagi do szablony tongue.gif
a kod będzie powstawał bardzo powoli, ponieważ muszę dużo czasu poświęcać na lekturę wspaniałej książki aaevil.gif
Go to the top of the page
+Quote Post
bim2
post 7.11.2006, 20:27:12
Post #20





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

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


Ja bym rozwiązał to tak jak w rapide. Mam taki system logow i w zmiennej private $oModule zapisuje obiekt systemu zapisu. I moze byc kilka klas. A wywoluje:
$log = new Log;
$log->register('file', new Log_file);
$log->register('base', new Log_base);
$log->setDefault('base');
i uzycie:
$log->make('msq'[, nazwa modulu]); jesli nie ma bierze domyslny


--------------------
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: 14.07.2025 - 04:30