Loading:

Zaplanuj Przeprowadzke - Ściągnij Darmową Aplikację na Androida

Graficzny licznik odporny na odświeżanie

Tutaj nie znalazłem takiego licznika, więc daje go Wam. Sam skrypt nie został napisany przeze mnie, ja go znalazłem po długich poszukiwaniach, gdzieś na jakimś nie polskim forum, intrukcję tłumaczyłem przez translatora, a później tylko przerobiłem i trochę rozbudowałem. Znalazłem dużo podobnych licznków, ale zawsze było coś nie tak, np. wchodząc bezpośrednio w plik z kodem było wszystko ok, ale już na główne wyskakiwały jakieś błędy...

 

Screen licznika

 

Instrukcja

Na sam początek tworzymy folder licznik (oczywiście może to być obojętnie jaka nazwa, ale instrukcję oprę na konkretnym przykładzie), a w nim tworzymy kolejno pliki: counter.php, reload_blockade.php, visits_counter.txt no i jeszcze dodatkowo folder digits. W folderze digits tworzymy kolejny folder (można nawet kilka, to zależy ile utworzymy zestawów liczb), np. o nazwie 1, a do niego wrzucamy 10 plików graficznych, nazwanych kolejno od 0 do 9 z rozszerzeniami gif (nie koniecznie z takimi rozszerzenismi, mogą być też inne, ale wtedy trzeba będzie zmienić pewną część w kodzie). Poniżej przedstawiam zawartość plików counter.php, reload_blockade.php i visits_counter.txt.



Napisz Artykuł

Listing

// -------------[ counter.php ]-------------
<?php
// Konfiguracja
$digits_pack = "1"; // zestaw graficzny, czyli nazwa tego folderu, którego utworzyliśmy w digits
$digits = 4; // liczba cyfr
$reload_blockade = 1; // blokada odświeżania: 1 = włączona, 0 = wyłączona, blokada działa na zasadzie ciasteczka
$counter_graphic_type = ".gif"; // rozszerzenie grafiki, czyli takie rozszerzenie w jakim mamy pliki graficzne
$counter_data_file = "licznik/visits_counter.txt"; // plik z zawartością ilości odwiedzin
$counter_graphic_directory = "licznik/digits/"; // folder z zestawami grafik licznika

// dalsza nie konfiguralna część kodu
if((!isset($_COOKIE["cookie_reload_blockade"]))||($reload_blockade==0)){
        $open_file = fopen($counter_data_file,"r");
        $lock_file = flock($open_file,LOCK_SH);
        if($lock_file==true) {
                $visits_counter_value = fread($open_file,filesize($counter_data_file));
        }
        $unlck_file = flock($open_file,LOCK_UN);
        $close_file = fclose($open_file);
        $open_file = fopen($counter_data_file,"w+");
        $lock_file = flock($open_file,LOCK_EX);
        if($lock_file==true) {
                $visits_counter_value++;
                $update_visits_counter_value = fwrite($open_file,$visits_counter_value);
        }
        $unlck_file = flock($open_file,LOCK_UN);
        $close_file = fclose($open_file);
}
else {
        $open_file = fopen($counter_data_file,"r");
        $lock_file = flock($open_file,LOCK_SH);
        if($lock_file==true) {
                $visits_counter_value = fread($open_file,filesize($counter_data_file));
        }
        $unlck_file = flock($open_file,LOCK_UN);
        $close_file = fclose($open_file);
}
$count_digits = strlen($visits_counter_value);
if($digits>$count_digits) {
        $last_digit = $digits;
        $zero_digits = $digits-$count_digits;
}
else {
        $last_digit = $count_digits;
        $zero_digits = 0;
}
$next_digit = 0;
// generowanie graficznego licznika odwiedzin
$counter_result = "";
for($i=0;$i<$last_digit;$i++) {
        $digit = substr($visits_counter_value,$next_digit,1);
        if($i<$zero_digits) {
                $counter_result .= "<img src='".$counter_graphic_directory.$digits_pack."/0".$counter_graphic_type."'>";
    }
        else {
                $counter_result .= "<img src='".$counter_graphic_directory.$digits_pack."/".$digit.$counter_graphic_type."'>";
                $next_digit++;
    }
}

echo $counter_result;
?>

// -------------[ reload_blockade.php ]-------------
<?php
if(!isset($_COOKIE['cookie_reload_blockade'])) {
        setcookie('cookie_reload_blockade','yes',time()+3600*2); // 3600*2=2h - przez taki czas będzie przechowywane ciasteczko w przeglądarce, chcąc wydłużyć czas przechowywania o 1h należy zamienić 3600*2 na 3600*3, itd. można też usunąć z kodu ",time()+3600*2" wtedy ciasteczko będzie przechowywane do końca sesji
}
?>

// -------------[ visits_counter.txt ]-------------
0
// nie wiem czy koniecznie trzeba wpisywać te 0, ale na wszelki wypadek można

/* -------------[ plik strony głównej ]-------------
Teraz trzeba umieścić plik counter.php na stronie głównej.
Otwieramy plik ze stroną główną i w miejscy gdzie chcemy, aby wyświetlał się licznik wpisujemy: */

<?php
include('licznik/counter.php');
?>
/* oczywiście pamiętamy o "licznik"
Chcąc aby licznik był odporny na odświeżanie, trzeba jeszcze dodatkowo na początku pliku ze stroną główną (powyżej znacznika <html>) dopisać */

<?php
include("licznik/reload_blockade.php");
?>


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=5451

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: sebulek Ranga: Poziom 6 Punktów: 172
Komentarze użytkowników
dam tylko info że poprawne zabezpieczenie przed odświeżaniem powinno być zabezpieczone przez: sesje, cookies i IP samo cookies wcale nie broni nas przed zaspamowaniem takiego licznika poniewaz cookis można wyłączyć i wtedy licznyk nie wyłapie przekrętu, jak bede miał chwile czasu udostęponie coś w oparciu o baze danych
autor: igor | 5464 | 2010-03-19 11:29:39


    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors