PHP -- Professional Home Pages
Ji°φ Kosek ml.
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.
Instalace
P°ed instalacφ si musφme samoz°ejm∞ stßhnout PHP ze sφt∞. Pro unixovou instalaci je pot°eba stßhnout zdrojovΘ texty, pro Windows si musφme stßhnout ji₧ zkompilovanou binßrnφ podobu systΘmu.
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 soubor 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 WWW serveru, resp. aby 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 .phtml
Nynφ 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 °ßdku
Action application/x-httpd-php3 /php3/php.exe
a 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.
Kombinovßnφ PHP skript∙ s HTML
Skriptovacφ jazyk pou₧it² v PHP Φerpß p°edevÜφm z jazyk∙ C, Java a Perl. Jeho pou₧itφ je vÜak jednoduchΘ a intuitivnφ. P°φkazy PHP se od ostatnφho HTML k≤du odd∞lujφ znaky '<?' 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∙.
Zßklady PHP
K v²pisu hodnot v²raz∙ slou₧φ p°φkaz 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 7 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φ 2 °ß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>
PHP a formulß°e
Spoluprßce PHP s formulß°i je velmi jednoduchß. P°edpoklßdejme nßÜ znßm² formulß°:
<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>
U₧iteΦnß aplikace
Funkci 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.
Tab. 1: Parametry formßtovacφho °et∞zce Date()