YGREG.COM - Kurs PHP - Część 5 http://www.ygreg.com/druk.php?php5
Kurs PHP - Część 5
HTTP Cookies
Czasem przydatna jest mo\liwość zapisania jakiejś informacji na komputerze klienta. Do
tego właśnie stworzony został mechanizm Cookies - skrypt mo\e zapisać na komputerze
u\ytkownika krótką informacje, a następnie po ponownym odwiedzeniu strony pobrać ją. W ten
sposób skrypt mo\e zidentyfikować u\ytkownika, który ju\ wchodził na stronę. W tym rozdziale
poka\ę przykład zastosowania cookie do stworzenia licznika odwiedzin zliczającego ka\dą
osobę tylko raz, niezale\nie od tego, ile razy wyświetli stronę.
Do zapisywania cookie na komputerze klienta słu\y funkcja setcookie:
setcookie(name, value, expire, path, domain, secure)
Wszystkie parametry oprócz name są opcjonalne. W tym kursie omówię tylko parametry name,
value oraz expire:
name - nazwa. Je\eli jest jedynym parametrem, cookie o podanej nzwie zostanie usunięte z
komputera u\ytkownika.
value - wartość która otrzyma cookie.
expire - data do której cookie będzie przechowywane na komputerze u\ytkownika, wyra\ona w
sekundach od 1 stycznia 1970 roku.
Kiedy u\ytkownik z zapisanym cookie otworzy stronę zawiwerającą skrypt, zostanie utworzona
zmienna o nazwie takiej jak podana w parametrze name, zawierająca wartość cookie. Przykład,
tym razem zacytuję całą treść strony:
$iloscWejsc++;
setcookie("iloscWejsc", $iloscWejsc);
?>
Odwiedzasz tą stronę ju\ po raz
echo($iloscWejsc);
?<
Ten skrypt będzie zliczał kolejne wejścia danego u\ytkownika na stronę. Poniewa\
informacja jest przechowywana na komputerze u\ytkownika, ka\dy odwiedzający stronę będzie
miał oddzielny licznik. Bardzo wa\ne jest umieszczenie komendy setcookie przed tagiem
, poniewa\ cookies są wysyłane do przeglądarki u\ytkownika wraz z nagłówkiem
strony. Po tagu nagłówek jest ju\ wysłany, więc jest za pózno na wysłanie cookie.
Licznik tekstowy odporny na odświe\anie
Teraz poka\ę, jak zmodyfikować licznik z poprzedniego rozdziału, aby nie naliczał
1 z 4 2010-02-14 21:06
YGREG.COM - Kurs PHP - Część 5 http://www.ygreg.com/druk.php?php5
kolejnych wejść tego samego u\ytkownika:
setcookie("visited", "1", time()+3600*3);
/* wysyła cookie na
komputer u\ytkownika */
?>
if(file_exists("counter.n"))
{ /* sprawdza, czy plik istnieje */
$file=fopen("counter.n", "r");
/* otwiera plik */
flock($file, 1);
/* blokuje plik */
$ile=fgets($file, 100);
/* odczytuje
wartość */
flock($file, 3);
/* odblokowuje plik */
fclose($file); /* zamyka
plik */
if($visited!="1")
/* sprawdza, czy
u\ytkownik
ju\ odwiedzał stronę */
{
$ile++; /* zwiększa
wartość
o 1 tylko po pierwszym
wejściu */
}
}
else
{
$ile=1; /* jeśli plik nie
istnieje,
wyświetli się 1 */
}
$file=fopen("counter.n", "w");
/* otwiera plik
do zapisu */
flock($file, 2);
/* blokuje do zapisu */
fwrite($file, $ile);
/* zapisuje wartość */
flock($file, 3);
/* odblokowuje plik */
fclose($file);
/*
zamyka plik */
echo($ile);
/* wyświetla
2 z 4 2010-02-14 21:06
YGREG.COM - Kurs PHP - Część 5 http://www.ygreg.com/druk.php?php5
wartość */
?>
Skrypt wysyła do u\ytkownika cookie. Następnie zwiększa licznik tylko je\eli wartość
cookie nie jest równa "1". Funkcja time() u\yta w 3 parametrze funkcji setcookie zwraca
aktualny czas, liczony w sekundach od 1 stycznie 1970 roku.
Obrazki w formacie GIF
PHP zawiera funkcje słu\ące do obsługi obrazków w formacie GIF. Do załadowania
obrazka u\ywa się funkcji ImageCreateFromGif("nazwa.pliku.gif"). Aby zapisać obrazek nale\y
u\yć funkcji ImageGif(obrazek, "nazwa.pliku.gif"). Parametr określający nazwę pliku mo\e
zostać pominięty - wtedy zawartość pliku zostanie bezpośrednio wysłana do przeglądarki.
Dzieki temu mozna utworzyc skrypt 'udający' obrazek:
header("Content-type: image/gif");
$image=ImageCreateFromGif("obrazek.gif");
ImageGif($image);
U\yta tutaj funkcja header słu\y do wysłania do przeglądarki pola nagłówka. W tym
wypadku określa, \e zostanie wysłany obrazek w formacie GIF. W pliku nie powinny znajdować
się \adne komendy HTMLa. Kolejną funkcją związaną z obsługą obrazków jest
ImageCreate(width, height) - tworzy ona obrazek o podanej szerokości i wysokości.
Do kopiowania fragmentów obrazków u\ywa się funkcji magecopyresized(dst_im, src_im,
dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH). Jej parametry oznaczają:
dst_im - obrazek docelowy
src_im - obrazek zródłowy
dstX, dstY - współrzędne lewego górnego rogu obszarudo którego zostanie skopiowany
obrazek. Punkt (0, 0) to lewy górny róg obrazka (oś pionowa jest numerowana z góry do dołu).
dstW, dstH - szerokość i wysokość obszaru docelowego
srcX, srcY, srcW, srcH - tak samo jak dstX, dstY, dstW i dstH dla obszaru zródłowego.
Licznik graficzny
Dzięki tym funkcjom mo\liwe staje się stworzenie licznika graficznego. Poni\szy fragment
kodu wymaga pliku (/images/cyfry.gif) cyfry.gif
if(file_exists("c"))
{
$file=fopen("c", "r");
$ile=fgets($file, 1000);
$ile++;
fclose($file);
}
else
{
$ile=1;
}
/* usunąłem blokowanie plików
i sprawdzanie przeładowań,
3 z 4 2010-02-14 21:06
YGREG.COM - Kurs PHP - Część 5 http://www.ygreg.com/druk.php?php5
\eby uprościć kod */
$file=fopen("c", "w");
fwrite($file, $ile);
fclose($file);
header("Content-type:
image/gif");
/* informuje przeglądarkę, \e zostanie
wysłany
obrazek w formacie GIF */
$image=ImageCreate(20*strlen($ile), 20);
/* tworzy pusty obrazek
*/
$cyfry=ImageCreateFromGif("cyfry.gif");
/* ładuje obrazek
z cyframi */
for($i=0;$i
{
ImageCopyResized($image, $cyfry, 20*$i, 0,
20*substr($ile, $i, 1),
0, 20, 20, 20, 20); /* rysuje kolejne cyfry */
}
ImageGif($image); /* wysyła przygotowany obrazek */
W skrypcie u\yłem jeszcze dwóch nowych funkcji: strlen($napis) - zwraca długość napisu
substr($napis, $poczatek, $n) - wycina $n znaków z napisu, zaczynając od pozycji $poczatek
Skrypt najpierw zlicza odwiedziny tak jak liczniki tekstowe z poprzednich rozdziałów. Następnie
tworzy obrazek, na którym będą rysowane kolejne cyfry. Pózniej ze zmiennej zawierającej ilość
odwiedzin wycina poszczególne cyfry, i kopiuje do nowego obrazka odpowiednie fragmenty
obrazka cyfry.gif. Tak otrzymany obrazek wysyła do przeglądarki. Odwołanie do skryptu mo\na
wstawić na stronie komendą .
Grzegorz 'Ygreg' Plebański
ygreg@ygreg.com
http://www.ygreg.com
http://www.ygreg.com
4 z 4 2010-02-14 21:06
Wyszukiwarka
Podobne podstrony:
PHP Część 1
PHP Część 3
PHP Część 2
PHP Część 4
PHP Część 6
czesc rozdzial
czesc 1
Thaumasyt – Część 1 Droga do powszechnie przyjętego zrozumienia
czesc rozdzial
php 2
czesc rozdzial
więcej podobnych podstron