Kurs PHP v2

background image

Technologie internetowe server-side na przykªadzie

j¦zyka PHP

background image

Spis tre±ci

1 Czym jest PHP?

2

2 Co potra PHP? Niektóre z zalet j¦zyka.

3

3 Instalacja PHP i serwera WWW Apache

5

3.1 Instalacja na platformie MS Windows

. . . . . . . . . . . . . . . . . . . . . .

5

3.2 Instalacja na platformie Linux

. . . . . . . . . . . . . . . . . . . . . . . . . .

7

4 Podstawowy kurs j¦zyka PHP

8

4.1 Osadzanie skryptu PHP w kodzie HTML

. . . . . . . . . . . . . . . . . . . .

8

4.2 Oddzielanie instrukcji

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

4.3 Komentarze

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

4.4 Typy danych PHP

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

4.5 Zmienne

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

4.6 Rzutowanie typów

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

4.7 Przypisanie warto±ci do zmiennych

. . . . . . . . . . . . . . . . . . . . . . .

13

4.8 Zasi¦g zmiennych

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

4.9 Zmienne dynamiczne (Zmienne zmienne)

. . . . . . . . . . . . . . . . . . . .

16

4.10 Testowanie i ustawianie typów zmiennych

. . . . . . . . . . . . . . . . . . . .

16

4.11 Staªe

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

4.12 Operatory

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

4.13 Priorytety operatorów

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

21

4.14 Struktury warunkowe

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

4.15 Instrukcje iteracyjne

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

4.16 Skªadnia alternatywna wyra»e«

. . . . . . . . . . . . . . . . . . . . . . . . .

27

5 Tablice

28

5.1 Tworzenie za pomoc¡ array()

. . . . . . . . . . . . . . . . . . . . . . . . . .

28

5.2 Tworzenie i edytowanie skªadni¡ nawiasów kwadratowych

. . . . . . . . . . .

28

5.3 Tablice wielowymiarowe

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

6 Funkcje

30

6.1 Argumenty funkcji

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

6.2 Zwracane warto±ci

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

7 Wielokrotne wykorzystywanie kodu

32

2

background image

8 Zmienne spoza PHP

34

8.1 Predeniowane tablice superglobalne

. . . . . . . . . . . . . . . . . . . . . .

34

8.2 Formularze (X)HTML (GET i POST)

. . . . . . . . . . . . . . . . . . . . .

35

8.3 Ciasteczka HTTP

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

8.4 Przesyªanie plików metod¡ POST

. . . . . . . . . . . . . . . . . . . . . . . .

41

9 HTTP - obsªuga protokoªu

42

10 Formatowanie czasu i daty

45

11 Wysyªanie poczty elektronicznej za pomoc¡ PHP

47

12 Obsªuga zmiennych tablicowych

50

13 Funkcje do obsªugi systemu plików

50

14 Ša«cuchy znaków

50

15 Wyra»enia regularne

50

16 Dost¦p do systemu MySQL z poziomu PHP

52

17 Obsªuga sesji

54

18 Zasoby sieciowe zwi¡zane z j¦zykiem PHP

57

background image

1 Czym jest PHP?

1 Czym jest PHP?

PHP jest j¦zykiem skryptowym wykonywanym po stronie serwera. Zostaª on zaprojektowany
specjalnie w celu tworzenia aplikacji sieci Web. Kod PHP mo»na umieszcza¢ wewn¡trz kodu
HTML i b¦dzie on wykonywany przy ka»dorazowym otwarciu danej strony. Kod ten jest
interpretowany przez serwer WWW, w wyniku czego generowany jest kod HTML lub inne
dokumenty. Spójrzmy na nast¦puj¡cy prosty przykªad skryptu w PHP:

<html>

<head>

<title>Przykªad</title>

</head>
<body>

<?php echo "Cze±¢! Jestem skryptem PHP!"; ?>

</body>

</html>

PHP ró»ni si¦ od skryptów wykonywanych po stronie klienta, takich jak np. JavaScript

tym, »e caªy kod PHP wykonywany jest na serwerze. Je±li mamy na serwerze skrypt podobny
do przedstawionego wy»ej, klient dostanie tylko rezultat wykonania skryptu, bez mo»liwo±ci
stwierdzenia jak wygl¡da generuj¡cy go kod. W naszym przypadku b¦dzie to:

<html>

<head>

<title>Przykªad</title>

</head>
<body>

Cze±¢! Jestem skryptem PHP!

</body>

</html>

Mo»na nawet skongurowa¢ serwer WWW, tak aby wszystkie pliki HTML byªy przetwarzane
przez PHP.

J¦zyk PHP zostaª wymy±lony w roku 1995 przez Rasmusa Lerdorfa. Od tego czasu kod

j¦zyka byª wielokrotne przepisywany i modykowany (du»y udziaª w tym miaªo dwóch izra-
elskich programistów Zeev Suraski i Andi Gutmans - twórcy rmy Zend Technologies), w
efekcie czego staª si¦ produktem profesjonalnym szeroko wykorzystywanym przez programi-
stów tworz¡cych aplikacje WWW. Wedªug statystyk w grudniu 2006 roku j¦zyk PHP byª

2

background image

2 Co potrafi PHP? Niektóre z zalet j¦zyka.

u»ywany na ponad 19 milionach domen. Strona

http://www.php.net/usage.php

zawiera

aktualne dane na ten temat.

PHP to produkt Open Source, ka»dy ma wi¦c dost¦p do kodu ¹ródªowego, który mo»na

dowolnie modykowa¢ i rozpowszechnia¢, bez ponoszenia jakichkolwiek opªat (pod warun-
kiem, »e równie» udost¦pnimy kod ¹ródªowy).

Nazwa j¦zyka stanowi skrót od sªów Personal Home Page, lecz zgodnie z konwencj¡

nazewnicz¡ obowi¡zuj¡c¡ dla produktów GNU (GNU to skrót od sªów Gnu's Not Unix
- Gnu to nie Unix - projekt bezpªatnego systemu operacyjnego, zgodnego funkcjonalnie z
systemem Unix) jest obecnie rozwijany jako PHP Hypertext Preprocessor.

2 Co potra PHP? Niektóre z zalet j¦zyka.

PHP jest rozwijane pod k¡tem pisania skryptów server-side, wi¦c za jego pomoc¡ mo»na
zrobi¢ wszystko co potra¡ inne programy CGI, jak na przykªad odbiera¢ dane z formularzy,
generowa¢ dynamicznie zawarto±¢ strony, lub odbiera¢ i wysyªa¢ ciasteczka. Ale PHP mo»e
o wiele wi¦cej. Do trzech gªównych obszarów u»ytkowania skryptów PHP nale»¡:

1. Tworzenie skryptów server-side. Jest to najbardziej tradycyjne i gªówne pole dzia-

ªania PHP. Potrzebujemy do tego trzech rzeczy: parsera PHP (plik wykonywalny CGI
lub moduª serwera), serwera WWW i przegl¡darki. Musimy uruchomi¢ serwer WWW
poª¡czony z PHP. Dane wyj±ciowe programów PHP mo»emy ogl¡da¢ korzystaj¡c z
przegl¡darki poprzez serwer.

2. Pisanie skryptów uruchamianych z linii polece«. Mo»emy napisa¢ skrypt PHP

i uruchomi¢ go bez serwera i przegl¡darki. Potrzebujemy do tego tylko parsera PHP.
Ten typ u»ytkowania jest idealny do uruchamiania skryptów regularnie poprzez crona
(systemy Uniksowe) lub mened»er zada« (systemy Windows), lub do przetwarzania
tekstu.

3. Pisanie aplikacji client-side z interfejsem u»ytkownika. PHP jest prawdopodob-

nie nienajlepszym j¦zykiem do pisania okienkowych aplikacji, ale je±li bardzo dobrze
znamy PHP i chcemy skorzysta¢ z zaawansowanych mo»liwo±ci PHP w swojej apli-
kacji client-side, mo»emy u»y¢ pakietu PHP-GTK do pisania takich programów. Z
PHP-GTK mamy tak»e mo»liwo±¢ pisania aplikacji wieloplatformowych. PHP-GTK
jest rozszerzeniem PHP i nie jest dost¦pne w gªównej dystrybucji. Ocjalna witryna
PHP-GTK to

http://gtk.php.net

.

Najwi¦ksi konkurenci j¦zyka PHP to Perl, Microsoft Active Server Pages (ASP),

Java Server Pages (JSP), Allaire Cold Fusion. Do konkurencji zaliczy¢ nale»y równie»

3

background image

2 Co potrafi PHP? Niektóre z zalet j¦zyka.

framework Django napisany w Pythonie oraz Ruby on Rails stworzony w j¦zyku Ruby.
W porównaniu do konkurencji, PHP posiada wiele zalet, a mi¦dzy innymi:

Jest wydajny. Korzystaj¡c z pojedynczego, niedrogiego serwera, mo»na obsªugiwa¢
miliony "trae«" dziennie. Testy wydajno±ci mo»emy znale¹¢ na stronie rmy Zend
Technologies (

http://zend.com

).

Jest wieloplatformowy i przeno±ny. PHP mo»e by¢ u»yty w wi¦kszo±ci najwa»-
niejszych systemów operacyjnych, takich jak Linux, wiele wariantów systemu Unix
(wª¡czaj¡c w to HP-UX, Solaris i OpenBSD), Microsoft Windows, Mac OS X, RISC
OS i prawdopodobnie wiele innych. PHP w chwili obecnej obsªuguje wi¦kszo±¢ serwerów
HTTP, wª¡czaj¡c w to Apache, Microsoft Internet Information Server, Personal Web
Server, serwery Netscape i iPlanet, Oreilly Website Pro, Caudium, Xitami, OmniHT-
TPd i wiele innych. Dla wi¦kszo±ci z nich PHP dost¦pne jest jako moduªy serwera,
dla pozostaªych jako program CGI. Kod przenoszony pomi¦dzy ró»nymi systemami,
zazwyczaj dziaªa prawidªowo bez jakichkolwiek modykacji.

Obsªuguje wiele baz danych. Jedn¡ z najmocniejszych i najbardziej znacz¡cych
mo»liwo±ci PHP jest obsªuga wielu rodzajów baz danych. Pisane strony WWW wyko-
rzystuj¡cej baz¦ danych jest niewiarygodnie proste. Obecnie obsªugiwane s¡ nast¦puj¡-
ce bazy danych: Adabas D, Ingres, Oracle (OCI7 i OCI8), dBase, InterBase, Ovrimos,
Empress, FrontBase, PostgreSQL, FilePro (tylko do odczytu), mSQL, Solid, Hyperwa-
ve, Direct MS-SQL, Sybase, IBM DB2, MySQL, Velocis, Informix, ODBC, Unix dbm.
Korzystaj¡c ze standardu ODBC (Open Database Conectivity), mo»na si¦ poª¡czy¢ z
dowoln¡ baz¡ danych, do której istnieje sterownik ODBC.

Wbudowane biblioteki. Mo»liwo±ci PHP obejmuj¡ tworzenie obrazów, plików PDF,
a nawet animacji Flash (u»ywaj¡c libswf i Ming) generowanych "w locie". Mo»emy
tak»e wyprowadza¢ na wyj±cie dowolne dane tekstowe, jak na przykªad XHTML czy
dowolny inny plik XML-owy. PHP obsªuguje równie» protokoªy takie jak FTP, IMAP,
SNMP, NNTP, POP3, HTTP. PHP ma niezwykle przydatne mo»liwo±ci do obróbki
tekstów m. in. POSIX'owe i PERL'owe wyra»enia regularne.

Niskie koszty u»ytkowania i dost¦p do kodu ¹ródªowego. Jako produkt Open
Source PHP jest dost¦pny za darmo wraz z kodem ¹ródªowym.

Prosta skªadnia. Jest ona oparta na innych j¦zykach programowania, a w szczególno-
±ci na j¦zyku C i Perl. Je±li programowali±my w j¦zykach wywodz¡cych si¦ z C, takich
jak C++ czy Java, to nauka PHP nie sprawi nam kªopotu.

4

background image

3 Instalacja PHP i serwera WWW Apache

3 Instalacja PHP i serwera WWW Apache

Po pierwsze ±ci¡gamy najnowsze pakiety dla odpowiedniej platformy z nast¦puj¡cych witryn:

http://httpd.apache.org/

- strona serwera Apache,

http://www.php.net

- ocjalna witryna j¦zyka PHP,

3.1 Instalacja na platformie MS Windows

Zaczynamy od instalacji serwera Apache. Instalacja nowszych wersji Apache'a ogranicza si¦
do kilku klikni¦¢ mysz¡. Uruchamiamy instalatora i wybieramy skªadniki instalacji i wst¦pnie
kongurujemy serwer ustawiaj¡c:

Network domain - domena sieci, je»eli nie mamy wªasnej domeny ustawienia te
nie maj¡ wpªywu na dziaªanie naszego serwera i mo»emy wpisa¢ dowoln¡ nazw¦ np.
domena.com (w naszym przypadku domena jest rozpoznana automatycznie);

Server Name - nazwa serwera np. www.domena.com (je±li nie ustawimy to domy±lna
nazwa to nazwa komputera);

Administrators Email Address - tu mo»emy wpisa¢ swój adres email, b¦dzie on
wy±wietlany w podpisie serwera (server signature).

Pó¹niej wybieramy sposób uruchamiania serwera, odpowiadamy czy Apache ma si¦ urucha-
mia¢ automatycznie przy starcie systemu, czy te» b¦dziemy uruchamia¢ go r¦cznie. Propo-
nujemy start jako System Service, wtedy serwer b¦dzie pracowaª w tle, bez czarnego okienka
Dos. Dodatkowo b¦dziemy mieli opcje sterowania Apache czyli start, stop i restart. Nast¦p-
nie dochodzimy do wyboru ±cie»ki, gdzie zainstaluje si¦ Apache. Domy±lnie Apache instaluje
si¦ C:\Program Files\Apache Group jednak mo»emy t¦ ±cie»k¦ zmieni¢.

Teraz mo»emy sprawdzi¢, czy serwer zostaª poprawnie zainstalowany. W tym celu uru-

chamiamy przegl¡dark¦ i wpisujemy w pasku adresu "localhost" lub "127.0.0.1", czyli
lokalny adres naszego komputera (adres p¦tli zwrotnej). Je»eli instalacja przebiegªa pomy±l-
nie, powinni±my zobaczy¢ ekran powitalny naszego serwera. Wszystkie strony, które b¦d¡
obsªugiwane przez nasz serwer musz¡ si¦ znale¹¢ w katalogu

C:\Program Files\Apache Group\apache\htdocs\

b¡d¹ w folderze

C:\Program Files\Apache Group\apache\users\username

5

background image

3 Instalacja PHP i serwera WWW Apache

(w tym drugim przypadku aby "odpali¢" stron¦ musimy wpisa¢ adres
http://localhost/~username/podkatalog/nazwapliku).

Instalacja PHP. Rozpakowujemy binaria PHP do jakiego± katalogu np. C:\php\. Po

rozpakowaniu musimy skopiowa¢ plik php.ini-dist do katalogu windows (C:\windows\ lub
C:\winnt\) i zamieni¢ jego nazw¦ na php.ini. Nast¦pnie musimy skopiowa¢ plik php4ts.dll
do katalogów C:\windows\system\ i C:\windows\system32\ to samo robimy z plikami z fol-
deru C:\php\dlls\. Po skopiowaniu plików musimy zastanowi¢ si¦ jak chcemy zainstalowa¢
PHP. Mamy dwie mo»liwo±ci:

Instalacj¦ poprzez CGI.

Instalacj¦ jako moduª serwera Apache.

Aby zainstalowa¢ PHP w serwerze Apache musimy otworzy¢ plik konguracyjny Apache
(httpd.conf) w dowolnym edytorze tekstowym i w odpowiednich sekcjach dopisa¢ poni»sze
linie:

Dla instalacji jako CGI:

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php .php3 .phtml
Action application/x-httpd-php "/php/php.exe"}

Dla instalacji jako moduªu serwera:

LoadModule php4_module /php/sapi/php4apache.dll
ScriptAlias /php/ "c:/php/"
Action application/x-httpd-php "/php/php.exe"
AddType application/x-httpd-php .php .php3 .phtml}

To wystarczy do tego, aby serwer interpretowaª pliki z rozszerzeniem *.php, *.php3,

*.phtml jako pliki PHP, a je»eli chcemy, aby domy±lnym plikiem katalogu byª plik o nazwie
index.<nasze\_rozszerzenie> musimy dopisa¢ jeszcze w odpowiedniej sekcji linijk¦:

DirectoryIndex index.<nowe\_rozszerzenie>

Teraz pozostaªo nam zapisanie zmian w pliku httpd.conf i zrestartowanie serwera, aby

zobaczy¢, czy PHP prawidªowo interpretuje pliki i odpowiednio je parsuje. Najprostszym
sposobem na sprawdzenie, czy PHP dziaªa jest stworzenie pliku, np. test.php, w którym
b¦dzie si¦ znajdowaªa jedna linijka kodu:

<? phpinfo(); ?>

6

background image

3 Instalacja PHP i serwera WWW Apache

Teraz otwieramy przegl¡dark¦ i wpisujemy w pasku adresu

http://localhost/test.php. Je»eli wszystko jest w porz¡dku oczom naszym uka»e si¦
strona w wieloma tabelami, w których znajdowa¢ si¦ b¦d¡ informacje o zainstalowanych
wersjach PHP i Apache.

3.2 Instalacja na platformie Linux

Do instalacji potrzebne s¡ nast¦puj¡ce narz¦dzia:

gzip lub gnuzip;

gcc i GNU make;

¹ródªa oprogramowania Apache i PHP;

uprawnienia u»ytkownika root.

W typ przypadku zainstalujemy oprogramowanie w nast¦puj¡cych katalogu
/usr/local/apache. PHP wymaga, aby serwer Apache byª ju» wst¦pnie skongurowany, w
tym celu wykonujemy nast¦puj¡ce polecenia:

#tar zxvf apache_x.x.x.tar.gz
#cd apache_x.x.x
#./configure --prefix=/usr/local/apache

Teraz mo»emy ju» przyst¡pi¢ do instalacji PHP:

#tar zxvf php-x.x.x.tar.gz
#cd php-x.x.x
#./configure --with-mysql --with-apache=../apache_x.x.x

Nast¦pnie kompilujemy i instalujemy binaria:

#make
#make install

Ostatnim krokiem jest konguracja i instalacja serwera Apache:

#cd ../apache_1.3.x
#./configure --activate-module=src/modules/php4/libphp4.a

--enable-module=php4 --prefix=/usr/local/apache

#make
#make install

7

background image

4 Podstawowy kurs j¦zyka PHP

Jeszcze musimy tylko wyedytowa¢ plik httpd.conf dopisuj¡c nast¦puj¡ce wiersze:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

4 Podstawowy kurs j¦zyka PHP

W tej cz¦±ci nauczymy si¦ elementarnej skªadni j¦zyka.

4.1 Osadzanie skryptu PHP w kodzie HTML

Je±li chcemy wstawi¢ komendy PHP w jakim± miejscu w swoim dokumencie musimy to
zasygnalizowa¢, wchodz¡c w "tryb PHP" którym± ze sposobów podanych poni»ej:

Styl znaczników krótkich:

<? echo "To jest test"; ?>
<?= wyra»enie ?> To jest skrót takiej formy: "<? echo wyra»enie ?>"

Styl XML:

<?php echo "Je±li chcemy u»ywa¢ dokumentów XHTML i XML"; ?>

Styl skryptowy(sposób przestarzaªy):

<script language="php">
echo ("Niektóre edytory (jak FrontPage)

nie lubi¡ instrukcji wchodz¡cych w 'tryb PHP'");

</script>

Styl ASP:

<% echo ("Mo»emy tak»e u»y¢ znaczników w stylu ASP"); %>

8

background image

4 Podstawowy kurs j¦zyka PHP

Pierwszy sposób jest dost¦pny tylko kiedy zostaªy wª¡czone krótkie znaczniki. Mo»na to
zrobi¢ wpisuj¡c short_open_tag on do pliku konguracyjnego PHP albo przy kompilacji
PHP dodaj¡c --enable-short-tags do configure.

Drugi sposób jest preferowany, zapewnia on nast¦pnej generacji XHTML-a ªatw¡ imple-

mentacj¦ w PHP.

Czwarty sposób jest dost¦pny tylko kiedy znaczniki ASP zostaªy wª¡czone poprzez uak-

tywnianie opcji konguracyjnej asp_tags.

W j¦zyku PHP mo»na równie» u»ywa¢ nast¦puj¡cej formy:

<?php

if (wyrazenie-logiczne) {

?>

<strong>prawda </strong>

<?php

} else {

?>

<strong>faªsz </strong>

<?php

}

?>

4.2 Oddzielanie instrukcji

Instrukcje s¡ oddzielane tak samo jak w C czy Perlu - nale»y ko«czy¢ ka»de wyra»enie
±rednikiem. Znacznik zamykaj¡cy (?>) tak»e ko«czy instrukcj¦, wi¦c poni»sze przykªady s¡
równowa»ne:

<?php

echo "To jest test";

?>

<?php echo "To jest test" ?>

4.3 Komentarze

PHP obsªuguje komentarze w stylu C, C++ oraz komentarze u»ywane w powªokach unikso-
wych (#):

9

background image

4 Podstawowy kurs j¦zyka PHP

<?php

echo "To jest test"; // to jest komentarz jednoliniowy w stylu C++
/* to jest komentarz wieloliniowy

a tutaj inna komentowana linia */

echo "To jest jeszcze jeden test";
echo "Ostatni test"; # to jest komentarz w stylu shell'a

?>

Komentarze typu jednoliniowego maj¡ zasi¦g do ko«ca linii, w której si¦ znajduj¡ lub do
ko«ca bloku kodu PHP, zale»nie co wyst¡pi pierwsze.

Powinni±my uwa»a¢ by nie zagnie»d»a¢ komentarzy w stylu C++ (szczególnie komentarzy

wieloliniowych), co mo»e si¦ sta¢ kiedy komentujemy dªu»szy blok kodu.

4.4 Typy danych PHP

PHP obsªuguje osiem typów:

Cztery skalarne:

boolowski (boolean),

liczba caªkowita (integer),

liczba zmiennoprzecinkowa (oat),

ªa«cuch znaków (string);

Dwa typy zªo»one:

tablica (array),

obiekt (object);

Oraz dwa typy specjalne:

identykator zasobów (resource),

NULL (null).

Typ boolean wyra»a logiczn¡ prawd¦ lub faªsz. Mo»e mie¢ warto±ci true lub false.

Ten typ najcz¦±ciej u»ywany jest przy operatorach, które zwracaj¡ warto±¢ typu boolean,
któr¡ nast¦pnie przekazuje si¦ do struktur kontrolnych.

Typ integer to liczba caªkowita, nale»¡ca do pewnego zbioru

10

background image

4 Podstawowy kurs j¦zyka PHP

Z = {-n..., -2, -1, 0, 1, 2, ...,n}.

Liczby caªkowite mog¡ by¢ zapisane w notacji dziesi¦tnej (opartej na 10), szesnastkowej
(opartej na 16) lub ósemkowej (opartej na 8), opcjonalnie poprzedzone znakiem (- lub +).
Aby zapisa¢ liczb¦ w notacji ósemkowej, nale»y poprzedzi¢ wªa±ciw¡ liczb¦ symbolem 0
(zero). W notacji szesnastkowej liczb¦ nale»y poprzedzi¢ symbolem 0x.

Liczby zmiennoprzecinkowe (typ float, double ) mog¡ by¢ zapisane przy u»yciu

dowolnej z poni»szych skªadni:

$a = 1.234;
$a = 1.2e3;
$a = 7E-10;

Maksymalna wielko±¢ liczby zmiennoprzecinkowej jest zale»na od platformy operacyjnej,
zwykle jest to ±1.8e308, przy precyzji 14 liczb dziesi¦tnych po przecinku.

Typ string oznacza ªa«cuch znaków. W PHP znak jest tym sam co bajt, co oznacza, »e

jest mo»liwych 256 ró»nych znaków.

Uwaga! Nie ma technicznych problemów, które utrudniaªyby tworzenie bardzo dªugich ci¡-
gów znaków. Nie ma te» ustalonej maksymalnej dªugo±ci ªa«cuchów znaków obsªugiwanych
w PHP, wi¦c nie ma powodu do obaw, »e dany ªa«cuch jest zbyt dªugi.

Ša«cuch znaków mo»na utworzy¢ na trzy sposoby:

przez pojedyncze cudzysªowy: ',

przez podwójne cudzysªowy ",

za pomoc¡ skªadni heredoc.

Najprostszym sposobem na zdeniowanie prostego ªa«cucha znaków, jest umieszczenie go
w pojedynczych cudzysªowach (znak '). Aby w takim ªa«cuchu umie±ci¢ symbol pojedyn-
czego cudzysªowu, nale»y go poprzedzi¢ uko±nikiem wstecznym (\), tak jak w wielu innych
j¦zykach programowania. Je±li uko±nik wsteczny ma wyst¡pi¢ przed symbolem pojedynczego
cudzysªowu lub na ko«cu ªa«cucha, wtedy nale»y napisa¢ go dwukrotnie. W przypadku u»y-
cia uko±nika wstecznego z innym znakiem, uko±nik te» zostanie wy±wietlony! Nie ma zatem
potrzeby pisania uko±nika dwukrotnie w innych sytuacjach.

Uwaga! W przeciwie«stwie do dwóch pozostaªych skªadni, zmienne nie b¦d¡ zamienione
na swoje warto±ci, kiedy pojawi¡ si¦ pomi¦dzy pojedynczymi cudzysªowami.

11

background image

4 Podstawowy kurs j¦zyka PHP

Kiedy ªa«cuch znaków jest umieszczony pomi¦dzy podwójnymi cudzysªowami, PHP in-

terpretuje wi¦cej sekwencji cytowania dla znaków specjalnych:

Sekwencja Znaczenie
\n

nowa linia (LF lub 0x0A (10) w ASCII)

\r

powrót karetki (CR lub 0x0D (13) w ASCII)

\t

tabulacja pozioma (HT lub 0x09 (9) w ASCII)

\\

odwrotny uko±nik

\$

znak dolara

\"

cudzysªów podwójny

Tak jak w poprzedniej skªadni, zapisanie uko±nika wstecznego przed ka»dym innymi

znakiem spowoduje wy±wietlenie zarówno uko±nika, jak i znaku.

Ale najwa»niejsz¡ wªa±ciwo±ci¡ podwójnych cudzysªowów jest to, »e zapisane w nich

zmienne zostan¡ zamienione na ich warto±ci.

Jeszcze jednym sposobem na zapisanie ªa«cucha znaków jest u»ycie skªadni heredoc

(<<<). Po operatorze <<< powinno si¦ umie±ci¢ identykator i takim samym identykatorem
trzeba zako«czy¢ ªa«cuch znaków.

Wa»ne by pami¦ta¢, »e linia zawieraj¡ca identykator zamykaj¡cy nie mo»e zawiera¢

»adnych innych znaków, z wyj¡tkiem ±rednika. Znaczy to przede wszystkim, »e identykator
zamykaj¡cy nie mo»e by¢ wcinany, i nie mo»e by¢ »adnych spacji ani tabulacji przed lub za
±rednikiem.

Uwaga! Najbardziej dokuczliwym ograniczeniem jest to, »e wewn¡trz tego ªa«cucha znaków
nie mo»e by¢ znaku powrotu karetki (\r) na ko«cu linii, jedynie znak nowej linii (\n).
Poniewa» Microsoft Windows u»ywa jako znaku ko«ca linii sekwencji \r\n, ªa«cuchy znaków
zapisane w skªadni heredoc mog¡ nie dziaªa¢, je±li skrypt zostanie napisany w edytorze
windowsowym. Na szcz¦±cie wi¦kszo±¢ edytorów tekstowych udost¦pnia mo»liwo±¢ zapisania
pliku w uniksowym formacie ko«ca linii.

Skªadnia heredoc zachowuje si¦ podobnie jak tekst w cudzysªowach podwójnych. W tej

skªadni nazwa zmiennej zamieniana jest na jej warto±¢, ale nale»y zachowa¢ ostro»no±¢ przy
zapisie zªo»onych zmiennych razem z tekstem.

<?php
$str = <<<EOD
Przykªad ªa«cucha znaków,
zajmuj¡cego kilka linii,
zapisanego w skªadni heredoc.
EOD;

12

background image

4 Podstawowy kurs j¦zyka PHP

Typy zªo»one: tablice (array) i obiekty (object) omówimy oddzielnie.

Identykator zasobów jest specjaln¡ zmienn¡, przechowywuj¡c¡ odno±nik do zewn¦trz-

nego ¹ródªa zasobów. Identykatory zasobów s¡ tworzone i wykorzystywane przez specjalne
funkcje.

Specjalna warto±¢ NULL oznacza, »e zmienna nie przechowuje »adnej warto±ci. NULL

jest jedyn¡ mo»liw¡ warto±ci¡ typu NULL.

Uwaga! Typ NULL zostaª wprowadzony w PHP 4. Wielko±¢ liter sªowa NULL nie gra roli.

4.5 Zmienne

Ka»d¡ zmienn¡ w PHP zapisuje si¦, poprzedzaj¡c jej nazw¦ znakiem dolara: $. Wielko±¢
liter w nazwie zmiennej jest rozró»niana. Nazw zmiennych dotycz¡ te same reguªy, co innych
rodzajów nazw w PHP. Poprawna nazwa zmiennej zaczyna si¦ od litery lub znaku podkre±le-
nia: "_", po których mo»e wyst¡pi¢ dowolna ilo±¢ liter, cyfr lub znaków podkre±lenia. PHP,
podobnie jak je»yk JavaScript, nie wymaga (a nawet nie obsªuguje) jawnej deklaracji typów
zmiennych. Typ zmiennej jest okre±lany na podstawie kontekstu, w jakim ta zmienna jest
u»ywana. Oznacza to m.in., »e po przypisaniu ªa«cucha znaków do zmiennej $var, zmienna
ta zmienia swój typ na string. Je±li potem zostanie jej przypisana warto±¢ caªkowita, $var
zmienia swój typ na integer. Innymi sªowy PHP charakteryzuje si¦ sªab¡ kontrola typów
(weakly typed).

4.6 Rzutowanie typów

Rzutowanie typów w PHP dziaªa mniej wi¦cej tak jak w j¦zyku C: nazwa docelowego typu
umieszczana jest w nawiasach przed nazw¡ zmiennej, która ma by¢ zrzutowana.

$foo = 10;

// $foo jest liczb¡ caªkowit¡

$bar = (float) $foo;

// $bar jest typu float (zmiennoprzecinkowego)

W PHP mamy nast¦puj¡ce operatory rzutowania:

(int), (integer) - rzutowanie do liczb caªkowitych,

(bool), (boolean) - rzutowanie do typu boolowskiego,

(oat), (double), (real) - rzutowanie do liczb zmiennoprzecinkowych,

(string) - rzutowanie do ªa«cucha znaków,

(array) - rzutowanie do tablicy,

13

background image

4 Podstawowy kurs j¦zyka PHP

(object) - rzutowanie do obiektu,

Uwaga! Zamiast rzutowa¢ zmienn¡ do ªa«cucha znaków operatorem, mo»na te» umie±ci¢
zmienn¡ w cudzysªowie podwójnym.

4.7 Przypisanie warto±ci do zmiennych

W PHP 3, przypisanie warto±ci zmiennych byªo mo»liwe tylko przez nadanie im warto±ci.
Innymi sªowy, je±li przypiszemy do zmiennej jakie± wyra»enie, warto±¢ tego wyra»enia zo-
stanie skopiowana do zmiennej. Oznacza to, »e po przypisaniu warto±ci jednej zmiennej do
drugiej, pó¹niejsza zmiana warto±ci jednej z nich nie spowoduje zmiany warto±ci drugiej.

PHP 4 oferuje jeszcze jeden sposób przypisywania warto±ci do zmiennych: przypisanie

przez referencj¦. Oznacza to, »e nowa zmienna tylko odnosi si¦ (innymi sªowy, "staje si¦
aliasem" lub "wskazuje na") do pierwotnej zmiennej. Zmiany wykonane na nowej zmien-
nej oddziaªuj¡ tak»e na pierwotn¡ zmienn¡ i vice versa. Ma to te» takie znaczenie, »e nie
nast¦puje »adna operacja skopiowania, czyli przypisanie nast¦puje szybciej.

Aby przypisa¢ przez referencj¦, stawiamy znak ampersand (&) przed nazw¡ zmiennej

przypisywanej (zmiennej, od której pobieramy warto±¢).

$foo = "PHP"; // Przypisz warto±¢ "PHP" do $foo.
$bar = &$foo; // Przypisz referencyjnie $foo do $bar.

Uwaga! Nale»y pami¦ta¢, »e tylko wyra»enia posiadaj¡ce nazw¦ mog¡ by¢ przypisane przez
referencj¦.

4.8 Zasi¦g zmiennych

Zasi¦g zmiennej jest zale»ny od miejsca, w jakim zostaªa zdeniowana. W j¦zyku PHP wy-
ró»nia si¦ trzy podstawowe rodzaje zasi¦gu:

Deklarowane w skrypcie zmienne globalne widziane s¡ w caªym skrypcie, lecz nie
wewn¡trz funkcji.

Zmienne u»ywane wewn¡trz funkcji widziane s¡ jedynie przez t¦ funkcj¦ (zmienne
lokalne).

Zmienne u»ywane wewn¡trz funkcji, lecz deklarowane jako globalne, odnosz¡ si¦ do
zmiennych globalnych o tych samych nazwach.

14

background image

4 Podstawowy kurs j¦zyka PHP

$a = 1; /* zasi¦g globalny */
function Test()
{

echo $a; /* odwoªanie do zmiennej o zasi¦gu lokalnym */

}
Test();

Ten skrypt nie wy±wietli niczego, poniewa» instrukcja echo odwoªuje si¦ do zmiennej lokalnej
$a, której jak dot¡d nie zostaªa przypisana »adna warto±¢.

$a = 1;
$b = 2;
function Sum(){
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;

Powy»szy skrypt wy±wietli wynik "3". Przez zadeklarowanie wewn¡trz funkcji globalno±ci
zmiennych $a i $b, wszystkie odwoªania do tych zmiennych b¦d¡ odnosiªy si¦ do ich global-
nych wersji. Drugim sposobem uzyskania dost¦pu do zmiennych globalnych wewn¡trz funkcji
jest u»ycie specjalnej, zdeniowanej przez PHP tablicy $GLOBALS. Powy»szy przykªad mo»na
zatem przepisa¢ tak:

$a = 1;
$b = 2;
function Sum()
{

$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];

}
Sum();
echo $b;

$GLOBALS jest tablic¡ asocjacyjn¡, gdzie nazwa zmiennej jest kluczem, a zawarto±¢ zmiennej
warto±ci¡ komórki tablicy.

Jeszcze jedn¡ wa»n¡ rzecz¡, zwi¡zan¡ z zasi¦giem zmiennych jest zmienna statyczna

(static variable). Zmienna statyczna mo»e mie¢ wyª¡cznie zasi¦g lokalny, ale nie traci swojej
warto±ci, kiedy program opu±ci ten zasi¦g lokalny, w którym dana zmienna statyczna si¦
znajduje.

15

background image

4 Podstawowy kurs j¦zyka PHP

function Test(){

static $a = 0;
echo $a;
$a++;

}

Za ka»dym wywoªaniem funkcji test, zostanie wy±wietlona warto±¢ zmiennej $a, po czym
ta zmienna zostanie inkrementowana. Funkcja jest bezu»yteczna, gdy $a nie jest zmienna
statyczn¡, gdy» przy ka»dym jej wywoªaniu zmienna $a otrzymuje warto±¢ 0, w zwi¡zku z
czym funkcja stale wy±wietla "0". Wyst¦puj¡ca potem inkrementacja $a++ nie ma »adnego
znaczenia, gdy» funkcja si¦ ko«czy i zmienna $a znika.

4.9 Zmienne dynamiczne (Zmienne zmienne)

W niektórych przypadkach jest wygodne, by móc u»y¢ zmiennej o zmiennej nazwie. To znaczy
zmiennej, której nazwa mo»e by¢ zmieniana dynamicznie. Zwykªa zmienna jest ustawiana
wyra»eniem jak poni»ej:

$a = "witaj";

Zmienna dynamiczna pobiera warto±¢ jednej zmiennej i traktuje j¡ jako nazw¦ zmiennej.
W powy»szym przykªadzie, witaj mo»e sta¢ si¦ nazw¡ zmiennej, przy u»yciu dwóch znaków
dolara, tzn.

$$a = "±wiecie";

W tym momencie dwie zmienne zostaªy zdeniowane i umieszczone w drzewie symbolicznym
PHP: $a zawieraj¡ca witaj i $witaj zawieraj¡ca ±wiecie. Zatem poni»szy zapis:

echo "$a ${$a}";

znaczy to samo, co:

echo "$a $witaj";

tzn. obydwa wy±wietl¡: witaj ±wiecie.

Uwaga! Aby u»ywa¢ zmiennych zmiennych jako tablic, trzeba rozwi¡za¢ pewn¡ niejasno±¢.
Mianowicie, je±li napiszemy $$a[1], parser musi wiedzie¢, czy chcemy u»y¢ $a[1] jako nazwy
zmiennej, czy $$a jako nazwy tablicy, której rekord [1] nas interesuje. W tym przypadku
nale»y zastosowa¢ odr¦bn¡ skªadni¦: ${$a[1]} dla pierwszego przypadku a ${$a}[1] dla
drugiego.

16

background image

4 Podstawowy kurs j¦zyka PHP

4.10 Testowanie i ustawianie typów zmiennych

Dwie najwa»niejsze funkcje testuj¡ce typy zmiennych, to gettype() oraz settype(). Skªad-
nia tych funkcji jest nast¦puj¡ca:

string gettype(mixed var)
int settype(string var, string type)

Jako argument funkcji gettype() przekazujemy zmienn¡. Funkcja ta okre±la typ owej zmien-
nej, po czym zawraca ªa«cuch znaków, reprezentuj¡cy nazw¦ tego typu, lub ªa«cuch unknown type
(nieznany typ), w przypadku gdy zastosowano zmienn¡ typu niestandardowego, tj. innego
ni» integer, double, string, array lub object.

Funkcja settype() pozwala na zmian¦ typu. Przekazujemy zmienn¡, której chcemy

nada¢ inny typ oraz ªa«cuch znaków reprezentuj¡cy nowy typ. Ša«cuch ten musi zawie-
ra¢ jedn¡ z przedstawionych powy»ej warto±ci, opisuj¡cych standardowe typy PHP. Oto
przykªad u»ycia tych funkcji:

$a = 56;
echo gettype($a)."<br>";
settype($a, "double");
echo gettype($a) ."<br>";

Przy pierwszym wywoªaniu funkcji gettype(), zmienna $a jest typu integer. Po wywoªaniu
funkcji settype(), typ tej zmiennej zostaje zmieniony na double.

PHP oferuje równie» szereg funkcji pozwalaj¡cych na testowanie, czy dana zmienna jest

okre±lonego typu. Ka»da z tych funkcji wymaga jako argumentu sprawdzanej zmiennej, a
zwraca warto±¢ true lub false. Oto lista tych funkcji:

is_array(),

is_double(), is_float(), is_real() (te funkcje mog¡ by¢ stosowane zamiennie),

is_long(), is_int(), is_integer() (te funkcje mog¡ by¢ stosowane zamiennie),

is_string(),

is_object().

W j¦zyku PHP dost¦pnych jest kilka funkcji, umo»liwiaj¡cych testowanie stanu zmiennej.
Pierwsz¡ z nich jest isset(); jej skªadnia jest nast¦puj¡ca:

int isset(mixed var)

17

background image

4 Podstawowy kurs j¦zyka PHP

Funkcja ta pobiera jako argument nazw¦ zmiennej, a zawraca warto±¢ true w przypadku
gdy zmienna ta istnieje, lub warto±¢ false w przeciwnym razie.

Korzystaj¡c z funkcji unset() mo»na usun¡¢ okre±lon¡ zmienn¡ z pami¦ci. Funkcja ta

ma nast¦puj¡c¡ skªadni¦:

int unset(mixed var)

Funkcja ta "pozbywa si¦" zmiennej przekazanej jako argument, po czym zawraca warto±¢
true.

Kolejna funkcja testuj¡ca stan zmiennej to empty(). Sprawdza ona czy przekazana jej

w argumencie zmienna istnieje i czy nie ma ona warto±ci pustej (null) lub zerowej. W
zale»no±ci od wyniku tego testu jest zwracana warto±¢ true lub false. A oto skªadnia tej
funkcji:

int empty(mixed var)

Je±li chodzi o skrypty obsªuguj¡ce formularze, to funkcja isset() zawsze powinna zwróci¢
warto±¢ true - niezale»nie od tego, jak¡ warto±¢ wpisali±my do odpowiadaj¡cego tej zmiennej
pola formularza (a nawet wówczas, gdy pozostawimy to pole puste). Warto±¢ zwrócona przez
funkcj¦ empty() b¦dzie natomiast zale»aªa od tego, czy do pola formularza co± wpisali±my
(warto±¢ false), czy te» pozostaªo ono puste (warto±¢ true).

Funkcje te s¡ bardzo przydatne podczas sprawdzania, czy u»ytkownik wypeªniª odpo-

wiednie pola.

Efekt jaki uzyskujemy w wyniku rzutowania zmiennych, mo»emy osi¡gn¡¢ równie» po-

przez wywoªanie funkcji. W j¦zyku PHP dost¦pne s¡ trzy funkcje, przeznaczone do tego
celu:

int intval(mixed var)
double doubleval(mixed val)
string strval(mixed val)

Ka»da z tych funkcji wymaga podania jako argumentu zmiennej, któr¡ nast¦pnie zwraca,
przekonwertowan¡ do odpowiedniego typu.

4.11 Staªe

Staªa jest identykatorem (nazw¡) dla prostej warto±ci. Jak sama nazwa wskazuje, warto±¢
ta nie mo»e si¦ zmienia¢ podczas dziaªania skryptu. Domy±lnie, przy staªych uwzgl¦dniana
jest wielko±¢ liter. Przyj¦to, »e staªe s¡ pisane du»ymi literami. Nazwa staªej podlega takim

18

background image

4 Podstawowy kurs j¦zyka PHP

samym zasadom jak ka»da inna w PHP. Prawidªowa nazwa staªej rozpoczyna si¦ liter¡,
znakiem podkre±lenia (_), nast¦pnie mog¡ wyst¦powa¢ litery, cyfry lub znaki podkre±lenia.

Mo»emy deniowa¢ staªe u»ywaj¡c funkcji define():

define("STALA", "Hello world!");
define("CENA",100);

Ró»nice pomi¦dzy staªymi, a zmiennymi:

Staªe nie maj¡ znaku dolara $ przed nazw¡;

Staªe mog¡ by¢ deniowane oraz u»ywane wsz¦dzie bez zwa»ania na zasady dotycz¡ce
zakresu ich dost¦pno±ci;

Staªe nie mog¡ by¢ redeniowane i kasowane po tym jak raz zostaªy zdeniowane;

Staªe mog¡ zawiera¢ tylko warto±ci skalarne (boolean, integer, double i string).

4.12 Operatory

Podstawowym operatorem przypisania w PHP jest znak =. Oto przykªad:

$ilosc = 15;

Operatorem scalania ªa«cuchów (konkatenacji)jest kropka .:

$a = "Witaj ";
$b = "‘wiecie!";
$wynik = $a . $b;

Po wykonaniu powy»szego kodu w zmiennej $wynik umieszczony b¦dzie ªa«cuch znaków
Witaj ‘wiecie!.

Operatory arytmetyczne:

Przykªad

Nazwa

Opis

$a + $b

Dodawanie

Suma $a i $b

$a - $b Odejmowanie Ró»nica $a i $b
$a * $b

Mno»enie Iloczyn

$a i $b

$a / $b

Dzielenie Iloraz

$a przez $b

$a % $b

Dzielenie Modulo

Reszta z dzielenia $a przez $b

Zªo»one operatory przypisania:

19

background image

4 Podstawowy kurs j¦zyka PHP

Operator Skªadnia Operacja równowa»na

+=

$a +=$b $a =$a + $b

-=

$a -=$b $a =$a - $b

*=

$a *=$b $a =$a * $b

/=

$a /=$b $a =$a / $b

.=

$a .=$b $a =$a . $b

%=

$a %=$b $a =$a % $b

Operatory inkrementacji i dekrementacji

Przykªad

Nazwa

Opis

++$a

Pre-inkrementacja Najpierw zwi¦ksza warto±¢ $a o jeden, potem zwraca $a

$a++

Post-inkrementacja Najpierw zwraca $a, potem zwi¦ksza $a o jeden

--$a

Pre-dekrementacja Najpierw zmniejsza warto±¢ $a o jeden, potem zwraca $a

$a--

Post-dekrementacja Najpierw zwraca $a, potem zmniejsza $a o jeden

Operatory porównania:

Przykªad

Nazwa

Opis

$a == $b

Równy

TRUE je±li $a jest równe $b

$a === $b

Identyczny

TRUE je±li $a jest równe $b i obydwa operandy
s¡ tego samego typu (tylko w PHP 4)

$a != $b

Ró»ny

TRUE je±li $a nie jest równy $b

$a <> $b

Ró»ny

TRUE je±li $a nie jest równy $b

$a !== $b

Nie identyczny

TRUE je±li $a nie jest równy $b,
lub nie s¡ tego samego typu (tylko w PHP 4)

$a < $b

Mniejszy ni»

TRUE je±li $a jest mniejszy od $b

$a > $b

Wi¦kszy ni»

TRUE je±li $a jest wi¦kszy od $b

$a <= $b Mniejszy lub równy TRUE je±li $a jest mniejszy lub równy $b
$a >= $b

Wi¦kszy lub równy TRUE je±li $a jest wi¦kszy lub równy $b

Jeszcze jednym operatorem warunkowym jest operator "?:" (tzw. operator trójskªadni-

kowy, ternariusz), dziaªaj¡cy tak jak w C i wielu innych j¦zykach.

(expr1) ? (expr2) : (expr3);

Warto±ci¡ wyra»enia jest expr2, je±li expr1 jest równe true, lub expr3, je±li expr1 jest równe
false.

Operatory logiczne:

20

background image

4 Podstawowy kurs j¦zyka PHP

Przykªad

Nazwa

Opis

$a and $b

I

TRUE je±li zarówno $a jak i $b s¡ TRUE

$a or $b

Lub

TRUE je±li $a lub $b jest TRUE

$a xor $b Wyªacznie-Lub TRUE je±li $a lub $b jest TRUE, ale nie jednocze±nie

! $a

Nie

TRUE je±li $a nie jest TRUE

$a && $b

I

TRUE je±li zarówno $a jak i $b s¡ TRUE

$a || $b

Lub

TRUE je±li $a lub $b jest TRUE

Operatory or i and maj¡ inny (ni»szy) priorytet ni» || i && i wªa±nie z tego powodu w

PHP s¡ dwa ró»ne operatory dla "lub" i "i".

Operatory bitowe:

Przykªad

Nazwa

Opis

$a & $b

Mno»enie bitowe

Dany bit wynikowy jest równy 1 tylko je±li
obydwa bity skªadowe s¡ równe 1.

$a | $b

Sumowanie bitowe

Dany bit wynikowy jest równy 1 je±li co
najmniej jeden bit skªadowy jest równy 1.

$a ^ $b Sumowanie bitowe modulo 2 Dany bit wynikowy jest równy 1 tylko je±li

jeden z bitów skªadowych jest równy 1
a drugi jest równy 0

~ $a

Negacja bitowa

Bity w zmiennej $a maj¡ce warto±¢ 1
otrzymuj¡ warto±¢ 0 i na odwrót.

$a << $b

Przesuni¦cie w lewo

Przesuwa bity w zmiennej $a o $b kroków
w lewo (ka»dy krok znaczy "pomno»one
razy dwa").

$a >> $b

Przesuni¦cie w prawo

Przesuwa bity w zmiennej $a o $b kroków
w prawo (ka»dy krok znaczy "podzielone
przez dwa").

Operator kontroli bª¦dów. PHP obsªuguje obecnie jeden operator kontroli bª¦dów:

znak maªpki (at @). Je±li znak ten zostanie postawiony przed dowolnym wyra»eniem w PHP,
jakiekolwiek powiadomienia o bª¦dach wygenerowane przez to wyra»enie zostan¡ pomini¦-
te (nie b¦d¡ wy±wietlone). Je±li mechanizm track_errors zostaª wª¡czony, jakiekolwiek
powiadomienie o bª¦dzie zostanie zapisane do zmiennej globalnej $php_errormsg. Nale»y
jednak pami¦ta¢, »e zawarto±¢ tej zmiennej jest nadpisywana przy ka»dym bª¦dzie, wi¦c po
wyst¡pieniu kolejnego bª¦du w skrypcie, informacja o poprzednim bª¦dzie jest tracona.

21

background image

4 Podstawowy kurs j¦zyka PHP

Operatory wykonania polecenia systemowego. PHP posiada jeden operator wy-

konania polecenia systemowego: apostrof wsteczny (`` zazwyczaj tam gdzie znak tyldy ~).
Zawarto±¢ apostrofu wstecznego zostanie wykonana jako polecenie systemowe. Wynik pole-
cenia zostanie zwrócony (tzn. nie b¦dzie wysªany do przegl¡darki tylko b¦dzie dost¦pny do
przypisania do zmiennej).

$output = `ls -al`;echo "<pre>$output</pre>";

Uwaga! Operator ten nie dziaªa kiedy safe_mode jest wª¡czony, lub shell_exec() jest
zablokowana.

4.13 Priorytety operatorów

Priorytet operatora okre±la, jak "silnie" operator wi¡»e ze sob¡ dwa stoj¡ce obok niego wy-
ra»enia. Na przykªad, w wyra»eniu 1 + 5 ∗ 3, wynik wynosi 16, nie 18 poniewa» operator
mno»enia (∗) ma wy»szy priorytet ni» operator dodawania (+). Za pomoc¡ nawiasów mo»na
zmienia¢ priorytet dziaªa« wedªug reguª arytmetyki. Na przykªad: (1 + 5) ∗ 3 jest równe
18. Operatory posiadaj¡ równie» cech¦ zwan¡ ª¡czno±ci¡ lub powi¡zaniem, która decyduje o
kolejno±ci oblicze« w przypadku wyst¦powania operatorów o tym samym priorytecie. Kolej-
no±¢ mo»e by¢ wyznaczana od lewej do prawej (operatory lewostronne), od prawej do lewej
(operatory prawostronne) lub te» operatory mog¡ by¢ niezwi¡zane. Poni»sza tabela zawiera
priorytet operatorów, od najni»szego priorytetu na górze.

22

background image

4 Podstawowy kurs j¦zyka PHP

Powi¡zanie

Operator

lewe

,

lewe

or

lewe

xor

lewe

and

prawe

print

lewe

= += -= *= /= .= %= &= |= ^= ~= <<= >>=

lewe

? :

lewe

||

lewe

&&

lewe

|

lewe

^

lewe

&

bez powi¡zania == != === !==
bez powi¡zania < <= > >=

lewe

<< >>

lewe

+ - .

lewe

* / %

prawe

! ~ ++ -- (int) (double) (string) (array) (object) @

prawe

[]

bez powi¡zania New
bez powi¡zania ()

4.14 Struktury warunkowe

if

Instrukcja if (je»eli) jest jednym z najwa»niejszych mechanizmów dost¦pnych w wielu

j¦zykach z PHP wª¡cznie. Pozwala na wyodr¦bnienie fragmentu kodu, który zostanie wy-
konany pod okre±lonym warunkiem. Instrukcja if w PHP jest bardzo podobna do swojego
odpowiednika z j¦zyka C:

if (warunek)

wyra»enie

Je±li warunek jest równy TRUE wyra»enie zostanie wykonane; w przeciwnym razie zostanie
pomini¦te.

Cz¦sto potrzeba, aby wi¦cej ni» jedna instrukcja byªa wykonana pod przyj¦tym warun-

kiem. Nie ma oczywi±cie potrzeby umieszcza¢ ka»dej z tych instrukcji w osobnej strukturze

23

background image

4 Podstawowy kurs j¦zyka PHP

if. Zamiast tego nale»y zgrupowa¢ te instrukcje za pomoc¡ instrukcji grupuj¡cej. Na przy-
kªad poni»szy kod wy±wietli a jest wi¦ksze ni» b, je»eli $a jest wi¦ksze ni» $b, i przypisze
warto±¢ $a do $b:

if ($a > $b) {

print "a jest wi¦ksze ni» b";
$b = $a;
}

Instrukcje if mog¡ by¢ dowolnie umieszczane wewn¡trz innych instrukcji if, co zapewnia
autorowi programu kompletn¡ elastyczno±¢ przy ustalaniu warunkowego wykonywania po-
szczególnych cz¦±ci programu.

else
Cz¦sto potrzeba wykona¢ jedn¡ instrukcj¦ programu, gdy pewien warunek jest speªniony,

lub inn¡, gdy ten sam warunek nie jest speªniony. Sªu»y do tego instrukcja else. else
rozszerza mo»liwo±ci instrukcji if do sytuacji kiedy warunek opisany przy instrukcji if ma
warto±¢ FALSE. Na przykªad poni»szy kod wy±wietli a jest wi¦ksze ni» b je»eli $a jest
wi¦ksze ni» $b, lub a NIE jest wi¦ksze od b w przeciwnym przypadku:

if ($a > $b)

print "a jest wi¦ksze ni» b";

else

print "a NIE jest wi¦ksze od b";

Kod zawarty w instrukcji else wykonywany jest tylko wówczas, kiedy wyra»enie logiczne
przy instrukcji if ma warto±¢ FALSE.

elseif
Instrukcja elseif, jak sama jej nazwa wskazuje, stanowi poª¡czenie instrukcji if i else.

Podobnie jak else rozszerza instrukcj¦ if do sytuacji, kiedy wyra»enie logiczne stoj¡ce przy
if ma warto±¢ FALSE. Jednak»e w przeciwie«stwie do typowej instrukcji else, kod obj¦ty t¡
instrukcj¡ b¦dzie wykonany, je±li wyra»enie logiczne stoj¡ce przy tej instrukcji b¦dzie miaªo
warto±¢ TRUE. Poni»szy przykªad wy±wietli a jest wi¦ksze ni» b, a jest równe b lub
a jest mniejsze ni» b:

if ($a > $b){

print "a jest wi¦ksze ni» b";}

elseif ($a == $b){

print "a jest równe b";}

else { print "a jest mniejsze ni» b";}

24

background image

4 Podstawowy kurs j¦zyka PHP

Mo»na u»y¢ kilku instrukcji elseif w jednym bloku instrukcji if. Wykonany wtedy b¦dzie
ten blok, który pierwszy b¦dzie mie¢ warto±¢ TRUE. W PHP mo»na te» napisa¢ else if
(dwoma sªowami) zamiast elseif (jednym sªowem).

Dana instrukcja elseif b¦dzie wykonana tylko wówczas, je±li wszystkie poprzedzaj¡ce

j¡ instrukcje if i elseif w danym bloku miaªy warto±¢ logiczn¡ FALSE, a ona sama ma
warto±¢ logiczn¡ TRUE.

switch
Instrukcja switch jest podobna do serii instrukcji IF z warunkiem na to samo wyra»enie.

W wielu przypadkach istnieje potrzeba porównania jednej zmiennej (lub wyra»enia) z wie-
loma ró»nymi warto±ciami i wykonania ró»nych fragmentów kodu, w zale»no±ci od wyniku
porównania tej zmiennej z ró»nymi warto±ciami. Do tego wªa±nie sªu»y instrukcja switch.

switch ($i) {

case 0: print "i jest równe 0";

break;

case 1: print "i jest równe 1";

break;

case 2: print "i jest równe 2";

break;
}

Instrukcja switch jest wykonywana linia po linii (dokªadnie wyra»enie po wyra»eniu). Na
pocz¡tku »aden fragment kodu nie jest wykonywany. Dopiero kiedy zostaje odnalezione wy-
ra»enie case, którego warto±¢ odpowiada wyra»eniu przy instrukcji switch, PHP rozpo-
czyna wykonywanie kodu od miejsca, gdzie znajduje si¦ ta instrukcja case. PHP wykonuje
instrukcje a» do momentu kiedy blok switch si¦ sko«czy, lub do momentu znalezienia in-
strukcji break. Je±li nie napiszemy instrukcji break na ko«cu instrukcji w danym wyra»eniu
case to PHP b¦dzie wykonywa¢ dalej instrukcje z nast¦pnego wyra»enia case.

W instrukcji switch warto±¢ wyra»enia jest obliczana tylko raz, a nast¦pnie jest porów-

nywana z ka»dym z wyra»e« przy etykiecie case. Natomiast w instrukcji elseif warto±¢
wyra»enia jest obliczana ponownie. Dlatego, je±li wyra»enie jest bardziej skomplikowane od
zwykªego porównania, switch mo»e by¢ szybszy.

Specjaln¡ etykiet¡ jest etykieta warunku domy±lnego - default. Etykieta ta dotyczy

sytuacji, w której wyra»enie nie pasowaªo do warto±ci przy innych etykietach typu case. W
instrukcji switch ta etykieta powinna by¢ ostatnia z listy. Na przykªad:

switch ($i) {

case 0: print "i jest równe 0";

25

background image

4 Podstawowy kurs j¦zyka PHP

break;

case 1: print "i jest równe 1";

break;

case 2: print "i jest równe 2";

break;

default: print "i jest ró»ne od 0, 1 i 2";

}

4.15 Instrukcje iteracyjne

while

P¦tla while jest najprostszym typem p¦tli w PHP. Zachowuje si¦ ona identycznie jak jej

odpowiednik z j¦zyka C. Jej podstawowa forma wygl¡da nast¦puj¡co:

while (wyra»enie) instrukcja

Znaczenie instrukcji while jest bardzo proste. Nakazuje ona PHP tyle razy wykonywa¢
okre±lone instrukcje, jak dªugo wyra»enie przy sªowie while ma warto±¢ TRUE. Warto±¢ tego
wyra»enia jest sprawdzana za ka»dym razem na pocz¡tku wykonywania nowej iteracji p¦tli,
wi¦c je±li jego warto±¢ zmieni si¦ w trakcie wykonywania instrukcji, wykonanie caªej p¦tli
nie sko«czy si¦ do momentu zako«czenia caªej iteracji. Jedna iteracja jest to jednokrotne
wykonanie wszystkich instrukcji w p¦tli. Je±li wyra»enie logiczne ma warto±¢ FALSE ju» na
samym pocz¡tku, instrukcje wewn¡trz p¦tli nie b¦d¡ w ogóle wykonane.

$i = 1;
while ($i <= 10) {

print $i++; /* zmienna $i b¦dzie inkrementowana po wy±wietleniu

do...while
P¦tla do...while zachowuje si¦ bardzo podobnie do p¦tli while, z wyj¡tkiem tego, »e

warto±¢ wyra»enia logicznego sprawdzana jest na ko«cu iteracji, a nie na pocz¡tku. Wy-
nikaj¡c¡ z tego gªówn¡ ró»nic¡ jest to, »e pierwsza iteracja w p¦tli do...while na pewno
zostanie wykonana (gdy» wyra»enie logiczne b¦dzie sprawdzone dopiero na koniec iteracji).
Natomiast w p¦tli while, gdzie wyra»enie logiczne jest sprawdzane na pocz¡tku iteracji,
mo»e doj±¢ do sytuacji, »e p¦tla w ogóle nie zostanie wykonana, je±li to wyra»enie b¦dzie
miaªo warto±¢ FALSE od pocz¡tku.

$i = 0;
do {

26

background image

4 Podstawowy kurs j¦zyka PHP

print $i;}

while ($i>0);

Powy»sza p¦tla zostanie wykonana tylko raz, gdy» po pierwszej iteracji, warto±¢ wyra»enia
logicznego wynosi¢ b¦dzie FALSE ($i nie jest wi¦ksze od 0) i p¦tla zostanie zako«czona.

for
P¦tla for jest najbardziej skomplikowanym rodzajem p¦tli w PHP. Zachowuje si¦ iden-

tycznie jak jej odpowiedniki z C. Jej skªadnia wygl¡da nast¦puj¡co:

for (wyra»enie1; wyra»enie2; wyra»enie3) instrukcje

wyra»enie1 jest wykonywane tylko raz, na pocz¡tku p¦tli. Na pocz¡tku ka»dej nowej iteracji,
obliczana jest warto±¢ logiczna wyra»enia wyra»enie2. Je±li wynikiem obliczenia jest TRUE,
to p¦tla kontynuuje i nast¦puje wykonanie instrukcji umieszczonych w p¦tli. Je±li jednak
wyra»enie ma warto±¢ FALSE, to wykonanie p¦tli zostaje przerwane. Na ko«cu ka»dej iteracji
zostaje wykonane wyra»enie3.

Ka»de z wyra»e« mo»e by¢ puste. Puste wyra»enie2 oznacza, »e p¦tla jest niesko«czona

(PHP interpretuje to jako warto±¢ TRUE, podobnie jak C). Nie jest to jednak tak bezu»ytecz-
ne, jak to si¦ mo»e wydawa¢, gdy» cz¦sto stosuje si¦ to w poª¡czeniu z instrukcj¡ break, co
zast¦puje wyra»enie2 w p¦tli for. Wszystkie poni»sze przykªady wy±wietlaj¡ liczby od 1 do
10. Prosz¦ zauwa»y¢ rozmaite odmiany skªadni:

/* przykªad 1 */
for ($i = 1; $i <= 10; $i++) {

print $i;}

/* przykªad 2 */
for ($i = 1;;$i++) {

if ($i > 10) {

break;

}

print $i;}

/* przykªad 3 */
$i = 1;for (;;) {

if ($i > 10) {

break;

}

print $i;

$i++;}

/* przykªad 4 */
for ($i = 1; $i <= 10; print $i, $i++);

foreach

27

background image

5 Tablice

PHP 4 zawiera, czego brak w PHP 3, konstrukcj¦ foreach, podobn¡ do jej odpowiedników

z Perla i innych j¦zyków. P¦tla ta umo»liwia ªatw¡ iteracj¦ wewn¡trz tablic. Istniej¡ dwie
skªadnie tej konstrukcji, przy czym druga jest mniej wa»nym, lecz u»ytecznym rozszerzeniem
pierwszej:

foreach(wyra»enie_tablicowe as $warto±¢) wyra»enie
foreach(wyra»enie_tablicowe as $klucz => $warto±¢) wyra»enie

Pierwsza odmiana iteruje wewn¡trz tablicy podanej w wyra»enie_tablicowe. Przy ka»dej
iteracji, warto±¢ aktualnego elementu tablicy jest przypisywana do zmiennej $warto±¢, a
wewn¦trzny wska¹nik tablicy jest przesuwany o jeden (wi¦c w nast¦pnej iteracji przypisany
zostanie kolejny element tablicy). Druga odmiana dziaªa tak samo jak pierwsza, przy czym
klucz aktualnego elementu tablicy zostanie przypisany do zmiennej $klucz w ka»dej iteracji.

Uwaga! Kiedy rozpoczyna si¦ wykonywanie p¦tli foreach, wewn¦trzny wska¹nik tablicy
jest automatycznie resetowany, co ustawia go na pierwszym elemencie tablicy. Oznacza to,
»e nie trzeba wywoªywa¢ komendy reset() przed rozpocz¦ciem p¦tli foreach.

Uwaga! Prosz¦ tak»e pami¦ta¢, »e konstrukcja foreach operuje na kopii tablicy, a nie na
oryginale, wi¦c poªo»enie wska¹nika tablicy nie jest modykowane jak w konstrukcji each(),
a zmiany dokonane na pobranym elemencie tablicy nie oddziaªuj¡ na oryginaln¡ tablic¦.

break
break ko«czy wykonywanie aktualnej instrukcji for, foreach, while, do...while i

switch.

continue
continue u»ywane jest wewn¡trz instrukcji p¦tli do przerwania wykonywania danej ite-

racji p¦tli i rozpocz¦cia zupeªnie nowej iteracji.

4.16 Skªadnia alternatywna wyra»e«

PHP oferuje alternatywn¡ skªadni¦ dla niektórych struktur, a dokªadnie dla: if, while, for,
foreach i switch. W ka»dym przypadku podstawowa forma skªadni alternatywnej polega na
zamianie nawiasu otwieraj¡cego na dwukropek (:), a nawiasu zamykaj¡cego na odpowiednie
sªowo: endif;, endwhile;, endfor;, endforeach; lub endswitch;.

5 Tablice

Tablica w PHP jest uporz¡dkowan¡ map¡. Mapa jest typem, który przyporz¡dkowuje war-
to±ci do kluczy. Kluczami w PHP mog¡ by¢ liczby caªkowite nieujemne i ªa«cuchy znaków

28

background image

5 Tablice

(tablice asocjacyjne).

5.1 Tworzenie za pomoc¡ array()

Tablic¦ mo»na utworzy¢ za pomoc¡ konstrukcji j¦zykowej array(). Argumentem tej kon-
strukcji s¡ rozdzielone przecinkiem pary klucz => warto±¢. Klucz mo»e by¢ albo nieujemn¡
liczb¡ caªkowit¡, albo ªa«cuchem znaków. Je±li pominiemy klucz, to jako klucz zostanie u»y-
ty najwy»szy indeks caªkowity +1. Je±li nie ma w ogóle indeksu caªkowitego, to klucz b¦dzie
miaª warto±¢ 0 (zero). Je±li u»ywamy klucza, do którego ju» wcze±niej zostaªa przypisa-
na warto±¢, warto±¢ ta zostanie nadpisana. Je±li nie u»yjemy kluczy, to stworzymy tablic¦
indeksowan¡ numerycznie o pierwszym indeksie 0.

$produkty = array("Opony","Olej","Swiece");

5.2 Tworzenie i edytowanie skªadni¡ nawiasów kwadratowych

Mo»na zmienia¢ istniej¡c¡ tablic¦ jawnie ustawiaj¡c warto±ci. Robi si¦ to przez przypisanie
warto±ci do tablicy z podaniem klucza w nawiasach kwadratowych.

$arr[klucz] = warto±¢;
// klucz jest albo ªa«cuchem znaków, albo nieujemn¡ liczb¡ caªkowit¡
// warto±¢ mo»e by¢ dowolna
// Przykªad:
$a[0] = "Ryan";
$a[1] = "Scott";
$a[] = "Randall"; // mo»emy pomija¢ indeksy, PHP automatycznie je zwi¦ksza
$a[] = "Sherie"; // tu kluczem jest 3, wy»ej 2

Je±li tablica $arr nie istnieje, zostanie stworzona. Jest to wi¦c metoda na tworzenie tablic.
Aby zmieni¢ warto±¢ konkretnego klucza, po prostu przypisujemy now¡ warto±¢ do niego.
Aby usun¡¢ par¦ klucz/warto±¢, trzeba u»y¢ funkcji unset().

$a = array( 'kolor' => 'czerwony'

, 'smak' => 'sªodki'
, 'ksztaªt' => 'okr¡gªy'
, 'nazwa' => 'jabªko'
);

// znaczy dokªadnie to samo, co to:
$a['kolor'] = 'czerwony';

29

background image

5 Tablice

$a['smak'] = 'sªodki';
$a['ksztaªt'] = 'okr¡gªy';
$a['nazwa'] = 'jabªko';

A oto przykªad zastosowania instrukcji foreach do tablicy $a:

foreach($a as $klucz=>$wart)
echo '$a['.$klucz.']='.$wart.'<br>';

Kod ten wy±wietli pary $a[klucz]=warto±¢.

5.3 Tablice wielowymiarowe

Tablice wielowymiarowe mo»emy konstruowa¢ u»ywaj¡c zagnie»d»onych konstrukcji array:

$tablica = array ( "owoce" => array ( "a" => "pomara«cza"

, "b" => "banan"
, "c" => "jabªko"
)

, "liczby" => array ( 1

, 2
, 3
, 4
, 5
, 6
)

, "dziury"

=> array (

"pierwsza"

, 5 => "druga"
,

"trzecia"

)

);

Ten sam efekt uzyskamy za pomoc¡ serii przypisa«:

$tablica['owoce']['a']=pomarancza;
$tablica['owoce']['b']=banan;
$tablica['owoce']['c']=jabªko;
$tablica['liczby'][0]=1;
$tablica['liczby'][1]=2;
$tablica['liczby'][2]=3;

30

background image

6 Funkcje

$tablica['liczby'][3]=4;
$tablica['liczby'][4]=5;
$tablica['liczby'][5]=6;
$tablica['dziury'][0]=pierwsza;
$tablica['dziury'][5]=druga;
$tablica['dziury'][6]=trzecia;

Aby wy±wietli¢ wy»ej zdeniowan¡ zmienna tablicow¡ $tablica mo»emy u»y¢ zagnie»d»onej
instrukcji iteracyjnej foreach (mo»emy te» u»y¢ funkcji each patrz Obsªuga zmiennych
tablicowych):

foreach($tablica as $klucz1=>$wart1)
foreach($wart1 as $klucz2=>$wart2)
echo '$tablica['.$klucz1.']['.$klucz2.']='.$wart2.'<br>';

6 Funkcje

Funkcja mo»e by¢ zdeniowana u»ywaj¡c skªadni takiej jak poni»sza:

function foo ($arg_1, $arg_2, ..., $arg_n){

echo "Przykªadowa funkcja.\n";

return $retval;

}

Dowolny poprawny kod PHP mo»e si¦ pojawi¢ wewn¡trz funkcji, tak»e denicje innych
funkcji i klas. W PHP 3, funkcje musz¡ by¢ zdeniowane przed odwoªaniem do nich. W PHP
4 nie ma takiego wymagania. PHP nie obsªuguje przeci¡»ania funkcji (function overloading),
czyli deklarowania funkcji o identycznych nazwach. Nie jest tak»e mo»liwe skasowanie lub
przedeniowanie wcze±niej zadeklarowanych funkcji.

Uwaga! W nazwach funkcji w j¦zyku PHP nie s¡ rozró»niane maªe i du»e litery. Wywoªania
nazwa_funkcji(), Nazwa_Funkcji(), czy te» NAZWA_FUNKCJI() s¡ poprawne i wszystkie
dadz¡ ten sam efekt.

6.1 Argumenty funkcji

Informacje mog¡ by¢ przekazywane do funkcji przez list¦ argumentów, która jest separowan¡
przecinkami list¡ zmiennych i/lub staªych.

31

background image

6 Funkcje

Przekazywanie argumentów przez referencj¦. Domy±lnie, argumenty funkcji s¡

przekazywane przez warto±¢ (a wi¦c je±li zmienisz warto±¢ argumentu wewn¡trz funkcji,
nie zmieni si¦ ona poza funkcj¡). Je±li chcemy pozwoli¢ funkcji na modykacj¦ swoich argu-
mentów, musisz przekaza¢ je przez referencj¦.

Je±li chcemy, aby argumenty byªy zawsze przekazywane przez referencj¦, przed nazw¡

zmiennej w denicji funkcji musimy wstawi¢ znak ampersand (&):

function dodaj_cos_extra(&$string){

$string .= 'i co± extra.';

}
$str = 'To jest string, ';
dodaj_cos_extra($str);
echo $str;

// wy±wietla 'To jest string, i co± extra.'

Warto±ci domy±lne argumentów. Funkcja mo»e deniowa¢, podobnie jest w C++, war-
to±ci domy±lne dla argumentów skalarnych:

function robkawe ($typ = "cappucino"){

return "Robi¦ kubek $type.\n";

}
echo robkawe ();
echo robkawe ("espresso");

Powy»szy kawaªek kody wy±wietli:

Robi¦ kubek cappucino.
Robi¦ kubek espresso.

Argumenty zawieraj¡ce warto±ci domy±lne powinny by¢ po prawej stronie tych nie zawie-
raj¡cych warto±ci domy±lnych; w przeciwnym przypadku funkcja mo»e nie dziaªa¢ tak jak
si¦ tego spodziewali±my. Argumenty posiadaj¡ce warto±ci domy±lne s¡ opcjonalne, nie jest
konieczne ich podawanie. Oczywi±cie nie musimy pomija¢ wszystkich - mo»emy przekaza¢
cz¦±¢ z nich, a niektóre zignorowa¢, mo»emy te» poda¢ wszystkie lub wszystkie opu±ci¢.
Argumenty przypisywane s¡ od strony lewej do prawej.

Uwaga! Nie mo»emy opu±ci¢ jednego z argumentów opcjonalnych, a przekaza¢ nast¦pne!

6.2 Zwracane warto±ci

Warto±ci s¡ zwracane przy u»yciu opcjonalnej instrukcji return. Mo»e by¢ zwracany dowolny
typ, wª¡czaj¡c w to tablice i obiekty. Spowoduje to natychmiastowe zako«czenie dziaªania
funkcji i przekazanie kontroli do linii, z której byªa wywoªana.

32

background image

7 Wielokrotne wykorzystywanie kodu

function kwadrat ($num){

return $num * $num;

}
echo kwadrat (4);

// wy±wietla '16'.

Nie mo»na zwraca¢ wielu warto±ci z funkcji, ale podobne efekty mog¡ by¢ uzyskane przez
zwracanie listy.

function maleLiczby(){

return array (0, 1, 2);

}
list ($zero, $jeden, $dwa) = maleLiczby();

Aby funkcja zwracaªa referencj¦, musimy u»y¢ operatora referencji & i w deklaracji funkcji i
przy przypisywaniu zwracanej warto±ci do zmiennej:

function &zwrocReferencje(){

return $jakasref;

}
$nowaref =& zwrocReferencje();

7 Wielokrotne wykorzystywanie kodu

PHP posiada cztery mechanizmy sªu»¡ce do doª¡czania plików zewn¦trznych: include() i
require(), require_once() i include_once(). Jako, »e require_once() i include_once()
s¡ tylko pewnymi wersjami dwóch poprzednich, zaczniemy omawianie tych instrukcji od
include() i require().

Wyra»enie include() jest zwykª¡ funkcj¡ PHP, natomiast require() jest konstrukcj¡

j¦zykow¡, która posiada kilka ogranicze«. W obu przypadkach po doª¡czeniu pliku PHP
przechodzi do trybu HTML na pocz¡tku doª¡czanego pliku. Na ko«cu pliku parser wraca
do trybu PHP. Oznacza to, »e dowolny kod zawarty w pliku doª¡czanym musi by¢ otoczony
prawidªowymi znacznikami PHP (np. <?php i ?>). Instrukcje require() i include() s¡
identyczne niemal w ka»dym szczególe, z wyj¡tkiem obsªugi bª¦dów. W razie niepowodzenia,
include() generuje ostrze»enie (Warning), podczas gdy require() generuje bª¡d krytyczny
(Fatal Error). Innymi sªowy, instrukcji require() u»ywa si¦ do wczytywania plików, które
s¡ niezb¦dne do dziaªania skryptu i w przypadku ich braku wykonywanie skryptu musi zosta¢
przerwane.

Przykªady u»ycia require():

33

background image

7 Wielokrotne wykorzystywanie kodu

<?php
require 'nagªówek.php';
require $plik;
require ('jaki±_plik.txt');
?>

Kiedy plik zostanie wczytany instrukcj¡ include(), zawarty w nim kod dziedziczy zasi¦g
zmiennych po linii, w której znajdowaªa si¦ instrukcja wczytania. Ka»da zmienna dost¦pna
w linii z instrukcj¡ include() b¦dzie dost¦pna we wczytywanym pliku od miejsca wczytania
naprzód.

Funkcja include() jest wykonywana za ka»dym jej wywoªaniem i mo»e znajdowa¢ si¦ we-

wn¡trz p¦tli lub instrukcji warunkowych. Pozwala to warunkowo wª¡cza¢ pliki, lub wª¡cza¢
grupy plików przy pomocy odpowiednio skonstruowanej p¦tli. Funkcja include() pozwala
równie», aby doª¡czany plik zwracaª warto±¢, któr¡ mo»na nast¦pnie przypisa¢ do zmiennej.
Przetwarzanie pliku w instrukcji include() ko«czy si¦, gdy zostanie napotkana instrukcja
return. Wyra»enie require() ró»ni si¦ tym od include(), »e nie wchodzi w skªad konstrukcji
steruj¡cych. Oznacza to, »e pliki nie mog¡ by¢ warunkowo doª¡czane za pomoc¡ require().
Wyra»enie to jest wykonywane raz, je»eli znajduje si¦ w p¦tli lub nawet, je»eli znajduje
si¦ w instrukcji warunkowej, której warunek ma warto±¢ False. Inn¡ ró»nic¡ jest to, »e pli-
ki doª¡czane za pomoc¡ require() nie mog¡ zwraca¢ warto±ci. Próba zwrócenia warto±ci w
wyra»eniu require() powoduje bª¡d skªadni. Poniewa» include() i require() s¡ specjalny-
mi konstrukcjami j¦zykowymi, musz¡ by¢ umieszczone w instrukcji grupuj¡cej, aby mogªy
dziaªa¢ w instrukcji warunkowej:

<?php
// Ten kod jest NIEPOPRAWNY i nie zadziaªa zgodnie z oczekiwaniami.
if ($warunek)

include $plik;

else

include $inny;

// Natomiast ten kod jest POPRAWNY.
if ($warunek) {

include $plik;

} else {

include $inny;

}
?>

34

background image

8 Zmienne spoza PHP

Zachowanie require_once() jest identyczne z instrukcj¡ require() z jednym wyj¡t-

kiem, tzn. je±li dany plik zostaª ju» raz wczytany do tego skryptu, nie b¦dzie wczytany
ponownie. Podobnie, dziaªanie instrukcji include_once(), jest analogiczne, tzn. je±li dany
plik zostaª ju» raz do danego skryptu wczytany, nie b¦dzie ju» wczytany ponownie. Wska-
zuje na to nazwa instrukcji: include_once znaczy wczytaj raz. include_once() powinno
by¢ stosowane w przypadkach, gdzie ten sam plik mo»e by¢ wczytany wi¦cej ni» raz w czasie
wykonywania skryptu, ale chcemy mie¢ pewno±¢ »e b¦dzie wczytany tylko jeden raz, aby
unikn¡¢ problemów z redeniowaniem funkcji, nadpisaniem warto±ci zmiennych, itp.

Uwaga! PHP w wersji starszej ni» 4.3.0, pracuj¡ce pod kontrol¡ systemów Windows, nie
obsªuguj¡ dost¦pu do zdalnych plików w tej funkcji, nawet je±li dyrektywa allow_url_fopen
jest wª¡czona.

8 Zmienne spoza PHP

Zaczniemy od omówienia zmiennych predeniowanych, które umo»liwiaj¡ dost¦p do danych
spoza PHP.

8.1 Predeniowane tablice superglobalne

Pocz¡wszy od wersji 4.1.0, PHP udost¦pnia zestaw predeniowanych tablic, które zawieraj¡
zmienne serwera, zmienne ±rodowiskowe oraz zmienne u»ytkownika. Tablice te s¡ do±¢ specy-
czne, gdy» s¡ one automatycznie globalne, tzn. automatycznie dost¦pne w ka»dym zasi¦gu.
Dlatego nazywa si¦ je "autoglobalami" albo "superglobalnymi" Poni»ej zestawiamy ich list¦:

$GLOBALS - Zawiera referencje do ka»dej ze zmiennych aktualnie dost¦pnych w zasi¦gu
globalnym skryptu. Kluczami tablicy s¡ nazwy zmiennych globalnych.

$_SERVER - Zmienne tworzone przez serwer lub bezpo±rednio powi¡zane ze ±rodowi-
skiem uruchomieniowym danego skryptu. Analogiczna do dawnej tablicy $HTTP_SERVER_VARS
(która jest nadal dost¦pna, ale uznana za przestarzaª¡).

$_GET - Zmienne dostarczone do skryptu za pomoc¡ metod¡ GET protokoªu HTTP.
Analogiczna do dawnej tablicy $HTTP_GET_VARS (która jest nadal dost¦pna, ale uznana
za przestarzaª¡).

$_POST - Zmienne dostarczone do skryptu metod¡ POST protokoªu HTTP. Analo-
giczna do dawnej tablicy $HTTP_POST_VARS (która jest nadal dost¦pna, ale uznana za
przestarzaª¡).

35

background image

8 Zmienne spoza PHP

$_COOKIE - Zmienne dostarczone do skryptu przez ciasteczka HTTP. Analogiczna do
dawnej tablicy $HTTP_COOKIE_VARS (która jest nadal dost¦pna, ale uznana za przesta-
rzaª¡).

$_FILES - Zmienne dostarczone do skryptu przez przesªanie plików do serwera metod¡
POST protokoªu HTTP. Analogiczna do dawnej tablicy $HTTP_POST_FILES (która
jest nadal dost¦pna, ale uznana za przestarzaª¡).

$_ENV - Zmienne dostarczone do skryptu przez ±rodowisko operacyjne. Analogiczna do
dawnej tablicy $HTTP_ENV_VARS (która jest nadal dost¦pna, ale uznana za przestarza-
ª¡).

$_REQUEST - Zmienne u»ytkownika dostarczone do skryptu przez ka»dy mechanizm
wej±cia, przez co NIE s¡ one godne zaufania. Uwaga: kiedy skrypt jest uruchomiony z
linii polece«, tablica ta nie zawiera zmiennych argv i argc. Zmienne te s¡ dost¦pne w
tablicy $_SERVER.

$_SESSION - Zmienne aktualnie zarejestrowane jako sesyjne. Analogiczne do dawnej
tablicy $HTTP_SESSION_VARS (która jest wci¡» dost¦pna, ale uznana za przestarzaª¡).

Uwaga! W PHP 4.2.0 i pó¹niejszych, domy±lne ustawienie (register_globals), które udo-
st¦pniaªo predeniowane zmienne w zasi¦gu globalnym, zostaªo zmienione. Zmienne nadcho-
dz¡ce metod¡ GET i POST oraz zmienne serwera domy±lnie nie s¡ ju» umieszczane w
zasi¦gu globalnym. Zamiast tego umieszczane s¡ w odpowiednich tablicach superglobalnych.

8.2 Formularze (X)HTML (GET i POST)

Kiedy do skryptu PHP zostanie wysªany formularz, ka»da zmienna z tego formularza zostanie
automatycznie dostarczona do tego skryptu przez PHP. Je±li dyrektywa track_vars jest wª¡-
czona, to zmienne te b¦d¡ umieszczone w tablicach asocjacyjnych $_POST ($HTTP_POST_VARS)
(zmienne wysªane metod¡ POST), $_GET ($HTTP_GET_VARS) (zmienne wysªane metod¡
GET), i/lub $_FILES ($HTTP_POST_FILES) (plik wysªane metod¡ POST), w zale»no±ci
od rodzaju zmiennych w zapytaniu.

Prosty formularz ze zmienn¡

<form action="foo.php" method="post">

Name: <input type="text" name="username"><br>
<input type="submit">

</form>

36

background image

8 Zmienne spoza PHP

Kiedy powy»szy formularz zostanie wysªany, warto±¢ wprowadzona do pola tekstowego

b¦dzie dost¦pna w $_POST['username']. Je±li dyrektywa register_globals jest wª¡czona,
zmienna z formularza b¦dzie tak»e dost¦pna jako zmienna globalna $username.

Rozwa»my bardziej zªo»ony formularz:

<form name="formularz" action="pokaz.php" method="post"

enctype="multipart/form-data">

Imi¦: <input type="text" name="imie" value="" />
Nazwisko: <input type="text" name="nazwisko" value="" />
Hasªo: <input type="password" name="haslo" value="" />
Weryfikacja: <input type="password" name="haslo2" value="" /><br />
Uwagi:<br />
<textarea rows="5" cols="20" name=uwagi></textarea><br>
Wybierz pªe¢:<br />
Kobieta:<input type="radio" name="plec" value="kobiet¡"/><br />
M¦»czyzna:<input type="radio" name="plec" value="m¦»czyzn¡"/><br />
Zainteresowania:<br>
Narty<input type="checkbox" name="zainteresowania[]" value="narty" /><br />
Muzyka<input type="checkbox" name="zainteresowania[]" value="muzyka" /> <br />
Sporty wodne<input type="checkbox" name="zainteresowania[]"
value="sporty wodne" /><br />
Zwierz¦ta<input type="checkbox" name="zainteresowania[]"
value="zwierz¦ta" /><br />
Kwiaty<input type="checkbox" name="zainteresowania[]" value="kwiaty" /><br />
Twoja grupa wiekowa:<br />
<select name="wiek" size="1">
<option value="0">Mniej ni» 18 lat</option>
<option value="1">18-24 lata</option>
<option value="3">Wi¦cej ni» 24 lata</option>
</select><br />
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
<input type="file" name="plik" size="50" maxlength="70" value="Szukaj">
<br />
Systemy operacyjne, które znasz:<br />
<select name="systemy[]" size="5" multiple="multiple">
<option value="MS Windows">MS Windows</option>
<option value="Linux">Linux</option>

37

background image

8 Zmienne spoza PHP

<option value="Solaris">Solaris</option>
<option value="Mac OS">Mac OS</option>
<option value="FreeBSD">FreeBSD</option>
</select><br />
<input type="image" src="obrazek.jpg" name="obraz" />
<br /> <input type="submit" value="Wy±lij" />
</form>

A oto skrypt pokaz.php, który przetwarza powy»szy formularz:

<?
$imie=$_POST['imie'];
$nazwisko=$_POST['nazwisko'];
echo ($imie)?'Twoje imi¦ to '.$imie.'<br />':'Nie podaªe± imienia!<br />';
echo ($nazwisko)?'Twoje nazwisko to '.$nazwisko.'<br />':

'Nie podaªe± nazwiska!<br />';

echo "<pre>".$_POST['uwagi']."</pre>";
echo Jeste±.$_POST['plec'];
$zainteresowania=$_POST['zainteresowania'];
if ($zainteresowania){
echo "<br />Interesujesz sie nastepujacymi rzeczami:<br />";
foreach($zainteresowania as $zaint)
echo $zaint."<br />";
}
else
echo "Nie masz »adnych zainteresowa«?";
switch ($wiek){
case 0:echo "Masz mniej ni» 18 lat<br />"; break;
case 1:echo "Masz od 18 do 24 lat<br />"; break;
case 2:echo "Masz wi¦cej ni» 24 lat<br />"; break;
default: echo "Nie wiem ile masz lat!!<br />";
}
$plik=$_FILES['plik'];
if ($plik)
echo $_FILES['plik']['name'].' '.$_FILES['plik']['type']."<br />";
if (!empty($_POST['obraz_x']) && !empty($_POST['obraz_y']))
print "Wspóªrz¦dne x=". $_POST['obraz_x'] . " y=". $_POST['obraz_y'] ."<br />";
echo "<br />Znasz nast¦puj¡ce systemy operacyjne:<br />";

38

background image

8 Zmienne spoza PHP

if ($systemy=$_POST['systemy'])
foreach($systemy as $sys)
echo $sys."<br />";
?>

Formularz wymaga kilku wyja±nie«. Pola typu checkbox maj¡ wspóln¡ nazw¦
name="zainteresowania[]", co kªóci si¦ z nasz¡ wcze±niejsz¡ wiedz¡ o j¦zyku (X)HTML,
gdzie pola tego typu powinny mie¢ niepowtarzaln¡ nazw¦. Umieszczenie nawiasów na ko«cu
nazwy daje w PHP mo»liwo±¢ dynamicznego generowania tablic na podstawie danych prze-
sªanych z formularza. W efekcie zmienna $_POST['zainteresowania'] stanie si¦ tablic¡, w
której warto±¢ ka»dego wybranego pola zostanie zapisana w osobnym elemencie. W przy-
padku pól typu <select> z wª¡czon¡ opcj¡ multiple jest to wªa±ciwie jedyny sposób na
przechwycenie wszystkich wybranych opcji (je±li nie dodaliby±my nawisów w polu systemy,
to poznaliby±my tylko ostatni¡ wybran¡ opcj¦ przez u»ytkownika). Mo»liwo±¢ u»ycia tego
rozwi¡zania nie ogranicza si¦ tylko do póª typu select i checkbox, ani do tablic indeksowa-
nych liczbami caªkowitymi. Mo»emy tworzy¢ elementy tablicy, którech kluczami s¡ ªa«cuchy
znaków. W tym celu umieszczamy ten ªa«cuch (bez apostrofów i cudzysªowów) w nawiasach
kwadratowych. Np.

<label>Email <input name="dane[email]" type="text" id="" /></label>

Po wysªaniu formularza (metod¡ POST )mo»emy to pole odczyta¢ przy u»yciu skªadni

$_POST['dane']['email']

Je±li przyzwyczaili±my si¦ do operowania zmiennymi globalnymi, to zamiast wª¡cza¢ dy-

rektyw¦ register_globals mo»emy wybra¢ bezpieczniejsze rozwi¡zanie, a mianowicie u»y¢
nast¦puj¡cej funkcji:

bool import_request_variables ( string $types [, string $prefix] )

Funkcja ta tworzy na poziomie globalnym zmienne reprezentuj¡ce warto±ci umieszczone we
wskazanych tablicach superglobalnych. Parametr $types pozwala okre±li¢ jakie zmienne za-
importowa¢. Mo»e on zawiera¢ dowoln¡ kombinacj¦ liter 'G', 'P' oraz 'C' (ich wielko±¢ nie
ma znaczenia) odpowiednio dla tablic $_GET, $_POST and $_COOKIE. Parametr opcjonalny
$prefix okre±la przedrostek jakim zostan¡ poprzedzone nazwy importowane z tablic.

<?php

// Fragment zaimportuje zmienne GET i POST
// z prefiksem "rvar_"

39

background image

8 Zmienne spoza PHP

import_request_variables("gP", "rvar_");

echo $rvar_foo;
?>

8.3 Ciasteczka HTTP

PHP bez problemu obsªuguje ciasteczka HTTP. Ciasteczka s¡ mechanizmem przechowy-
wania informacji w przegl¡darce klienta w celu ±ledzenia lub identykowania staªych bywal-
ców strony. Ciasteczka ustawia si¦ za pomoc¡ funkcji setcookie(). Ciasteczka s¡ cz¦±ci¡
nagªówka HTTP, wi¦c funkcja setcookie() musi by¢ wywoªana zanim jakakolwiek in-
na informacja zostanie wysªana do przegl¡darki. Takie samo ograniczenie dotyczy funkcji
header(). Wszystkie ciasteczka odebrane od klienta zostan¡ automatycznie zamienione w
zmienne PHP, podobnie jak dane odebrane metod¡ GET lub POST.

Funkcja setcookie() jest zdeniowana w sposób nast¦puj¡cy:

int setcookie( string nazwa, string warto±¢, int czas,

string ±cie»ka, string domena, int bezpieczny )

Wszystkie argumenty funkcji poza nazw¡ s¡ opcjonalne. Je»eli funkcja jest wywoªana tyl-

ko z nazw¡, cookie o podanej nazwie jest usuwane. Dowolny z ci¡gów mo»e zosta¢ opuszczony
podaj¡c pusty ci¡g (""). Dowolna warto±¢ numeryczna mo»e zosta¢ opuszczona podaj¡c war-
to±¢ zero. Argument czas jest standardowym czasem z systemu Unix w postaci liczby, któr¡
mo»na uzyska¢ jako wynik funkcji mktime() lub time(). Parametr bezpieczny wskazuje, »e
cookie mo»e by¢ przesyªane jedynie przez poª¡czenie bezpieczne (HTTPS).

Nale»y pami¦ta¢ o nast¦puj¡cych puªapkach i cz¦stych bª¦dach u»ycia cookie:

Ustawione cookie nie b¦d¡ widoczne w skrypcie do czasu jego powtórnego zaªadowania.

Przegl¡darki ró»nie obsªuguj¡ cookie. Sprawdzajmy aplikacj¦ na mo»liwie du»ej ilo±ci
przegl¡darek.

Ka»da przegl¡darka przechowuje cookie niezale»nie. Oznacza to, »e je»eli u»ytkownik
obejrzy witryn¦ przy u»yciu jednej przegl¡darki i zostanie ustawione cookie, to co-
okie nie b¦dzie dost¦pne, je»eli u»ytkownik ponownie obejrzy witryn¦ za pomoc¡ innej
przegl¡darki.

Wysªane ciasteczko zast¡pi wcze±niejsze ciasteczko o tej nazwie, o ile ±cie»ka lub do-
mena nie s¡ ró»ne.

40

background image

8 Zmienne spoza PHP

Je±li register_globals jest wyª¡czona, dane dostarczone do skryptu za pomoc¡ me-
chanizmu cookie dost¦pne s¡ jedynie poprzez tablic¦ superglobaln¡ $_COOKIE.

Przykªad zastosowania setcookie():

$ilosc++;
setcookie("ilosc", $ilosc, time()+3600);
setcookie("koszyk[$ilosc]", $towar, time()+3600);

Kasowanie cisteczek:

// ustaw dat¦ wa»no±ci na godzin¦ wstecz
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);

Aby pozna¢ zawarto±¢ przykªadowego ciasteczka ze skryptu, nale»y zastosowa¢ poni»szy
przykªad:

echo $TestCookie;
echo $_COOKIE["TestCookie"];

Mo»na te» tworzy¢ tablice zªo»one z ciasteczek za pomoc¡ zapisu tablicowego w nazwie
ciasteczka. Powoduje to utworzenie tylu ciasteczek, ile jest elemetów tablicy, a po otrzymaniu
takiego ciasteczka, jego warto±ci umieszczane s¡ w tablicy o nazwie takiej jak ciasteczko.

setcookie ("cookie[three]", "cookiethree");
setcookie ("cookie[two]", "cookietwo");
setcookie ("cookie[one]", "cookieone");
if (isset ($cookie)) {

while (list ($name, $value) = each ($cookie)) {

echo "$name == $value&lt;br>\n";

}

}

8.4 Przesyªanie plików metod¡ POST

PHP mo»e odbiera¢ pliki przesyªane za pomoc¡ formularzy i metody POST protokoªu HTTP.

Prosty formularz do przesyªania plików:

<form enctype="multipart/form-data" action="_URL_" method="post">

<input type="hidden" name="MAX_FILE_SIZE" value="30000" />

41

background image

8 Zmienne spoza PHP

Wy±lij plik: <input name="userfile" type="file" />
<input type="submit" value="Send File" />

</form>

Adres _URL_ w powy»szym przykªadzie powinien wskazywa¢ na odpowiedni skrypt w PHP.
Ukryte pole o nazwie MAX_FILE_SIZE (mierzone w bajtach) oznacza maksymaln¡ akcepto-
waln¡ wielko±¢ pliku. Musimy równie» ustawi¢ atrybut

enctype="multipart/form-data"

w przeciwnym razie przesyªanie nie zadziaªa.

Zmienne deniowane dla przesªanych plików ró»ni¡ si¦ w zale»no±ci od wersji PHP i

konguracji parsera. Tablica autoglobalna $_FILES istnieje od wersji PHP 4.1.0. Starsza
konstrukcja $HTTP_POST_FILES istnieje od wersji PHP 4.0.0 (jest ci¡gle dost¦pna). Zmienne
te b¦d¡ zawiera¢ peªn¡ informacj¦ o przesªanym pliku. Rekomendowane jest u»ycie tablicy
$_FILES, ale je±li dyrektywa register_globals jest wª¡czona, to zarejestrowane s¡ odpo-
wiednie zmienne globalne.

Uwaga! Dyrektywa register_globals jest domy±lnie ustawiona na off od wersji PHP
4.2.0.

Opiszemy zawarto±¢ tablicy $_FILES na naszym przykªadzie. Zauwa»my, »e zamiast na-

zwy userfile mo»na u»y¢ w atrybucie name innej zgodnej ze skªadni¡ nazwy.

$_FILES['userfile']['name'] - oryginalna nazwa plików na komputerze klienta.

$_FILES['userfile']['type'] - typ MIME pliku ,w przypadku gdy przegl¡darka
obsªuguje przesyªanie tej informacji.

$_FILES['userfile']['size'] - rozmiar pliku w bajtach.

$_FILES['userfile']['tmp_name'] - nazwa pliku na serwerze - umo»liwia dalsze
przetwarzanie pliku przez skrypt.

$_FILES['userfile']['error'] - informacje o bª¦dach. Mog¡ by¢ nast¦puj¡ce war-
to±ci: UPLOAD_ERR_OK lub 0 - co oznacza, »e nie byªo bª¦du i plik zostaª przesªany;
UPLOAD_ERR_INI_SIZE lub 1 - przesªany plik przekracza dopuszczalny rozmiar zdenio-
wany w dyrektywie upload_max_filesize w pliku php.ini; UPLOAD_ERR_FORM_SIZE
lub 2 - rozmiar pliku przekracza warto±¢ podan¡ w atrybucie MAX_FILE_SIZE poda-
nym w formularzu HTML; UPLOAD_ERR_PARTIAL lub 3 - przesªano tylko fragment pliku;
UPLOAD_ERR_NO_FILE lub 4 - »aden plik nie zostaª przesªany.

42

background image

9 HTTP - obsªuga protokoªu

W przypadku, gdy register_globals jest wª¡czona w php.ini, mamy dost¦pne równie»

zmienne globalne. W tej sytuacji $userfile_name zawiera to samo, co $_FILES['userfile']['name'],
$userfile_type jest równa $_FILES['userfile']['type'] itd. z tym wyj¡tkiem, »e zmien-
na $userfile jest równa $_FILES['userfile']['tmp_name'].

Pliki domy±lne b¦d¡ przechowywane w tymczasowym katalogu serwera, chyba »e podamy

inn¡ lokalizacj¦ za pomoc¡ dyrektywy upload_tmp_dir w pliku php.ini. Mo»na równie»
ustawi¢ zmienn¡ ±rodowiskow¡ TMPDIR w systemie, w którym uruchomione jest PHP.

Uwaga! PHP domy±lnie ogranicza wielko±¢ plików, jakie mo»na przesyªa¢ u»ywaj¡c te-
go mechanizmu, do 2 megabajtów. Ta wielko±¢ jest wa»niejsza od zmiennej formularza
MAX_FILE_SIZE. Warto±¢ ta mo»e by¢ zmieniona przez ustawienie warto±ci upload_max_filesize
w pliku php.ini, lub ustawienie odpowiedniej dyrektywy w pliku konguracyjnym serwera.
Gdy osi¡gni¦ta zostanie graniczna wielko±¢ pliku (zarówno ustawiona w formularzu jak i
globalne maksimum), PHP generuje bª¡d, przerywa przesyªanie i ustawia nazw¦ pliku na
none.

9 HTTP - obsªuga protokoªu

W poprzednim paragrae omówili±my funkcj¦ setcookie(). Tu bli»ej omówimy pozostaªe
funkcje do obsªugi protokoªu HTTP, a mianowicie:

header() - wysyªa surowy nagªówek HTTP.

headers_list() - zwraca list¦ wysªanych lub gotowych do wysªania nagªówków.

headers_sent() - sprawdza, czy nagªówki byªy ju» wysªane.

Poni»ej przedstawiamy opis funkcji header().

int header ( string tre±¢_nagªówka [, bool zamie« [, int kod_odpowiedzi_http]])

Pierwszy argument opcjonalny zamie« okre±la, czy funkcja ma zast¡pi¢ nagªówek tego same-
go typu przygotowany przez serwer, czy doda¢ jeszcze jeden. Domy±lnie, oryginalny nagªówek
zostanie zast¡piony, ale je±li ustawimy ten argument na FALSE, to nowy nagªówek zostanie
dodany do ju» istniej¡cych. Na przykªad:

<?php
header('WWW-Authenticate: Negociate');
header('WWW-Authenticate: NTLM', FALSE);
?>

43

background image

9 HTTP - obsªuga protokoªu

Drugi argument opcjonalny kod_odpowiedzi_http pozwala narzuci¢ okre±lony kod odpo-
wiedzi HTTP. (Argument ten jest dost¦pny w PHP 4.3.0 i wy»szych).

S¡ dwa specjalne wywoªania funkcji header. Pierwszym z nich jest ka»dy nagªówek zaczy-

naj¡cy si¦ od "HTTP/" (wielko±¢ liter nie jest istotna). Nagªówka tego u»ywa si¦ do podania
statusu zapytania HTTP. Na przykªad, je±li skongurowali±my serwer Apache aby u»ywaª
skryptu PHP do wy±wietlania komunikatów o brakuj¡cych plikach (za pomoc¡ dyrektywy
ErrorDocument), mo»emy chcie¢ wypróbowa¢, czy skrypt generuje wªa±ciwy kod statusu.

<?php
header("HTTP/1.0 404 Not Found");
?>

Drugim specjalnym wywoªaniem funkcji header jest nagªówek "Location:". W tej sy-
tuacji, do klienta wysyªany jest nie tylko ten nagªówek, ale tak»e status przekierowania
REDIRECT (302), o ile inny status zapytania 3xx nie zostaª ju» wysªany.

<?php
header("Location: http://www.example.com/"); /* Przekieruj przegl¡dark¦ */
exit;

/* Upewnij si¦, »e kod poni»ej nie zostanie wykonany

po przekierowaniu. */

?>

Uwaga! Protokóª HTTP 1.1 wymaga bezwzgl¦dnego URI w nagªówku Location: wª¡cznie
z okre±leniem protokoªu, nazwy hosta i bezwzgl¦dnej ±cie»ki dost¦pu, ale niektóre klienty ak-
ceptuj¡ wzgl¦dne URI. Zwykle u»ywa si¦ $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF']
i funkcji dirname() by wygenerowa¢ bezwzgl¦dny URI:

<?php
header("Location: http://".$_SERVER['HTTP_HOST']

."/".dirname($_SERVER['PHP_SELF'])
."/".$wzgl¦dny_url);

?>

Skrypty PHP cz¦sto sªu»¡ do generowania dynamiczej tre±ci, która nie mo»e by¢ buforowana
przez klienta czy serwer proxy. Pami¦¢ cache (bufor) w wi¦kszo±ci tych urz¡dze« da si¦
wyª¡czy¢ dzi¦ki:

<?php
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// data w przeszªo±ci

header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

44

background image

9 HTTP - obsªuga protokoªu

// ci¡gle modyfikowany

header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

// HTTP/1.0

?>

Uwaga! Mo»na zaobserwowa¢, »e strony nie s¡ buforowane, nawet je±li nie u»yli±my wszyst-
kich ww. nagªówków. Jest wiele sposobów, na jakie u»ytkownicy mog¡ skongurowa¢ swoje
przegl¡darki, aby zmieni¢ standardowy sposób buforowania. Przez wysªanie powy»szych na-
gªówków, powinno si¦ uda¢ omin¡¢ wszystkie ustawienia pozwalaj¡ce na zbuforowanie wy-
niku pracy skryptu.
Dodatkowo, session_cache_limiter() i dyrektywa konguracyjna session.cache_limiter
sªu»¡ do automatycznego generowania nagªówków zwi¡zanych z bufurowaniem, kiedy sesje
s¡ w u»yciu.

Pami¦tajmy, »e header() mo»e by¢ wywoªywana jedynie do momentu nim zostanie wysªana
jakakolwiek tre±¢, tzn. znaczniki HTML, puste linie lub wynik pracy PHP. Jest to bardzo
cz¦sty bª¡d, gdzie skrypty z funkcjami include(), require() itp. maj¡ spacje albo puste
linie przed wywoªaniem funkcji header(). Problem ten pojawia si¦ równie» w skryptach
opartych na pojedynczym pliku PHP/HTML.

<html>
<?php
// Ten kod powoduje powstanie bª¦du. Prosz¦ zauwa»y¢, »e
// ponad wywoªaniem funkcji header() znajduje si¦ jaka± tre±¢.
header('Location: http://www.na_przyklad.com/');
?>

Aby u»ytkownik zostaª monitowany o zapisanie wysyªanych danych, takich jak np. wygene-
rowany plik PDF, mo»na u»y¢ nagªówka Content-Disposition aby poda¢ zalecan¡ nazw¦
pliku i zmusi¢ przegl¡dark¦ do wy±wietlenia okienka zapisu pliku:

<?php
// przesyªamy plik PDF
header("Content-type: application/pdf");

// ustawiamy jego nazw¦ na downloaded.pdf
header("Content-Disposition: attachment; filename=downloaded.pdf");

45

background image

10 Formatowanie czasu i daty

// tre±¢ znajduje si¦ w pliku original.pdf
readfile('original.pdf');
?>

Uwaga! W Microsoft Internet Explorer 4.01 jest bª¡d, który uniemo»liwia wykorzystanie
tego mechanizmu. Nie ma na to rozwi¡zania. Bª¡d, który zahacza o ten mechanizm, jest
tak»e w Microsoft Internet Explorer 5.5, jednak da si¦ go omin¡¢ aktualizuj¡c przegl¡dark¦
poprzez Service Pack 2 lub pó¹niejszy.

10 Formatowanie czasu i daty
date

- Formatuje lokalny czas/dat¦

string date ( string format [, int znacznik_czasu])

Zwraca dat¦ sformatowan¡ wedªug szablonu podanego w argumencie format. ›¡dana data
okre±lona jest w argumencie znacznik_czasu, a w przypadku jego braku pobierany jest
aktualny czas.

Poni»szych znaków u»ywa si¦ w szablonie formatuj¡cym dat¦:

a - "am" lub "pm".

A - "AM" lub "PM".

B - Czas internetowy Swatcha.

d - dzie« miesi¡ca, 2 cyfry z zerem na pocz¡tku; tzn. od "01" do "31".

D - dzie« tygodnia, tekst, 3 litery; np. "Fri".

F - miesi¡c, tekst, peªna nazwa; np. "January".

g - godzina, format 12-godzinny bez zera na pocz¡tku; tzn. od "1" do "12".

G - godzina, format 24-godzinny bez zera na pocz¡tku; tzn. od "0" do "23".

h - godzina, format 12-godzinny z zerem na pocz¡tku; tzn. od "01" do "12".

H - godzina, format 24-godzinny z zerem na pocz¡tku; tzn. od "00" do "23"

i - minuty; tzn. od "00" do "59".

I (du»a litera i) - "1" je±li czas oszcz¦dzania ±wiatªa sªonecznego (w Polsce - czas letni),
"0" je±li czas standardowy (w Polsce - zimowy).

46

background image

10 Formatowanie czasu i daty

j - dzie« miesi¡ca bez zera na pocz¡tku; tzn. od "1" do "31".

l (maªa litera 'L') - dzie« tygodnia, tekst, peªna nazwa; np. "Friday".

L - "1" je±li rok przest¦pny, "0" w przeciwnym razie.

m - miesi¡c; tzn. "01" to "12".

M - miesi¡c, tekst, 3 litery; np. "Jan".

n - miesi¡c bez zera na pocz¡tku; tzn. "1" to "12".

O - ró»nica w stosunku do czasu Greenwich; np. "+0200".

r - data sformatowana wedªug RFC 822; n.p. "Thu, 21 Dec 2000 16:01:07 +0200"
(dodane w PHP 4.0.4).

s - sekundy; i.e. "00" to "59".

S - standardowy angielski suks liczebnika porz¡dkowego, 2 litery; tzn. "st", "nd", "rd"
lub "th".

t - liczba dni w danym miesi¡cu; tzn. od "28" do "31".

T - strefa czasowa ustawiona na tej maszynie; np. "EST" lub "MDT".

U - liczba sekund od uniksowej Epoki (1 stycznia 1970 00:00:00 GMT).

w - dzie« tygodnia, liczbowy, tzn. od "0" (Niedziela) do "6" (Sobota).

W - numer tygodnia w roku wedªug ISO-8601, tydzie« zaczyna si¦ w poniedziaªek (do-
dane w PHP 4.1.0).

Y - rok, 4 liczby; n.p. "1999".

y - rok, 2 liczby; n.p. "99".

z - dzie« roku; tzn. od "0" do "365".

Z - ofset strefy czasowej w sekundach (tzn. pomi¦dzy "-43200" a "43200"). Ofset dla
stref czasowych na zachód od UTC (poªudnika zero) jest zawsze ujemny a dla tych na
wschód od UTC jest zawsze dodatni.

Nierozpoznane znaki w szablonie formatuj¡cym b¦d¡ wy±wietlone tak jak s¡.
Przykªady u»ycia funkcji date():

47

background image

11 Wysyªanie poczty elektronicznej za pomoc¡ PHP

/* Dzisiaj jest March 10th, 2001, 5:16:18 pm */
$today = date("F j, Y, g:i a");

// March 10, 2001, 5:16 pm

$today = date("m.d.y");

// 03.10.01

$today = date("j, n, Y");

// 10, 3, 2001

$today = date("Ymd");

// 20010310

$today = date('h-i-s, j-m-y, it is w Day z ');

// 05-16-17, 10-03-01, 1631 1618 6 Fripm01

$today = date('\i\t \i\s \t\h\e jS \d\a\y.');

// It is the 10th day.

$today = date("D M j G:i:s T Y");

// Sat Mar 10 15:16:08 MST 2001

$today = date('H:m:s \m \i\s\ \m\o\n\t\h');

// 17:03:17 m is month

$today = date("H:i:s");

// 17:16:17

mktime

- Oblicza uniksowy znacznik czasu dla podanej daty

int mktime ( int godzina, int minuta, int sekunda,

int miesi¡c, int dzie«, int rok [, int letni/zimowy])

time

- Zwraca aktualny uniksowy znacznik czasu

int time ( void )

Zwraca aktualny czas, podawany jako liczba sekund, które upªyn¦ªy od uniksowej Epoki

(1 stycznia 1970 00:00:00 GMT).

11 Wysyªanie poczty elektronicznej za pomoc¡ PHP

Aby wysªa¢ poczt¦ elektroniczn¡ nale»y u»y¢ funkcji mail(). Oto jej skªadnia:

bool mail ( string do, string temat, string tre±¢

[, string dodatkowe_nagªówki [, string dodatkowe_parametry]])

Funkcja mail() automatycznie wysyªa wiadomo±¢ okre±lon¡ w tre±¢ do odbiorcy okre±lonego
w do. Mo»na wysªa¢ wiadomo±¢ do kilku odbiorców na raz, wypisuj¡c ich adresy po przecinku
w argumencie do. Poprzez t¦ funkcj¦ mo»na te» wysªa¢ listy zawieraj¡ce zaª¡czniki lub inne
typy wiadomo±ci. Jest to mo»liwe dzi¦ki kodowaniu MIME.

Funkcja zwraca TRUE je±li e-mail zostaª zaakceptowany przez przeka¹nik pocztowy do

wysªania lub FALSE w przeciwnym wypadku.

Je±li zostanie podany czwarty argument, b¦dzie on dopisany na ko«cu nagªówka wiado-

mo±ci. Ten argument wykorzystuje si¦ do wstawienia dodatkowych nagªówków. Dodatkowe
nagªówki rozdziela si¦ znakiem powrotu karetki i nowego wiersza:

48

background image

11 Wysyªanie poczty elektronicznej za pomoc¡ PHP

mail("joecool@example.com", "Temat listu", "Linia 1\nLinia 2\nLinia 3");
mail("nobody@example.com", "temat", $message,

"From: webmaster@$SERVER_NAME\r\n"

."Reply-To: webmaster@$SERVER_NAME\r\n"
."X-Mailer: PHP/" . phpversion());

Uwaga! Aby rozdzieli¢ nagªówki, trzeba u»y¢ sekwencji \r\n, chocia» niektóre uniksowe
agenty pocztowe obsªuguj¡ tak»e pojedynczy znak nowej linii (\n).

Argumentu dodatkowe_parametry u»ywa si¦ do przekazania dodatkowego paramteru do
programu wysyªaj¡cego poczt¦ skongurowanego w dyrektywie sendmail_path. U»ywa si¦
tego na przykªad do ustawienia adresu zwrotnego koperty (envelope sender adress) przy
wysyªaniu listu za pomoc¡ sendmaila. Mo»emy by¢ zmuszony doda¢ u»ytkownika jakim jest
nasz serwer WWW do listy zaufanych u»ytkowników w pliku konguracyjnym sendmaila, aby
sendmail nie dodaª nagªówka "X-warning" do wiadomo±ci przy wysyªaniu koperty (envelope)
t¡ metod¡.

mail("nobody@example.com", "temat", $wiadomosc,

"From: webmaster@$SERVER_NAME", "-fwebmaster@$SERVER_NAME");

Uwaga! Pi¡ty argument funkcji mail() zostaª dodany w PHP 4.0.5. Pocz¡wszy od PHP
4.2.3 argument ten jest zablokowany w trybie bezpiecznym. W przypadku próby u»ycia,
funkcja mail() wygeneruje ostrze»enie i zwróci FALSE.

Wysyªanie zªo»onego emaila (w formacie HTML):

// adresaci
$to = "Mary <mary@example.com>" . ", " ; //zwróc uwag¦ na przecinek
$to .= "Kelly <kelly@example.com>";

// temat
$subject = "Birthday Reminders for August";

// wiadomo±¢
$message = '
<html>
<head>

<title>Birthday Reminders for August</title>

</head>
<body>

49

background image

11 Wysyªanie poczty elektronicznej za pomoc¡ PHP

<p>Here are the birthdays upcoming in August!</p>
<table>

<tr>

<th>Person</th><th>Day</th><th>Month</th><th>Year</th>

</tr>
<tr>

<td>Joe</td><td>3rd</td><td>August</td><td>1970</td>

</tr>
<tr>

<td>Sally</td><td>17th</td><td>August</td><td>1973</td>

</tr>

</table>
</body>
</html>
';

/* Aby wysªa¢ e-mail w formacie HTML, nale»y ustawi¢

nagªówek Content-type. */

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-2\r\n";

/* dodatkowe nagªówki */
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n";

$headers .= "Cc: birthdayarchive@example.com\r\n";
$headers .= "Bcc: birthdaycheck@example.com\r\n";

// a teraz wy±lij
mail($to, $subject, $message, $headers);

Uwaga! Upewnijmy si¦, »e nie ma »adnych znaków nowej linii w argumencie do lub temat,
gdy» w przeciwnym razie, e-mail mo»e nie by¢ wysªany poprawnie.

50

background image

15 Wyra»enia regularne

12 Obsªuga zmiennych tablicowych

13 Funkcje do obsªugi systemu plików

›adne zewn¦trzne biblioteki nie s¡ potrzebne do u»ywania tych funkcji.

resource fopen ( string nazwa_pliku, string tryb

[, bool u»yj_include_path [, resource zkontekst]] )

fopen() wi¡»e nazwany zasób, okre±lony przez nazwa_pliku do strumienia. Je±li nazwa_pliku
jest w formacie "schemat://...", PHP przyjmuje, »e to jest URL i rozpoczyna poszukiwanie
programu obsªugi protokoªu (równie» zwanego wrapperem) dla tego schematu. Je±li nie ma
zarejestrowanego wrappera dla tego protokoªu, PHP wy±wietli wiadomo±¢ aby pomóc Tobie
namierzy¢ potencjalne problemy w Twoim skrypcie i b¦dzie kontynuowa¢ prac¦, traktuj¡c
podany nazwa_pliku jako zwykªy plik.

Je±li PHP zdecyduje, »e nazwa_pliku okre±la lokalny plik, wtedy spróbuje otworzy¢ stru-

mie« na tym pliku. Plik musi by¢ dost¦pny dla PHP, wi¦c musisz zapewni¢ prawa dost¦pu do
pliku pozwalaj¡ce na tak¡ operacj¦. Je±li masz wª¡czone tryb bezpieczny lub open_basedir
mog¡ mie¢ zastosowanie dodatkowe restrykcje.

Je±li PHP zdecyduje, »e nazwa_pliku okre±la zarejestrowany protokóª i ten protokóª jest

zarejestowany jako sieciowy URL, PHP sprawdzi allow_url_fopen czy jest wª¡czone. Je±li
jest wyª¡czone (o), PHP wy±wietli ostrze»enie i wywoªanie fopen zako«czy si¦ niepowodze-
niem.

14 Ša«cuchy znaków

15 Wyra»enia regularne

Wyra»enie regularne jest sposobem opisu wzorca (ang. pattern) szukanego we fragmencie
tekstu (od lewej do prawej). Najprostszym wyra»eniem jest zwykªy ci¡g znaków np. "to jest
mój dom", który pasuje do dowolnego ªa«cucha znaków zawieraj¡cego ten tekst. Korzystaj¡c
z wyra»e« regularnych mo»emy si¦ posªugiwa¢ specjalnymi znakami (ang. meta characters),
pozwalaj¡cymi na wyszukiwanie nie tylko dokªadnych dopasowa«. S¡ one interpretowane
w sposób szczególny, przy ich pomocy mo»emy wskaza¢, czy wzorzec musi si¦ pojawi¢ na
pocz¡tku lub ko«cu ªa«cucha, »e musi si¦ skªada¢ z okre±lonych znaków itp. Mamy dwa
zbiory meta znaków: te które s¡ rozpoznawane wsz¦dzie poza nawiasami prostok¡tnymi [] i
te, które s¡ interpretowane w nawiasach prostok¡tnych.

51

background image

15 Wyra»enia regularne

Znaki specjalne poza nawiasami []:

^ - wskazuje, »e wzorzec musi si¦ znajdowa¢ na pocz¡tku tekstu, np. wyra»enie ^dom
pasuje do dowolnego tekstu rozpoczynaj¡cego si¦ od sªowa dom.

$ - wskazuje, »e wzorzec musi si¦ znajdowa¢ na ko«cu tekstu, np. wyra»enie dom$ pasuje
do dowolnego tekstu ko«cz¡cego si¦ sªowem dom.

| - znak oznaczaj¡cy rozgaª¦zienie (alternatyw¦) np. wyra»enie com|edu|net pasuje
do tekstu, który zawiera sªowo com, b¡d¹ edu b¡d¹ net.

[] - nawiasy prostok¡tne oznaczaj¡ denicj¦ klasy.

. - kropka zast¦puje dowolny znak prócz znaku nowej linii, np. .as pasuje do sªów las,
was, mas.

() - nawiasy okr¡gªe umo»liwiaj¡ tworzenie podwyra»e«.

* - oznacza, »e wyra»enie lub podwyra»enie musi si¦ pojawi¢ 0 lub wi¦cej razy, np.
(bardzo )* du»y pasuje do sªów du»y, bardzo du»y, bardzo bardzo du»y itp.

+ - oznacza, »e wyra»enie lub podwyra»enie musi si¦ pojawi¢ 1 lub wi¦cej razy, np.
(bardzo )+ du»y pasuje do sªów bardzo du»y, bardzo bardzo du»y itp.

{} - nawiasy klamrowe specykuj¡ liczb¦ powtórze« wyra»enia lub podwyra»enia, np.
(bardzo ){1,3} du»y pasuje do tekstów: bardzo du»y, bardzo bardzo du»y, bardzo bar-
dzo bardzo du»y.

\ - znak unikatowy, zmienia znaczenie innych znaków specjalnych, przestaj¡ one by¢
interpretowane i staj¡ si¦ zwykªymi znakami, np. 100\$ pasuje do ci¡gu 100$.

Znaki specjalne w klasach (mi¦dzy znakami []). Klasy specykuj¡ zakresy znaków,
które powinny si¦ znajdowa¢ w danym miejscu tekstu, np. [a-z] oznacza, »e w danym
miejscu powinna by¢ maªa litera. W tym przypadku nast¦puj¡ce znaki s¡ interpretowane:

\ - znak unikatowy, zmienia znaczenie innych znaków specjalnych, przestaj¡ one by¢
interpretowane i staj¡ si¦ zwykªymi znakami, np. \^ pasuje do znaku ^.

^ - zaprzeczenie (NOT), tylko wówczas gdy wyst¦puje jako pierwszy w klasie, np.
[^a-z] oznacza, »e znak nie mo»e by¢ maª¡ liter¡.

- - jest u»ywany do okre±lania zakresu znaków, np. [0-9], [A-M].

52

background image

16 Dost¦p do systemu MySQL z poziomu PHP

Oprócz klas wyliczeniowych mamy przedeniowane klasy znaków:

Klasa

Dopasowanie

[[:alnum:]]

znaki alfanumeryczne

[[:alpha:]]

znaki alfabetu

[[:lower:]]

maªe litery

[[:upper:]]

du»e litery

[[:digit:]]

cyfry dziesi¦tne

[[:xdigit:]] cyfry heksadecymalne
[[:punct:]]

znaki interpunkcyjne

[[:blank:]]

tabulatory i spacje

[[:space:]]

znaki biaªe

[[:cntrl:]]

znaki steruj¡ce

[[:print:]]

wszystkie znaki drukowane

[[:graph:]]

wszystkie znaki drukowane bez spacji

16 Dost¦p do systemu MySQL z poziomu PHP

Ten prosty przykªad demonstruje jak poª¡czy¢ si¦, wykona¢ zapytanie, wy±wietli¢ wyniki i
rozª¡czy¢ si¦ z baz¡ MySQL.

<?php

// Š¡czenie i wybranie bazy
$link = mysql_connect('host', 'uzytkownik', 'haslo')

or die('Nie mo»na si¦ poª¡czy¢: ' . mysql_error());

echo 'Poª¡czenie nawi¡zane';
mysql_select_db('baza') or die ('Nie mozna wybra¢ bazy danych');

// Wysyªanie zapytania SQL
$query = 'SELECT * FROM tabela';
$result = mysql_query($query) or

die ('Zapytanie zako«czone niepowodzeniem: ' . mysql_error());

// Wy±wietlenie wyników w HTML
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {

echo "\t<tr>\n";
foreach ($line as $col_value) {

53

background image

16 Dost¦p do systemu MySQL z poziomu PHP

echo "\t\t<td>$col_value</td>\n";

}
echo "\t</tr>\n";

}
echo "</table>\n";

// Zwalnianie pami¦ci
mysql_free_result($result);

// Rozª¡czanie
mysql_close($link);
?>

Poni»ej przedstawimy list¦ niezb¦dnych funkcji. Ich opis mo»na odnale¹¢ na stronie

http:

//pl.php.net/manual/pl/

.

addslashes()  dodanie odwrotnych uko±ników przed snakami specjalnymi (forma-
towanie zaytania).

stripslashes() - dziaªanie dowrotne do funkcji addslashes() (formatowanie odpo-
wiedzi).

floatval() - pobieranie warto±ci rzeczywistej ze zmiennej.

mysql_connect() - otwiera poª¡czenie z serwerem MySQL.

mysql_pconnect() - otwiera staªe poª¡czenie z serwerem MySQL.

mysql_close() - zamyka poª¡czenie z serwerem MySQL.

mysql_select_db() - wybiera baz¦ MySQL.

mysql_query() - wysyªa zapytanie do serwera MySQL.

mysql_num_rows() - zwraca liczb¦ wierszy w wyniku (tylko do operacji SELECT).

mysql_affected_rows() - zwraca ilo±¢ wierszy przetworzonych w poprzedniej operacji
MySQL (operacje INSERT, UPDATE lub DELETE).

mysql_free_result() - zwalnia pami¦¢ zajmowan¡ przez wynik.

mysql_fetch_array() - zapisuje wiersz wyniku w tablicy asocjacyjnej, numerycznej
lub w obu.

54

background image

17 Obsªuga sesji

mysql_fetch_assoc()  zapisuje wiersz wyniku w tablicy asocjacyjnej.

mysql_fetch_row()  zapisuje wiersz wyniku w tablicy wyliczeniowej.

mysql_fetch_object  zapisuje wiersz wyniku jako obiekt.

mysql_error()  zwraca tekst komunikatu bª¦du z ostatniej operacji MySQL.

17 Obsªuga sesji

Obsªuga sesji w PHP ma na celu zapewnienie sposobu na zachowanie pewnych danych w
trakcie nast¦puj¡cych po sobie wywoªa« strony. Pozwala to na budowanie bardziej sperso-
nalizowanych aplikacji i zwi¦kszenie atrakcyjno±ci twojej strony internetowej.

Obsªuga sesji pozwala na rejestrowanie dowolnej ilo±ci zmiennych, które maj¡ by¢ prze-

kazywane pomi¦dzy stronami. Kiedy u»ytkownik wchodzi na stron¦, PHP automatycznie
sprawdzi (je±li session.auto_start jest ustawione na 1) lub na nasze »yczenie (jawnie
przez wywoªanie session_start() lub niejawnie przez wywoªanie session_register())
czy specyczne id sesji zostaªo przypisane. Je±li tak, poprzednio zachowane ±rodowisko jest
odtwarzane.

Wszystkie zarejestrowane zmienne s¡ serializowane po wykonaniu caªego kodu strony.

Zarejestrowane zmienne, które s¡ niezdeniowane, s¡ zaznaczane jako niezdeniowane. Nie
s¡ one deniowane przez moduª sesji w nast¦puj¡cych po sobie wywoªaniach, chyba »e u»yt-
kownik zdeniuje je pó¹niej.

Istniej¡ dwie metody propagacji identykatora sesji:

ciasteczka,

parametry URL-i lokalnych.

Moduª sesji obsªuguje obie metody. Ciasteczka s¡ metod¡ optymaln¡, ale poniewa» nie s¡

one pewne (klienci nie musz¡ ich akceptowa¢), nie mo»emy na nich polega¢. Druga metoda
wstawia identykatory sesji bezpo±rednio do URL-i.

PHP mo»e to robi¢ 'przezroczy±cie' je±li zostaª skompilowany z opcj¡ --enable-trans-sid.

Je±li wª¡czysz t¡ opcj¦, wzgl¦dne URI zostan¡ automatycznie podmienione tak, aby zawie-
raªy identykator sesji. Mo»emy tak»e u»y¢ staªej SID która jest deniowana je±li klient nie
wysªaª odpowiedniego ciastka. SID jest albo w postaci nazwa_sesji=id_sesji lub pustym
ªa«cuchem znaków.

Poni»szy przykªad demonstruje jak zarejestrowa¢ zmienn¡ i jak prawidªowo wstawi¢ link

do kolejnej strony korzystaj¡c ze staªej SID.

55

background image

17 Obsªuga sesji

<?php if (!session_is_registered('count')) {

session_register('count');
$count = 1;

} else {

$count++;

} ?>

Witaj go±ciu. Ogl¡dasz t¡ stron¦ <?php echo $count; ?> raz.<p>

<?php
# <?php echo SID?> (<?=SID?> mo»e by¢ u»yte je±li wª¡czona jest mo»liwo±¢
# u»ywania krótkich tagów) jest konieczne do zachowania identyfikatora
# sesji je±li u»ytkownik wyª¡czyª ciastka
?>

Aby kontynuowa¢, <A HREF="nextpage.php?<?php echo SID?>">kliknij tutaj</A>

Uwaga! <?=SID?> nie jest konieczne je±li przy kompilacji PHP u»yta zostaªa opcja
--enable-trans-sid.

Uwaga! PHP zakªada, »e bezwzgl¦dne URL-e odnosz¡ si¦ do zewn¦trznych serwisów, wi¦c
nie trzeba przekazywa¢ SID, poniewa» istniaªoby niebezpiecze«stwo podkradania SID-ów
przez inny serwer.

Opcje konguracyjne track_vars i register_globals wpªywaj¡ na to, jak zmienne

sesyjne s¡ przechowywane i odtwarzane.

Je±li wª¡czona jest opcja track_vars a register_globals jest wyª¡czona, tylko pozycje

nale»¡ce do zmiennej asocjacyjnej $HTTP_SESSION_VARS/$_SESSION mog¡ by¢ zarejestro-
wane jako zmienne sesyjne. Odtworzone zmienne sesyjne b¦d¡ dost¦pne tylko w zmiennej
$HTTP_SESSION_VARS/$_SESSION.

Uwaga! Od wersji PHP 4.1.0 dost¦pna jest globalna zmienna $_SESSION, podobnie jak
$_POST, $_GET, $_REQUEST i tak dalej. W odró»nieniu od $HTTP_SESSION_VARS, $_SESSION
jest zawsze globalna. W zwi¡zku z tym global nie powinno by¢ u»yte do $_SESSION.

Je±li wª¡czona jest opcja track_vars a register_globals jest wyª¡czona, tylko pozy-

cje nale»¡ce do zmiennej asocjacyjnej $HTTP_SESSION_VARS mog¡ by¢ zarejestrowane jako
zmienne sesyjne. Odtworzone zmienne sesyjne b¦d¡ dost¦pne tylko w zmiennej $HTTP_SESSION_VARS.

U»ycie $_SESSION (lub $HTTP_SESSION_VARS dla wersji PHP 4.0.6 i starszych) jest wska-

zane ze wzgl¦dów bezpiecze«stwa i czytelno±ci kodu. U»ywaj¡c $_SESSION lub $HTTP_SESSION_VARS

56

background image

18 Zasoby sieciowe zwi¡zane z j¦zykiem PHP

nie ma potrzeby u»ywa¢ funkcji session_register()/session_unregister()/
session_is_registered(). U»ytkownicy mog¡ uzyskiwa¢ dost¦p do zmiennych sesyjnych
tak jak do normalnych zmiennych.

Rejestrowanie zmiennych przez $_SESSION:

<?php
session_start();
// U»yj $HTTP_SESSION_VARS dla PHP 4.0.6 i starszych
if (!isset($_SESSION['count'])) {

$_SESSION['count'] = 0;

} else {

$_SESSION['count']++;

}
?>

Wyrejestrowywanie zmiennej korzystaj¡c z $_SESSION:

<?php
session_start()
// U»yj $HTTP_SESSION_VARS dla PHP 4.0.6 i starszych
unset($_SESSION['count']);
?>

Uwaga! Je±li u»ywane s¡ tablice $HTTP_SESSION_VARS/$_SESSION i wyª¡czona jest opcja
register_globals, nie powinno si¦ u»ywa¢ session_register(), session_is_registered()
i session_unregister().

Je±li wª¡czona zostanie opcja register_globals, powinno si¦ u»ywa¢ session_unregister()

poniewa» zmienne sesyjne s¡ rejestrowane jako zmienne globalne kiedy dane sesyjne s¡ de-
serializowane. Wyª¡czenie register_globals jest zalecane ze wzgl¦dów bezpiecze«stwa i
wydajno±ci.

18 Zasoby sieciowe zwi¡zane z j¦zykiem PHP

http://www.php.net

- ocjalna witryna j¦zyka PHP.

http://zend.com

- witryna mechanizmu ZEND, na którym oparte jest PHP.

http://www.phpwizard.net

- ¹ródªa wielu aplikacji PHP.

http://www.phpbuilder.com

- portal z podr¦cznikami PHP.

57

background image

18 Zasoby sieciowe zwi¡zane z j¦zykiem PHP

http://px.sklar.com

- PX-PHP Code Exchange - mnóstwo przykªadowych skryptów

i funkcji.

http://www.hotscripts.com

- bogaty, podzielony na kategorie wybór skryptów w

ró»nych j¦zykach, takich jak PHP, ASP czy Perl.

http://phpclub.net

- mnóstwo zasobów dla pocz¡tkuj¡cych programistów PHP.

http://phpclasses.upperdesign.com

- PHP Classes Repository - witryna, na której

oferowane s¡ za darmo klasy tworzone w PHP.

http://www.webhelp.pl/

- Webhelp - polski portal zawieraj¡cy wiele materiaªów do-

tycz¡cych m. in. php, mysql, html, css, ash, javascript, asp, cgi.

http://webcity.pl/

- WebCity - strona po Polsku, zawiera kursy PHP i MySQL.

http://4programmers.net/

- 4Programmers - polska witryna o programowaniu.

58


Document Outline


Wyszukiwarka

Podobne podstrony:
Kurs PHP v1
Kurs PHP & MYSQL
Kurs PHP dla początkujących
kurs php fusion 7T67UCH4LSQRCFDFBO5SKMNWJWRZN7MOTXXZWSA
KURS PHP, Informatyka
Kurs Php & Mysql, Informatyka, ● PHP, MySQL, ORACLE
Kurs Php & Mysql(1)
PHP kurs 2
PHP kurs
PHP cz 1 v2
php cheat sheet v2
Ajax Kurs od podstaw Część 3 Ajax, PHP i pliki tekstowe
PHP cURL Book v2 1

więcej podobnych podstron