Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Blokowanie licznika
Forum PHP.pl > Forum > Przedszkole
Mateoo88
Witam, mam skrypt licznika odwiedzin, bardzo prostego. Licznik działa dobrze a nawet można żec aż za dobrze smile.gif Nalicza każde wejsce na strone nawet gdy się strone odswieży to też nalicza. Czy może ktoś mi pomóc lub nakierować co zrobić aby przyblokować ten licznik tak by naliczał wejscia z jednego adresu co 12h. Z góry dzięki
  1. <?php
  2. $count_my_page = ("hitcounter.txt");
  3. $hits = file($count_my_page);
  4. $hits[0] ++;
  5. $fp = fopen($count_my_page , "w");
  6. fputs($fp , "$hits[0]");
  7. fclose($fp);
  8. echo $hits[0];
  9. ?>
Ilware
sposobów zabezpieczeń jest kilka

1- zapisywanie cookie na czas 12h i sprawdzanie czy już takie cookie istnieje - jeżeli nie to inkrementujesz licznik.
2- zapisywanie ip odwiedzającego do bazy i sprawdzanie po ip

+ ew
3 - zabezpieczenie na sesji ale to tylko na okres jednego wejścia na stronę
Mateoo88
Zależy mi na prostocie więc wybieram ciasteczka.

do kodu dodałem:
  1. setcookie("visited", "1", time()+3600*3);


wszystko wygląda tak:
  1. <?php
  2. setcookie("visited", "1", time()+3600*3);
  3. $count_my_page = ("hitcounter.txt");
  4. $hits = file($count_my_page);
  5. $hits[0] ++;
  6. $fp = fopen($count_my_page , "w");
  7. fputs($fp , "$hits[0]");
  8. fclose($fp);
  9. echo $hits[0];
  10. ?>


Wyskakuje mi błąd : Warning: Cannot modify header information - headers already sent by (output started at /home/y7828sm/public_html/index.php:8) in /home/y7828sm/public_html/counter.php on line 2

Mam małą więdze n/t php i nie bardzo wiem co robie źle. Prosze o pomoc
Ilware
http://wortal.php.pl/Wortal/Artykuly/PHP/P...ch-programistow

temat wałkowany miliardy razy, nie możesz wysłać nagłówków jak wyślesz już jakieś znaki do przeglądarki.

oprócz tego dodanie tylko tej linii Ci nic nie da, po prostu teraz przy każdym odświeżeniu będzie się tworzyło ciasteczko.musisz sprawdzić czy ciasto istnieje jeżeli nie to tworzysz nowe i inkrementujesz licznik, jeżeli istnieje to nic nie robisz.
Bateria
  1. <?php
  2. if(!isset($_COOKIE['licznik'])){
  3. $count_my_page = ("hitcounter.txt");
  4. $hits = file($count_my_page);
  5. $hits[0] ++;
  6. $fp = fopen($count_my_page , "w");
  7. fputs($fp , "$hits[0]");
  8. fclose($fp);
  9. echo $hits[0];
  10. setcookie('licznik', 'licznik', time()+43200);
  11. }
  12. ?>
Mateoo88
Wyskakuje błąd w 10 linijce kodu czyli:
  1. setcookie('licznik', 'licznik', time()+43200);

Dalej nalicza za każdym odświeżeniem strony
Bateria
Zrób to tak jak napisałem i jak będzie dalej błąd to napisz:
1. Do jakiegoś pliku .php wklej kod:
  1. <?php
  2. $count_my_page = ("hitcounter.txt");
  3. $hits = file($count_my_page);
  4. if(!isset($_COOKIE['licznik'])){
  5. $hits[0] ++;
  6. setcookie('licznik', 'licznik', time()+43200);
  7. }
  8. $fp = fopen($count_my_page , "w");
  9. fputs($fp , "$hits[0]");
  10. fclose($fp);
  11. echo $hits[0];
  12. ?>

2. Stwórz plik 'hitcounter.txt' i wpisz w nim wartość 0, nie zostawiaj go pustego.
3. Wyczyść ciacha przeglądarki i odpal skrypt.

ps. Testujesz to na localhost czy wgrałeś na jakiś serwer?
Mateoo88
Pliki wgrywam na serwer.
Niestety zrobiłem tak jak napisałeś wyżej i dalej wyskakuje błąd : Warning: Cannot modify header information - headers already sent by (output started at /home/y7828sm/public_html/index.php:7) in /home/y7828sm/public_html/counter.php on line 6

A licznik nalicza kazde odświeżenie strony. Moja skromna wiedza o php dawno się skonczyła wiec prosze o kolejne wskazówki, z góry dziękuje
Bateria
Jak znów nie zadziała, pisz.
  1. <?php
  2. $count_my_page = ("hitcounter.txt");
  3. $hits = file($count_my_page);
  4. if(!isset($_COOKIE['licznik'])){
  5. $hits[0] ++;
  6. setcookie('licznik', 'licznik', time()+43200);
  7. }
  8. $fp = fopen($count_my_page , "w");
  9. fputs($fp , "$hits[0]");
  10. fclose($fp);
  11. echo $hits[0];
  12. ?>
Mateoo88
Niestety, to samo tyle, że błąd jest w 7 lini
Bateria
Czy aby Twoja przeglądarka ma na pewno włączoną obsługę ciasteczek?
Wejdź na adres:
http://bateria.ugu.pl/test.php
U mnie to w pełni działa, jeżeli u Ciebie nie będzie to działać wina leży po stronie przeglądarki.

Jak to zrobisz daj znać.
Mateoo88
Hmmm no widzisz u mnie działa Twoj link. a moj nie dziala. WWW zobacz sobie skrypt zainstalowalem pod dolna pomarańczową kreską ...
Bateria
Na PW napisałem ci moje gg. Napisz to coś pokombinujemy
Ilware
ob_start umieść na samym początku pliku przed wszystkim, uważaj żeby nie było nawet białego znaku.

  1. <?php
  2. ?>


i powinno być okej
Bateria
No i powinno się na samym końcu

Ja nie zadziała to napisz
Mateoo88
w pliku index.php

  1. <?php
  2. include ("counter.php");
  3. ?>


a w pliku counter.php:
  1. <?php
  2. $count_my_page = ("hitcounter.txt");
  3. $hits = file($count_my_page);
  4. if(!isset($_COOKIE['licznik'])){
  5. $hits[0] ++;
  6. setcookie('licznik', 'licznik', time()+43200);
  7. }
  8. $fp = fopen($count_my_page , "w");
  9. fputs($fp , "$hits[0]");
  10. fclose($fp);
  11. echo $hits[0];
  12. ?>

mam jeszcze ten plik hitcounter.txt ale tam jest tylko:
  1. 1


________EDIT_______
Dodałem do index.php :
  1. <?php ob_start(); ?>

i Działa exclamation.gif!!
Wielkie dzieki Panowie : Bateria i Ilware
Dziekuje za poświęcony czas a żeby nie był on zmarnowany to prosze napiszcie mi co robi ten kod:
  1. <?php ob_start(); ?>

Micchaleq
ob_start
Mateoo88
Jeszcze jedno pytanie co do kodu:
Jeżeli chcę by cookies odblokowywały się szybciej to fragment kodu:
  1. setcookie('licznik', 'licznik', time()+43200);

zmienić na np
  1. setcookie('licznik', 'licznik', time()+120);


Czy to tylko pomoże? Czy coś jeszcze trzeba zrobić?
Bateria
Już tłumaczę:
  1. setcookie('nazwa_ciasteczka', 'wartosc_ciasteczka', time()+99);

Po trzecim przecinku ustalamy po jakim czasie ciastko ma być przestać aktwnę:
time() - wyświetla czas unixowy czyli ile sekund mineło od 1 stycznia 1970r.
time()+100 - ciasteczka dezaktywuje się po 100 sekundach od momentu jego dodania
Mateoo88
Dzięki za pomoc i odpowiedź!
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.