Liczniki odwiedzin. Licznik odwiedzin na plikach

Podobne dokumenty
Baza danych do przechowywania użytkowników

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Kowalski Marcin Wrocław, dn Jaśkiewicz Kamil Bazy Danych 1 Podstawy Projekt Temat: Baza danych do zarządzania projektami

Bazy danych. Polecenia SQL

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

Język SQL, zajęcia nr 1

Bazy danych. dr Radosław Matusik. radmat

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Dokumentacja smsapi wersja 1.4

Projektowanie systemów baz danych

Podstawy technologii WWW

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Dokumentacja SQL API 1

Wykład 05 Bazy danych

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Struktura drzewa w MySQL. Michał Tyszczenko

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Instalacja systemu zarządzania treścią (CMS): Joomla

Wykład 6: PHP: praca z bazą danych MySQL, cz.2

6. Bezpieczeństwo przy współpracy z bazami danych

Dlaczego PHP? - zalety

Zakres tematyczny dotyczący kursu PHP i MySQL - Podstawy pracy z dynamicznymi stronami internetowymi

Ćwiczenie: JavaScript Cookies (3x45 minut)

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka

Dynamiczne generowanie pliku PDF

Wykład 5: PHP: praca z bazą danych MySQL

Gerard Frankowski, Zespół Bezpieczeństwa PCSS. Nowoczesne technologie bliżej nas Poznań,

Politechnika Częstochowska. Projektowanie systemów użytkowych II

Wykład 5. SQL praca z tabelami 2

Bazy danych. dr inż. Arkadiusz Mirakowski

Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Informatyki i Elektroniki

Połączenie Partnera z serwisem JustPay poprzez - METODĘ 2

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Wdrożenie modułu płatności eservice. dla systemu Magento

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Przykładowa baza danych BIBLIOTEKA

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

Kurs walut. Specyfikacja projektu. Marek Zając

Wykład 6. SQL praca z tabelami 3

Instrukcja obsługi narzędzia API

System archiwizacji i konserwacji baz danych MS SQL

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Wyrażenie wewnątrz nawiasów jest atomem (rozpatrujemy je jako całość).

Wordpress. Wstęp do tworzenia pluginów. Piotr Wasilewski wasilewski.piotrek (at) gmail.com

Spis treści. 1. Wstęp 2. Rejestracja 3. Logowanie 4. Moje konto 5. Program poleconych 6. Narzędzia Wydawcy 7. Zakończenie

Obsługa błędów w SQL i transakcje. Obsługa błędów w SQL

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Czym są właściwości. Poprawne projektowanie klas

CREATE USER

Jak ustawić cele kampanii?

Wykład 5 funkcje i procedury pamiętane widoki (perspektywy) wyzwalacze

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Spis treści. Wstęp 5 Rozdział 1. Praca z AJAX-em 9. Rozdział 2. Współpraca ze skryptami PHP 55. Rozdział 3. Obsługa formularzy 81

Podstawy technologii WWW

Autor: Joanna Karwowska

Internetowe bazy danych

SPIS TREŚCI. Sposób pierwszy... 3 Sposób drugi Ikony banków Ikony dostawców Strona1

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Dane - pobieranie, przekazywanie i przechowywanie. dr Beata Kuźmińska-Sołśnia

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

INSTRUKCJA INSTALACJI I KONFIGURACJI APLIKACJI WEBSOFT SITE ANALYZER 2.7.1

akademia androida Składowanie danych część VI

S P I S T R E Ś C I. Instrukcja obsługi

Ref. 7 - Język SQL - polecenia DDL i DML

Wprowadzenie do Doctrine ORM

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Polskie znaki w bazie danych

a) ile wynosiła populacja najbardziej i najmniej ludnego z województw (oraz jakie były ich nazwy)

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Instrukcja tworzenia stron w SILNIKU Do użytku wewnętrznego

15. Funkcje i procedury składowane PL/SQL

INSTRUKCJA obsługi certyfikatów

MODUŁ INTERNETOWY dane statystyczne PUP

KASK by CTI. Instrukcja

41. Zmienne lokalne muszą mieć nazwę, którą poprzedza (maksymalnie 128 znaków) oraz typ (każdy z wyjątkiem: text, ntext oraz image)

Informatyka II. Laboratorium Aplikacja okienkowa

Dokumentacja interfejsu MySQL. Platforma BSMS.PL Instrukcja podłączenia po przez mysql

Przykład 3 Zdefiniuj w bazie danych hurtownia_nazwisko przykładową funkcję użytkownika fn_rok;

Specyfikacja instalacji usługi SMS Premium w Przelewy24.pl

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Programowanie w SQL procedury i funkcje. UWAGA: Proszę nie zapominać o prefiksowaniu nazw obiektów ciągiem [OLIMP\{nr indeksu}] Funkcje użytkownika

PRZYJMOWANIE/WYDAWANIE KOLEKTORAMI BY CTI

Instrukcja obsługi. Helpdesk. Styczeń 2018

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Transkrypt:

Licznik odwiedzin prezentuje się fajnie na wszystkich stronach, niezależnie od jej popularności i wielkości. Duże serwisy potrzebują statystyk aby analizować ruch w danych miesiącach i popularność odpowiednich podstron. Małe strony używają ich raczej do ozdoby, jako fajny bajer i funkcjonalność. Liczniki odwiedzin obrazują także użytkownikom serwisu o jego popularności, jeżeli odwiedzin jest mało nie świadczy to zbyt dobrze o stronie (przynajmniej patrząc z perspektywy użytkownika). Liczniki odwiedzin Liczniki odwiedzin mogą być zaawansowane i proste. Mogą być zbudowane na plikach tekstowych oraz na bazie danych MySQL. Mogą być odporne na odświeżanie lub zwiększać się co każde kliknięcie. Można także zliczać ilość kliknięć w dany link (np. w dziale download). Pełnią one funkcje statystyczną. Doskonale obrazują popularność strony. Pamiętaj, że umieszczanie na stronie licznika odwiedzin w pewnych wypadkach może mieć skutki negatywne, szczególnie w przypadku młodych stron, które na początku będą miały po 5 odwiedzin dziennie. Licznik odwiedzin na plikach Zaprezentowany niżej licznik jest odporny na odświeżenia strony. Zapisuje ciastko o nazwie nasza-strona.pl. Możemy przedłużyć żywotność ciastka np. do 24h. Jeżeli użytkownik odwiedza stronę pierwszy raz, pobierana jest aktualna wartość licznika, zwiększana o 1 a następnie nadpisywana. Skrypt licznika musi znajdować się na samej górze strony (jeszcze przed tekstem) ponieważ wymaga tego funkcja SetCookie. Funkcja flock zabezpiecza plik licznika na czas kiedy prowadzone są operacje odczytu i zapisu. Gdyby funkcja nie została użyta wtedy wartość pliku została by utracona gdy stronę otworzą dwie osoby w tej samej chwili. Karol Trybulec p-programowanie.pl 1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <?php //ob_start(); if(!$_cookie['naszastrona']=="1") $plik="licz.txt"; //odczytujemy aktualną wartość z pliku $file=fopen($plik, "r"); flock($file, 1); $liczba=fgets($file, 16); flock($file, 3); fclose($file); $liczba++; //zwiększamy o 1 //zapisujemy nową wartość licznika $file=fopen($plik, "w"); flock($file, 2); fwrite($file, $liczba++); flock($file, 3); fclose($file); setcookie("naszastrona","1"); //ob_end_flush();?> Aby skrypt działał poprawnie, należy utworzyć plik licznika licz.txt i nadać mu prawa do odczytu i zapisu. Aby wyświetlić stan licznika wystarczy w dowolnym miejscu na stronie zaincludować plik licz.txt. Co prawda ładniej i bezpieczniej było by wczytać tą wartość za pomocą fgets, tak jak w kodzie wyżej. Wybór pozostawiam Tobie. 1 <?php include ('licz.txt');?> Licznik odwiedzin na bazie MySQL Licznik oparty o bazę danych daje nam większe możliwości. Zaprezentuję w jaki sposób napisałem licznik na tej stronie. Pokazuje on liczbę unikalnych odwiedzin oraz dodatkowo możemy wyświetlić liczbę odwiedzin z dzisiejszego dnia. Skrypt musi zostać umieszczony na samej górze dokumentu, z powodu ustawienia ciasteczka. Do poprawnego działania skryptu potrzebujemy tabeli o nazwie counter z dwoma polami. Pierwsze pole nosi nazwę data i jest typu date. Drugie pole nosi nazwę licznik i jest typu int. Ponieważ pole przechowujące datę nie będzie się powtarzać możemy ustawić indeksy, Karol Trybulec p-programowanie.pl 2

przyśpieszy to przeszukiwanie tabeli. Poniżej znajduje się przykładowa komenda do utworzenia tabeli: 1 CREATE TABLE IF NOT EXISTS `counter` ( 2 `data` date NOT NULL DEFAULT '0000-00-00', 3 `licznik` int(11) NOT NULL DEFAULT '1', 4 PRIMARY KEY (`data`) 5 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; Przyjmuję, że połączenie z bazą MySQL zaimplementujesz na własną rękę, gdzieś na początku dokumentu (jeszcze przed skryptem licznika). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <?php //ob_start(); function licznik_dzis() $sql = "SELECT `licznik` FROM `counter` ORDER BY `data` DESC LIMIT 0,1"; $licznik = mysql_result(mysql_query($sql),, ); return $licznik; function licznik_all() $sql = "SELECT sum(`licznik`) FROM `counter`"; $licznik = mysql_result(mysql_query($sql),, ); return $licznik; function licznik_last() $sql = mysql_query("select `data` FROM `counter` ORDER BY `data` DESC LIMIT 0,1"); $data = mysql_result($sql,, ); return $data; if(!$_cookie['naszastrona']=="1") $data = date('y-m-d'); if (licznik_last()==$data) $sql = mysql_query("update `counter` SET `licznik`=`licznik`+1 WHERE `data` = '$data';"); else $sql = mysql_query("insert INTO `counter` (`data`, `licznik`) VALUES ('$data',1)"); setcookie("naszastrona","1"); //ob_end_flush();?> Karol Trybulec p-programowanie.pl 3

Kod jest długi, ponieważ dołączyłem do niego 3 funkcje. Ułatwią nam one pracę i kod jest dzięki temu bardziej przejrzysty. Ja osobiście funkcje trzymam w osobnych plikach aby nie robić bałaganu, Ty zrobisz jak uważasz. Skrypt za pomocą ciastka sprawdza czy odwiedzamy stronę pierwszy raz. Jeżeli odwiedzamy stronę pierwszy raz, wartość pola licznik przy dzisiejszej dacie w tabeli zwiększa się o jeden. Jeżeli funkcja sprawdzająca najnowszą datę w tabeli (licznik_last()), wykryje że w tabeli nie ma jeszcze dzisiejszej daty, wtedy zostanie ona dodana i ma przypisaną wartość 1. Każda następna osoba w tym dniu zwiększy wartość licznika przy dzisiejszej dacie. Tak wygląda tabela po kilku dniach pracy licznika: 2010-01-01 42 2010-01-02 24 2010-01-03 12 2010-01-04 251 2010-01-05 61 Obok dni mamy ilość odwiedzin w danym dniu. Jeżeli jakiś dzień nie pojawi się w tabeli, oznacza to że nie było wtedy żadnych odwiedzin Aby wyświetlić skrypt w dowolnym miejscu na stronie skorzystamy z dołączonych wcześniej funkcji: 1 <?php 2 Odwiedzin dziś: <?php echo licznik_dzis();?><br> 3 Odwiedzin wszystkich: <?php echo licznik_all();?><br> 4?> Efektem działania powyższego skryptu będzie: Odwiedzin dziś: 42 Odwiedzin wszystkich: 812 Błędy w działaniu licznika Ten akapit dopisałem, ponieważ wiele osób skarży na źle działający licznik. Objawia się to brakiem odporności na odświeżanie strony. Jeżeli licznik nie jest odporny na odświeżanie to prawdopodobnie pliki Cookies nie zostają ustawione. Ważna informacja: Pliki cookies muszą zostać ustawione od razu po wczytaniu strony jeszcze w chwili gdy nic nie zostało wyświetlone. Karol Trybulec p-programowanie.pl 4

Jeżeli zechcesz ustawić plik cookies gdzieś w środku strony to prawdopodobnie zobaczysz komunikat: Warning: Cannot modify header information headers already sent by (output started at..). Komunikat nie musi zostać wyświetlony, ponieważ można go wyłączyć w configu serwera, a więc wszystko zależy od hostingu. Mimo wszystko jeżeli jesteś pewny, że pliki cookies zostają ustawiane w poprawnym miejscu (czyli na samej górze dokumentu), problem może tkwić w kodowaniu znaków. Większość kodowań wstawia różne niewidzialne znaki-śmiecie, które lubią generować powyższe błędy z buforem. Polecam użyć kodowania UTF-8 bez BOOM. Jeżeli posiadasz dokument w innym kodowaniu, możesz go przekonwertować do UTF-8 bez BOM np. za pomocą programu Notepad++. Ostatnim wyjściem na naprawienie licznika jest użycie funkcji ob_start(), która czyści bufor w tym miejscu, w którym chcemy go wyczyścić. W kodzie źródłowym liczników umieściłem wywołania funkcji ob_start() oraz ob_end_flush(). Są one aktualnie objęte komentarzami. Jeżeli spotkasz błąd opisany wyżej, lub licznik nie działa po prostu usuń komentarze lub zmień kodowanie dokumentu. Podsumowanie Obecnie, pisanie własnych liczników jest rzadkością. Wszystko za sprawą różnych systemów zarządzania treścią, które liczniki odwiedzin mają wbudowane. Pisanie własnego licznika ma sens tylko w przypadku pisania własnej strony od zera, bez korzystania z żadnego gotowego silnika. Karol Trybulec p-programowanie.pl 5