Kurs PHP #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ę zawierają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);
?>
<HTML>
<BODY>
Odwiedzasz tą stronę już po raz
<?
echo($iloscWejsc);
?>
</BODY>
</HTML>
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 <HTML>, ponieważ cookies są wysyłane do przeglądarki
użytkownika wraz z nagłówkiem strony. Po tagu <HTML> nagłówek jest już
wysłany, więc jest za późno na wysłanie cookie.
Licznik tekstowy odporny na odświeżanie
Teraz pokażę, jak zmodyfikować licznik z poprzedniego
rozdziału, aby nie naliczał kolejnych wejść tego samego użytkownika:
<?
setcookie("visited", "1", time()+3600*3); /* wysyła cookie na komputer użytkownika */
?>
<HTML>
<BODY>
<?
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 wartość */
?>
</BODY>
</HTML>
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 źró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 źródłowego.
Licznik graficzny
Dzięki tym funkcjom możliwe staje się stworzenie
licznika graficznego. Poniższy fragment kodu wymaga pliku cyfry.gif
<?
if(file_exists("c"))
{
$file=fopen("c", "r");
$ile=fgets($file, 1000);
$ile++;
fclose($file);
}
else
{
$ile=1;
}
/* usunąłem blokowanie plikówi sprawdzanie przeładowań,
ż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
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óźniej
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ą <IMG SRC=licznik.php3>.
Kurs
pochodzi z serwisu YGREG http://ygreg.and.pl
_________________________ 47 _________________________
:: Poprzednia strona :: Wstęp :: Następna strona ::
|