Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [skrypt]licznik odwiedzin, proszę o ostre oceny + wskazówki
enigma
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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
 
Start new topic
Odpowiedzi
Adrian Staniszew...
post
Post #2





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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) a narazie napisz cos wiecej na temat swojej

nadaj jakies wartosci zmiennym w var - wartosci domyslne i dodaj na koncu ";"
Go to the top of the page
+Quote Post
enigma
post
Post #3





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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) a narazie napisz cos wiecej na temat swojej

to jeszcze nic nie pokazuj (IMG:http://forum.php.pl/style_emoticons/default/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

Posty w temacie
- enigma   [skrypt]licznik odwiedzin   30.10.2006, 09:48:20
- - Adrian Staniszewski   twoja metoda obslugi podstron jest bledna.. PHP_SE...   30.10.2006, 11:33:33
|- - enigma   Cytat(Adrian Staniszewski @ 30.10.2006, 11...   30.10.2006, 11:39:36
- - bim2   I tu jest problem, bo ja np uzywam index.php?podst...   30.10.2006, 14:25:38
- - Adrian Staniszewski   Przeczytaj jeszcze raz mojego posta.. podstrona to...   30.10.2006, 15:21:42
- - enigma   hmm, a cobyście poradzili ?   1.11.2006, 17:36:08
- - phpion.com   Moze jakis parametr w kodzie, ktory bedzie okresla...   3.11.2006, 08:27:56
- - Adrian Staniszewski   Ja bym to wrzucil do klasy i w przypadku stron sta...   3.11.2006, 10:58:36
|- - enigma   Cytat(Adrian Staniszewski @ 3.11.2006, 10...   3.11.2006, 17:16:47
- - Adrian Staniszewski   Tak, ale niekoniecznie uzywaj # w nazwach plikow.....   3.11.2006, 18:41:27
|- - enigma   tak tyczy się też pierwszego pytanie z postu nr 9 ...   3.11.2006, 21:25:58
- - Adrian Staniszewski   Tak do obu pytan Skoro - a raczej jesli - przepi...   3.11.2006, 22:48:55
|- - enigma   Cytat(Adrian Staniszewski @ 3.11.2006, 22...   4.11.2006, 08:57:07
- - Adrian Staniszewski   dodaj mozliwosc dodania ciastka w zliczaniu odslon...   5.11.2006, 16:46:58
|- - enigma   Cytat(Adrian Staniszewski @ 5.11.2006, 16...   5.11.2006, 18:12:39
- - Adrian Staniszewski   no mozna powiedziec ze dobrze.. ale napisz cos wie...   5.11.2006, 20:18:23
|- - enigma   Cytat(Adrian Staniszewski @ 5.11.2006, 20...   6.11.2006, 19:34:30
- - Adrian Staniszewski   napewno nie framewroka raczej malego systemu, jed...   6.11.2006, 22:51:39
- - enigma   Cytat(Adrian Staniszewski @ 6.11.2006, 22...   7.11.2006, 09:26:01
- - bim2   Ja bym rozwiązał to tak jak w rapide. Mam taki sys...   7.11.2006, 20:27:12


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

 



RSS Aktualny czas: 25.09.2025 - 20:03