COMPUTERWORLD
 

profil kontakt CD-ROM CW100 p°edplatnΘ

archiv anketa CO VY NA TO? CW kariΘra serißly
 

IDG

IDG CZ homepage
COMPUTERWORLD
PC WORLD
INTERNET4U
MEGABYTE
TESTCENTRUM
ON-LINE






COMPUTERWORLD 15/98

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()

Y
y
M
m
F
D
l
d
M
H
h
i
s
U
A
a

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 data 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).

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").

Tφmto p°φkladem 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.

 

 

© IDG Czechoslovakia, a.s., VÜechna prßva vyhrazena
info@idg.cz, webmaster@idg.cz