autor: Grzegorz Plebañski
Krótki kurs jêzyak PHP.
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);
?>
<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>.
(C)opyright 1999-2000 by Grzegorz Plebañski
ygreg@and.pl
http://ygreg.and.pl
|