PHP (Professional Home Pages) je dalÜφm skriptovacφm jazykem, kter² se p°φmo zaΦle≥uje do textu HTML strßnky. Jeho pou₧itφ mß n∞kolik p°ednostφ. P°edn∞ je cel² systΘm Üφ°en bezplatn∞ -- podobn∞ jako nap°. operaΦnφ systΘm Linux nebo server Apache. Druhß v²hoda spoΦφvß v podpo°e vφce platforem. PHP je dodßvßno v podob∞ zdrojov²ch text∙ pro platformu Unix (vΦetn∞ Linuxu) a jako binßrnφ soubor pou₧iteln² ve Windows 95 a NT. Aplikace tak m∙₧eme vyvφjet t°eba ve Windows a pak je zp°φstupnit na v²konnΘm unixovΘm serveru. Vidφme tedy velkou v²hodu oproti ASP, kterΘ nßs svazujφ s platformou Windows. I tady se vÜak mo₧nß situace zlepÜφ, proto₧e se pracuje na produktu Chilli!ASP, kter² mß b²t kompatibilnφ s ASP a mß b∞₧et i na Unixu.
Dnes aktußlnφ verze PHP je 3.0. P°edtφm pou₧φvanß verze 2.0 m∞la pon∞kud odliÜn² nßzev PHP/FI, kter² byl dßn historick²m v²vojem celΘho systΘmu. PHP si m∙₧eme stßhnout na adrese http://www.php.net. K dispozici je i ΦeskΘ zrcadlo s peeringem do NIXu na adrese http://www.php.cz.
Na PHP je zajφmavΘ, ₧e m∙₧e b²t spouÜt∞no n∞kolika zp∙soby. NejlepÜφ zp∙sob je, kdy₧ PHP spustφme jako modul serveru Apache. Tuto vlastnost m∙₧eme pou₧φt pouze na Unixu. Na vÜech ostatnφch serverech m∙₧e b∞₧et PHP jako CGI-skript, kter² se postarß o interpretaci p°φkaz∙ na strßnkßch. Ve Windows mßme mo₧nost PHP provozovat jako ISAPI modul. ISAPI je standardnφ rozhranφ pro spoluprßci WWW server∙ s r∙zn²mi dalÜφmi aplikacemi. PHP proto m∙₧e b∞₧et i jako modul v∞tÜiny server∙ pracujφcφch pod Windows.
My se te∩ podφvßme, jak si podporu PHP p°idat do instalace Apache z
prvnφho dφlu naÜeho serißlu. Pro instalaci si musφme stßhnout Windows
distribuci PHP. Ta mß podobu jednoho zip-souboru. Ten rozbalφme do
n∞jakΘho adresß°e -- nap°. e:\php3
. P°i rozbalenφ nßm
vznikne podadresß° system
. Jeho obsah musφme zkopφrovat do
systΘmovΘho adresß°e Windows (nejΦast∞ji c:\windows
nebo
c:\winnt
). Do tohoto adresß°e p°esuneme i souboru
php3.ini
. V souboru php3.ini
musφme upravit
obsah prom∞nn²ch doc_root
a user_dir
tak, aby
ukazovaly na ko°enov² adresß° naÜeho Web-serveru resp. obsahovaly jmΘno
adresß°e vyhrazenΘho pro HTML dokumenty jednotliv²ch u₧ivatel∙.
(Pozn. V dob∞ odevzdßvßnφ Φlßnku se na Internetu objevila novß
distribuce PHP, kde vÜechny v²Üe uvedenΘ kroky provede instalaΦnφ
program.)
Nynφ musφme jeÜt∞ nastavit server Apache tak, aby na strßnky
obsahujφcφ PHP spustil p°φsluÜn² interpret. ┌pravy se budou t²kat
souboru srm.conf
.
PHP v naÜem p°φpad∞ bude fungovat jako CGI-skript. Musφme tedy povolit provßd∞nφ skript∙ v adresß°i, kde je nainstalovßno PHP. Do konfiguraΦnφho souboru p°idßme °ßdku
ScriptAlias /php3/ "e:/php3/"Nynφ musφme p°idat nov² typ dat, kter² bude svßzan² s urΦitou p°φponou. Pro PHP skripty se obvykle pou₧φvß p°φpona
.phtml
nebo
.php3
. My se p°iklonφme k prvnφ variant∞ a odkomentujeme
p°φsluÜnou °ßdku konfiguraΦnφho souboru tak, abychom dostali
AddType application/x-httpd-php3 .phtmlNynφ zb²vß serveru °φci, ₧e vÜechny soubory novΘ vytvo°enΘho typu se majφ p°edat CGI-skriptu PHP k vyhodnocenφ. Do
srm.conf
p°idßme nßsledujφcφ °ßdku:
Action application/x-httpd-php3 /php3/php.exea konfiguraΦnφ soubor ulo₧φme. Po restartu Apache bychom m∞li mφt vÜe p°ipraveno pro naÜi prßci. V p°φpad∞ problΘm∙ m∙₧eme konzultovat dokumentaci PHP a Apache.
<?
' a
'?>
'. Vidφme, ₧e PHP pou₧φvß jako odd∞lovaΦ znak
standardn∞ vymezen² pro tyto ·Φely a tak jsou vÜechny PHP skripty
kompatibilnφ s nßstroji pro automatickΘ zpracovßnφ SGML a XML dokument∙.
echo
:
<? echo "Hello World!" ?>V PHP m∙₧eme samoz°ejm∞ pou₧φvat prom∞nnΘ. Nßzev prom∞nnΘ musφ zaΦφnat znakem '$' (dolar). P°i°azenφ hodnoty do prom∞nnΘ provedeme pomocφ operßtoru '='. Prom∞nnou pak m∙₧eme vyu₧φvat v dalÜφch v²razech:
<? $pozdrav = "Ahoj Karle!"; ... echo $pozdrav; ?>Z ukßzky rovn∞₧ vidφme, ₧e jednotlivΘ p°φkazy se odd∞lujφ pomocφ st°ednφku.
Program m∙₧eme podle pot°eby v∞tvit pomocφ p°φkazu if
.
Jeho pou₧itφ si ukß₧eme na funkΦnφ obdob∞ ukßzky z minulΘho dφlu
serißlu. Vytvo°φme strßnku, kterß bude zdravit u₧ivatele v zßvislosti na
tom, zda je dopoledne Φi odpoledne:
<? if (date("A")=="AM"): ?> DobrΘ rßno! <? else: ?> DobrΘ odpoledne! <? endif ?>K zjiÜt∞nφ Φasu pou₧φvßme funkci
Date()
. Jejφm parametrem
je formßtovacφ °et∞zec, kter² urΦuje v²sledn² tvar informace o Φase.
Pokud ve formßtovacφm °et∞zci pou₧ijeme 'A
', vrßtφ funkce
dopoledne °et∞zec 'AM
' a odpoledne 'PM
' --
podle toho snadno urΦφme, zda je dopoledne Φi odpoledne.
VÜimn∞me si jeÜt∞, ₧e za podmφnkou u if
a za nepovinn²m
else
je pot°eba psßt dvojteΦku. Krom∞ tΘto syntaxe m∙₧eme
pou₧φvat i syntaxi podmφnek p°evzatou z jazyka C. V tomto p°φpad∞ je
vÜak p°ehledn∞jÜφ, kdy₧ neprolφnßme k≤d PHP s HTML:
<? if (date("A")=="AM") { echo "DobrΘ rßno!"; } else { echo "DobrΘ odpoledne!"; } ?>Nynφ se podφvßme na pou₧itφ cykl∙. Mezi nejjednoduÜÜφ cykly pat°φ
for
. Pou₧itφ si ukß₧eme na jednoduchΘm p°φkladu, kter² na
obrazovku vypφÜe text a pou₧ije p°itom vÜech sedm velikostφ pφsma.
<? for($i=0; $i<=7; $i++): ?> <P><FONT SIZE="<?echo $i?>">Ukßzkov² text</FONT> <? endfor ?>Abychom si ukßzali sφlu PHP, upravφme ukßzku tak, aby vypisovala texty i v r∙zn²ch barvßch. Pro tyto ·Φely vytvo°φme pole, kterΘ bude obsahovat jmΘna barev, kterΘ se pou₧ijφ pro jednotlivΘ velikosti pφsma.
<? $barvy = array(1=>"red", "green", "cyan", "yellow", "navy", "silver", "blue" ) ?> <? for ($i=1; $i<=7; $i++): ?> <P><FONT SIZE="<?echo $i?>" COLOR="<?echo $barvy[$i]?>"> Pokusn² text o velikosti <?echo $i?></FONT> <? endfor ?>Prvnφ dv∞ °ßdky vytvo°φ pole
$barvy
, kterΘ je
inicializovßno jmΘny barev. Pole jsou v PHP normßln∞ indexovßna od nuly,
pomocφ zßpisu '1=>
' ulo₧φme hodnoty do pole a₧ od indexu
1. Tφm bude index v poli barev odpovφdat velikosti pφsma. JednotlivΘ
polo₧ky pole jsou nynφ p°φstupnΘ pomocφ zßpisu
$barvy[index]
.
Do prohlφ₧eΦe dorazφ tento v²sledn² HTML k≤d:
<P><FONT SIZE="1" COLOR="red"> Pokusn² text o velikosti 1</FONT> <P><FONT SIZE="2" COLOR="green"> Pokusn² text o velikosti 2</FONT> <P><FONT SIZE="3" COLOR="cyan"> Pokusn² text o velikosti 3</FONT> <P><FONT SIZE="4" COLOR="yellow"> Pokusn² text o velikosti 4</FONT> <P><FONT SIZE="5" COLOR="navy"> Pokusn² text o velikosti 5</FONT> <P><FONT SIZE="6" COLOR="silver"> Pokusn² text o velikosti 6</FONT> <P><FONT SIZE="7" COLOR="blue"> Pokusn² text o velikosti 7</FONT>V²sledek v prohlφ₧eΦi p°inßÜφ obrßzek 1.
<FORM ACTION=obsluha.phtml METHOD=GET> JmΘno: <INPUT TYPE=TEXT NAME=jmeno><BR> V∞k: <INPUT TYPE=TEXT NAME=vek><BR> <INPUT TYPE=SUBMIT VALUE="Odeslßnφ formulß°e"> </FORM>Ve skriptu
obsluha.phtml
nynφ m∙₧eme pou₧φvat prom∞nnΘ
$jmeno
a $vek
, kterΘ obsahujφ hodnotu
vypln∞nou u₧ivatelem do p°φsluÜnΘho pole formulß°e. Skript
obsluha.phtml
pak m∙₧e vypadat t°eba takto:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <TITLE>Obsluha formulß°e</TITLE> </HEAD> <BODY> <H1>V²sledek obsluhy formulß°e</H1> <? echo $jmeno ?> je <? if ($vek < 10): echo "p∞knej mlφΦnßk"; elseif ($vek < 20): echo "teenager"; elseif ($vek < 60): echo "v nejlepÜφch letech"; elseif ($vek < 100): echo "je pravd∞podobn∞ prarodiΦ"; else: echo "je n∞kde mezi stovkou a smrtφ"; endif ?>. </BODY> </HTML>
Date()
m∙₧eme s v²hodou pou₧φt pro vypsßnφ
aktußlnφho data a Φasu serveru do strßnky tak, jak to d∞lß mnoho
zpravodajsk²ch server∙. My si ukß₧eme, jak tohoto efektu dosßhnout
pomocφ PHP. Pro nßÜ skript bude p°edevÜφm d∙le₧itß znalost v²znamu
jednotliv²ch znak∙ ve formßtovacφm °et∞zci funkce Date()
.
Pot°ebnΘ informace nalezneme v tabulce 1.
Y | Rok jako Φty°Φφslφ (nap°. 1998) |
y | Rok jako dvojΦφslφ (nap°. 98) |
M | Anglickß zkratka jmΘna m∞sφce (nap°. Jan) |
m | ╚φslo m∞sφce (1-12) |
F | AnglickΘ jmΘno m∞sφce (nap°. January) |
D | Anglickß zkratka dne v t²dnu (nap°. Fri) |
l | Anglickß jmΘno dne v t²dnu (nap°. Friday) |
d | ╚φslo dne v m∞sφci (1-31) |
M | ╚φslo dne v roce (1-365) |
H | Hodina (0-23) |
h | Hodina (1-12) |
i | Minuta (0-59) |
s | Sekunda (0-59) |
U | PoΦet sekund od zaΦßtku Φasu |
A | Indikßtor dopoledne/odpoledne (AM/PM) |
a | Indikßtor dopoledne/odpoledne (am/pm) |
Vidφme, ₧e v tabulce nßm schßzφ Φeskß jmΘna m∞sφc∙ a dn∙ v t²dnu. To
vÜak m∙₧eme obejφt. Pro dny v t²dnu vytvo°φme asociativnφ pole, kterΘ
poslou₧φ k p°evodu anglick²ch zkratek dne na Φesk² nßzev. Asociativnφ
pole je pole, kde se jako index pou₧φvß znakov² °et∞zec. Pro m∞sφce
m∙₧eme vytvo°it normßlnφ pole, proto₧e funkce Date()
vracφ
p°φmo po°adovΘ Φφslo m∞sφce.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <TITLE>Zpravodajstvφ</TITLE> </HEAD> <BODY> <H1 ALIGN=CENTER>Vφtejte na naÜem zpravodajskΘm serveru</H1> <P ALIGN=CENTER> <FONT SIZE=5 COLOR=RED> <? $dny["Mon"] = "Pond∞lφ"; $dny["Tue"] = "┌ter²"; $dny["Wed"] = "St°eda"; $dny["Thu"] = "╚tvrtek"; $dny["Fri"] = "Pßtek"; $dny["Sat"] = "Sobota"; $dny["Sun"] = "Ned∞le"; $mesice = array(1=>"ledna", "·nora", "b°ezna", "dubna", "kv∞tna", "Φervna", "Φervence", "srpna", "zß°φ", "°φjna", "listopadu", "prosince"); $dnes = $dny[Date("D")] . Date(" d. ") . $mesice[(int)Date("m")] . Date(" Y - H:i:s"); echo $dnes; ?> </FONT> </BODY> </HTML>V²sledn² zßpis datumu sklßdßme z jednotliv²ch Φßstφ do prom∞nnΘ
$dnes
. Pro spojovßnφ °et∞zc∙ musφme pou₧φt operßtor
'.
' a ne obvyklΘ '+
'. ObyΦejnΘ znaky pou₧itΘ
ve formßtovacφm °et∞zci funkce Date()
se vrßtφ spoleΦn∞ s
v²sledkem. Toho vyu₧φvßme pro dopln∞nφ mezer a teΦek na sprßvnß mφsta.
Proto₧e funkce Date()
vracφ jako v²sledek °et∞zec, musφme
v p°φpad∞ p°evodu Φφsla m∞sφce na jmΘno p°etypovat v²sledek na Φφselnou
hodnotu pomocφ p°ed°azenφ (int)
.
Ufffff! Mßme mi to v srdci Evropy trßpenφ. Pro angliΦtinu by staΦil
cel² skript zkrßtit na jeden p°φkaz echo Date("l F d, Y -
H:i:s")
. Pokochejme se vÜak v²sledkem naÜeho skriptu na obrßzku
2.
Tφm naÜi krßtkou exkurzi do sv∞ta PHP pro dneÜek ukonΦφme. P°φÜt∞ se podφvßme na protokol HTTP, jeho₧ zßkladnφ znalost je nezbytnß pro pochopenφ princip∙ CGI-skript∙. K PHP se vÜak jeÜt∞ vrßtφme a ukß₧eme si jeho dalÜφ mo₧nosti vΦetn∞ spoluprßce s databßzemi.