Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kopiowanie zawartosci pliku
Forum PHP.pl > Forum > Przedszkole
Gligamesh
witam mam licznik dzienny ktory zapisauje w pliku ilosc odwiedzin. chcail bym zeby np o godzinie 23:59 zawartosc pliku byla dodawana do pliku wraz z data.

Struktura pliku:
ilosc odwiedzin|data/n

chail bym porstu z tego zrobic jaks statystyke.

nie mam zielonego pojecai jak sie do tego zabrac, i niezbyt sie znam wiec prosze o jakies przyklady, podpowiedzi cokoliwke
Dabroz
Jeżeli chcesz uruchamiać ten sktypy o 23:59 to musisz użyć crone'a albo czegoś podobnego.
Gligamesh
ze sie zapytam czego questionmark.gif najpierw bylo by trzeba miec ten skrypt
Chewolf
Powinno dzialac :
  1. <?php
  2. $Plik = 'nazwa pliku z licznikiem';
  3. $PlikuS = 'nazwa pliku do statystyk';
  4. $File = join(file(&#092;"$Plik\"));
  5. $ass = fopen($PlikuS,&#092;"a\");
  6. $zawartosc = $File.'|'.date(&#092;"Y-m-j G:i:s\").\"n\";
  7. fputs($ass,$zawartosc);
  8. fclose($ass);
  9. ?>

1. Skrypt zadziala jesli w pliku pod zmienna $Plik bedzie liczna odslon czyli sama liczba...
2. Jesli serwer stoi na Linuxie , pamietaj o chmodach.
marlowe
Wykombinowałem skrypt, który chyba w pełni wykonuje to, co chcesz osiągnąć jednak działa trochę inaczej- odczytuja ostatnią linię z pliku count.txt i sprawdza czy zawiera ona dziejszą datę (data zapisana jest jako rok i numer dnia w roku)- jeśli tak to kasuje tą ostatnią linię i zapisuje taką samą, tyle, że ze zwiększonym licznikiem, jeśli ostatnia linia zawiera inną datę- dopisuje nową linią z dzisiejszą datą i licznikiem ustawionym na "1":
counter.php
  1. <?php
  2. $counter_file = &#092;"count.txt\";
  3.  
  4. /* Skrypt ma wykonac następjące czynności:
  5. - ustalić dzisiejszą datę
  6. - wczytać ostatnią linię w pliku
  7. - pobrać wartość licznika w tej linii
  8. - sprawdzić czy ostatnia linia zawiera dzisiejszą datę
  9. - otworzyć plik
  10. - jeśli tak- kasuje ostatnią linię i zastępuje ją nową linią z powiększoną wartością licznik
  11.  
  12. - jeżeli nie- dopisuje nową linię z dzisiejszą datą i licznikiem ustawionym na \"1\" */
  13.  
  14. $today_date = gmdate(&#092;"Yz\");
  15.  
  16. $file_cont = file($counter_file);
  17. $file_last_line = $file_cont[count($file_cont)-1];
  18. $file_last_line_lenght = strlen($file_last_line);
  19.  
  20. $file_last_line = explode(&#092;"t\",$file_last_line);
  21. $file_counter = (int) $file_last_line[1];
  22.  
  23. if(!($fp = fopen($counter_file, &#092;"a+\")))
  24. die (&#092;"Nie mogę otworzyć $counter_file.\");
  25.  
  26. if($file_last_line[0] == $today_date)
  27. {
  28. ftruncate($fp,filesize($counter_file)-$file_last_line_lenght);
  29. echo &#092;"Jesteś \".$file_counter++.\" osobą na stronie. Wartość licznika dla dzisiejszego dnia została zwiększon
    a\";
  30. fwrite($fp, $today_date . &#092;"t\" . $file_counter . \"rn\");
  31. }
  32. else
  33. {
  34. $file_counter = 1;
  35. echo &#092;"Jesteś pierwszą osobą dziś. Zapisałem nową linię w pliku z dzisiejszą datą.
    \";
  36. fwrite($fp, $today_date . &#092;"t\" . $file_counter . \"rn\");
  37. }
  38.  
  39. fclose($fp);
  40. ?>

Zeby zobaczyć sobie czy działa możesz utworzyć plik count.txt o np. następującej treści:
count.txt
Kod
2004189    5
2004190    1
2004191    13

A taki skrypt odczyta wartości z licznika i wyświetli na stronie:
show_counter.php
  1. <style>
  2. td {border: 1px solid; border-color: #000; width: 100px;}
  3. </style>
  4. <table>
  5. <tr><td>Dzień</td><td>Ilość odwiedzin</td></tr>
  6. <?php
  7. $counter_file = &#092;"count.txt\";
  8. //skrypt wyświetla w formie tabelki liczbę odwiedzin w poszczególnych dniach
  9.  
  10. $file_cont = file($counter_file);
  11. foreach($file_cont as $day_count)
  12. {
  13. $date_and_counter = explode(&#092;"t\", $day_count);
  14. echo &#092;"<tr><td>$date_and_counter[0]</td><td>$date_and_counter[1]</td></tr>\";
  15. }
  16. ?>
  17. </table>

Tu są przykłady- skryptu licznika i skryptu odczytującego ilości odwiedzin.
Mam nadzieję,że o to Ci chodziło.
Pozdrawiam.
Bartek
Gligamesh
ok, skorzystalem z pierwszego skryptu gdyz jest prosty jak dla mnie winksmiley.jpg i dzial po modyfikacjach, ale jak mam zrobic by on sie odpalal o 23:59 questionmark.gif tak by przekopiowac dane z max iloscia odwiedzin

drugi skrypt jest fajny tylko ze chcail bym unikalne odslpony czyli po ip, i chcail bym aby jeszce byl ogolny licznik ze wszystkimi odwiedzinami, najlepiej w osobnym pliku by nie obciazac systemu, gdyby bylo monza naniesc takie poprawki byl bym naprawde bardzo wdzieczny
marlowe
Hm. Chciałbym móc napisać proste rozwiązanie ale chyba jednak trzeba pokombinować żeby osiągnąć takie efeklty operując na plikach tekstowych- znacznie by to było wszystko przyjemniejsze na bazie danych... No więc tak:
counter_ip.php

  1. <?php
  2. $counter_file = &#092;"count_ip.txt\";
  3. //skrypt zapisuje w kolejnych liniach pliku licznika numer ip oraz datę odwiedzin
  4.  
  5. $today_date = gmdate(&#092;"Yz\");
  6. $hostname = gethostbyname($_SERVER['REMOTE_ADDR']);
  7.  
  8. if(!($fp = fopen($counter_file, &#092;"a+\")))
  9. die (&#092;"Nie mogę otworzyć $counter_file.\");
  10.  
  11. fwrite($fp, $hostname . &#092;"t\" . $today_date . \"rn\");
  12.  
  13. fclose($fp);
  14. ?>

show_counter_ip
  1. <style>
  2. td {border: 1px solid; border-color: #000; width: 100px;}
  3. </style>
  4.  
  5. <?php
  6. $counter_file = &#092;"count1.txt\";
  7. //skrypt odczytuje z pliku dane na temat odwiedzin w poszczególnych dniach i wypis
  8. je numery ip
  9.  
  10. $file_cont = file($counter_file);
  11. $tabel = array();
  12. foreach($file_cont as $line)
  13. {
  14. $line = explode(&#092;"t\",$line);
  15. $file_ip = $line[0];
  16. $file_date = $line[1];
  17.  
  18. $tabel[$file_ip] = $tabel[$file_ip].&#092;",\".$file_date;
  19. }
  20. echo &#092;"<table>\";
  21. foreach($tabel as $date=>$ip_s)
  22. {
  23. $howmany_ip_s = count(explode(&#092;",\",$ip_s))-1;
  24. echo &#092;"<tr><td>$date</td><td>$ip_s</td><td>$howmany_ip_s-1</tr>\";
  25. }
  26. echo &#092;"</table>\";
  27. ?>

Tu są przykłady: licznik z zapisywaniem ip oraz skrypt wyświetlający zapisane dane.
No a zwykły licznik zewnętrzny to wystarczy dodać gdzieś:
  1. <?php
  2. $counter_file = &#092;"./norm_counter.dat\";
  3. if(!($fp = fopen($counter_file, &#092;"r\")))
  4. die (&#092;"Nie mogę otworzyć $counter_file.\");
  5. $counter = (int) fread($fp, 20);
  6. fclose($fp);
  7.  
  8. $counter++;
  9. echo &#092;"Jesteś gościem nr: $counter.\";
  10.  
  11. if(!($fp = fopen($counter_file, &#092;"w\")))
  12. die(&#092;"Nie mogę otworzyć $counter_file.\");
  13. fwrite($fp, $counter);
  14. fclose($fp);
  15. ?>

Pozdrawiam.
Bartek
Gligamesh
eh hycba sobie odpuszcze sad.gif nie dzial to tak jak bym chcial, a narazie nie mam dostepu do mysqla na serverku az tak plynnie sad.gif pasował by mi ten pierwszy ale jak go odpalac o danej poze ?
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.