Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Czy istnieje jakiś dobry licznik w php?
Forum PHP.pl > Forum > Przedszkole
tmh
Witam.

Przetestowałem już chyba z 10 liczników wyszukanych na google, m.in:
http://porady.skryptoteka.pl/article.php?id=2
http://www.antylameriada.net/wlicznik/
i chyba wszystko co znalazłem:
http://www.google.pl/search?hl=pl&q=liczni...btnG=Szukaj&lr=

Problem ma się następująco: ŻADEN z wymienionych wyżej liczników NIE JEST ODPORNY NA ODWIEŻANIE exclamation.gif! Za każdym odświerzeniem naliczana jest +1 osoba sad.gif Używam Opery 8.52, ciasteczka mam włączone i ustawione aby wszystkie akceptowano.

Aha, ostatnio znalazłem na forum ten oto licznik:
  1. <?php
  2.  
  3. /**
  4.  * Licznik
  5.  * 
  6.  * @author hwao
  7.  *
  8.  * @param string $sFile - sciezka do pliku bazy
  9.  * @param bool $bUseCookie - czy uzywac cookie (kontrola przed udswiezaniem)
  10.  * @param integer $iTime - czas aktywnosci ciastka
  11.  * 
  12.  * @return bool
  13.  */
  14. function Counter( $sFile, $bUseCookie = false , $iTime = 3600 ) {
  15. if( array_key_exists( '__counter', $_COOKIE ) && $bUseCookie ) {
  16. // Uzytkownik juz by│, wiec jego nie liczymy
  17. return false;
  18. }
  19.  
  20. if( !file_exists( $sFile ) ) {
  21. // baza danych nie istnieje
  22. die( '<h4>Licznik : baza danych pod sciezka '.$sFile.' nie istnieje!' );
  23. }
  24.  
  25. $aCounter = file( $sFile );
  26. $iCount = (int)$aCounter[0];
  27. $iCount++;
  28.  
  29. // Wyslanie Cookie
  30. if( $bUseCookie ) {
  31. setcookie( '__counter', $iCount, time()+$iTime );
  32. }
  33.  
  34.  
  35. /**
  36.  * Zapis licznika
  37.  */
  38.  
  39. $rFo = fopen( $sFile, 'w+' );
  40. flock( $rFo, LOCK_EX );
  41. fwrite( $rFo, $iCount );
  42. flock( $rFo, LOCK_UN );
  43. fclose( $rFo );
  44. return true;
  45.  
  46. }
  47.  
  48. /**
  49.  * Wyglad licznika
  50.  *
  51.  * @param string $sFile
  52.  * @return string
  53.  */
  54. function CounterReader( $sFile ) {
  55. $aCounter = file( $sFile );
  56. $iCount = (int)$aCounter[0];
  57.  
  58. return 'Odwiedzin: '.$iCount.'<br />';
  59. }
  60.  
  61. $sFile = './counter.db';
  62.  
  63.  
  64. Counter( $sFile, false );
  65. echo CounterReader( $sFile );
  66. ?>

Ale również nie działa!
Bardzo proszę o pomoc, to jakaś paranoja że żaden z wyżej wymienionych liczników nie spełnia swojego zadania.

Pozdrawiam.
TMH
NuLL
Mi ten licznik dziala.
tmh
Witam.

Dzisiaj sie troche pobawilem i zauważyłem że przeglądarka nie ma cookie które powinna otrzymać od licznika, czym to może być spowodowane?? Bardzo proszę o przejżenie powyższego skryptu, czy w nim jest coś nie tak??

Pozdrawiam.
TMH.
piotrekkr
hmm jakbys zrobil licznik na bazie danych to bys nie mial takieo problemu zliczalbys poprostu unikalne IP i by bylo poi krzyku smile.gif a tak problemy z cookie.

tak mi sie wydaje ze blad tkwi tutaj
  1. <?php
  2. Counter( $sFile, false );
  3. ?>


powinno bych chyba

  1. <?php
  2. Counter( $sFile, true);
  3. ?>
tmh
Cytat(piotrekkr @ 2006-04-15 16:18:56)
hmm jakbys zrobil licznik na bazie danych to bys nie mial takieo problemu zliczalbys poprostu unikalne IP i by bylo poi krzyku smile.gif a tak problemy z cookie.

tak mi sie wydaje ze blad tkwi tutaj
  1. <?php
  2. Counter( $sFile, false );
  3. ?>


powinno bych chyba

  1. <?php
  2. Counter( $sFile, true);
  3. ?>

Naniosłem sugerowaną poprawkę i wywala taki błąd na stronie:
Kod
Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/html/global/index.html:1) in /home/httpd/html/global/php/tmhcounter.php on line 32

Nie mam pojęcia o co chodzi... proszę o pomoc!

Pozdr.
TMH
uroczy
Masz tu liczik oparty o cookies ten kod musi byc wysłany do przegladarki predz wsztstki nawet przed tagami <htm> na samej górze dokumentu


  1. <?php
  2. // En: Begin php Code / Fr: Debut code php
  3. /******************************************************************************\
  4. * Cookies digits Access Counter Version 1.0  *
  5. * Copyright 2000 Frederic TYNDIUK (FTLS)  All Rights Reserved. *
  6. * E-Mail: tyndiuk@ftls.org  Script License: GPL  *
  7. * Created 02/28/2000 Last Modified 02/28/2000 *
  8. * Scripts Archive at: http://www.ftls.org/php/ *
  9. *******************************************************************************/
  10. // Necessary Variables:
  11.  
  12. $COUNT_FILE = "plik.txt";
  13. // En: Absolute path and name to count data file.
  14. // Fr: Chemin absolu (complet) et Nom du fichier compteur.
  15.  
  16. $IMG_DIR_URL = "./digits/";
  17. // En: URL Directory of digits (0.gif ... 9.gif).
  18. // Fr: URL du repertoire des images (0.gif ... 9.gif).
  19.  
  20. $NB_DIGITS = 5;
  21. // En: Minimum number of digits to display (0, to not use 0 left).
  22. // Fr: Nombre minimum de chiffre ŕ afficher (0 pour ne pas avoir de 0 devant).
  23.  
  24. $EXPIRE_DATE = 1800;
  25. // En: Cookies Expiration date (second).
  26. // Fr: Date d'expiration du cookies (en seconde);
  27.  
  28. // End Necessary Variables section
  29. /******************************************************************************/
  30.  
  31. if (file_exists($COUNT_FILE)) {
  32. // En: Open, read, increment, save and close file.
  33. // Fr: Ouvre, lit, incrémente, sauve et ferme le fichier.
  34. $fp = fopen("$COUNT_FILE", "r+");
  35. flock($fp, 1);
  36. $count = fgets($fp, 4096);
  37. if ($_COOKIE['uroczeciaho'] == "") {
  38. $count += 1;
  39. setcookie("uroczeciaho", $count, time()+$EXPIRE_DATE , "/", $SERVER_NAME);
  40. fseek($fp,0);
  41. fputs($fp, $count);
  42. }
  43. flock($fp, 3);
  44. fclose($fp);
  45. }
  46. else {
  47. // En: Display a error message if file does not exist.
  48. // Fr: Affiche un message d'erreur si le fichier n'existe pas.
  49. echo "Can't find file, check '\$file' var...<BR>";
  50. }
  51.  
  52. // En: Display count value
  53. // Fr: Affiche le nombre de visiteur.
  54.  
  55. chop($count);
  56. $nb_digits = max(strlen($count), $NB_DIGITS);
  57. $count = substr("0000000000".$count, -$nb_digits);
  58.  
  59. $digits = preg_split("//", $count);
  60.  
  61. for($i = 0; $i <= $nb_digits; $i++) {
  62. if ($digits[$i] != "") {
  63. $html_result .= "<IMG SRC=\"$IMG_DIR_URL$digits[$i].gif\">";
  64. }
  65. }
  66. // En: End php Code
  67. // Fr: Fin code php
  68.  
  69. ?>

a ten kod wsawiasz gdzie licznik ma sie pojawić (ni zxapomnij zmienic nazwy ciasteczka(pliki graficzne smile.gif zrobisz sobie sam

  1. Odwiedźin : <?php echo $html_result ?>
piotrekkr
Cytat
Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/html/global/index.html:1) in /home/httpd/html/global/php/tmhcounter.php on line 32


znaczy ze skrypt musi byc umieszczony na samej gorze dokumentu jeszcze przed jakimkolwiek tagiem html wtedy wlasnie php wysyla ciastka i inne dane do przegladarki zanim jeszcze wysle sama strone przetworzona przez skrypt. Poprostu umiesc ten skrypt co masz go na poczatku dokumetu. Sproboj po staremu i jak nie bedzie dzialac to sproboj z moja poprawka smile.gif
tmh
@Uroczy: ten licznik to licznik graficzny, chciałbym tekstowy...

Zrobiłem tak jak kazaliście, tzn:
na początku dokumentu html umieściłem linię:
  1. <?php include("licznik.php"); ?>


zahaszowałem w licznik.php linię z: return 'Odwiedzin: '.$iCount.'<br />'; i dodałem ją w stosownym miejscu w postaci <?php return 'Odwiedzin: '.$iCount.'<br />'; ?>, ale nie działa!! Ucina mi połowe strony i tyle.... co robie nie tak?

Pozdrawiam!
piotrekkr
  1. <?php
  2. echo("Odwiedzin: $iCount <br />")
  3. ?>


nie uzywaj return bo on zwraca wartosc i konczy dzialanie czyli nie wczytuje tego co jest dalej w skrypcie. RETURN uzywaj tylko w funkcjach smile.gif. Powinienies zajrzec do manuala lub zakupic jakas ksiazke ewentualnie przeczytac jakis kurs php to by ci znacznie ułatwilo zycie smile.gif
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.