PHP podruhΘ, zaΦφnßme s HTTP
Ji°φ Kosek ml.
V minulΘm dφlu jsme skonΦili u spoluprßce PHP s formulß°i. Nynφ se na chvφli zastavφme u vyu₧itφ PHP p°i tvorb∞ aplikacφ.
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 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.
Zpravodajstvφ
Vφtejte na naÜem zpravodajskΘm serveru
$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;
?>
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 ale 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 ukonΦφme. JeÜt∞ se vÜak v naÜem serißlu k n∞mu vrßtφme a ukß₧eme si jeho dalÜφ mo₧nosti vΦetn∞ spoluprßce s databßzemi.
Zßklady protokolu HTTP
Slu₧ba World Wide Web je postavena na t°ech zßkladnφch technologiφch -- HTML, URL a HTTP. HTML je znaΦkovacφ jazyk, kter² slou₧φ k standardnφmu popisu obsahu a struktury webovsk²ch strßnek. URL je specißlnφ druh adres pou₧φvan²ch na Webu -- ka₧dß webovskß strßnka mß svoji jednoznaΦnou adresu prßv∞ v podob∞ URL. HTTP -- Hypertext Transfer Protocol -- je protokol pou₧φvan² p°i komunikaci mezi prohlφ₧eΦi a webovsk²mi servery. Pomocφ tohoto protokolu se k serveru p°enßÜφ URL strßnky, kterou u₧ivatel (p°es sv∙j prohlφ₧eΦ) po₧aduje, a naopak server pomocφ protokolu HTTP odesφlß u₧ivateli zp∞t strßnku zapsanou v HTML.
Pro sprßvnΘ pochopenφ princip∙ CGI skript∙ je nezbytnß alespo≥ zßkladnφ znalost protokolu HTTP. Proto se v dneÜnφm pokraΦovßnφ serißlu podφvßme na zßkladnφ vlastnosti protokolu HTTP.
Protokol HTTP vychßzφ z architektury klient/server. Klient -- v naÜem p°φpad∞ prohlφ₧eΦ -- se spojφ se serverem a poÜle mu po₧adavek. Server jako reakci na klient∙v po₧adavek zasφlß odpov∞∩. P°esn² formßt po₧adavku a odpov∞di je definovßn ve specifikaci protokolu HTTP. Celou situaci mφrn∞ komplikuje to, ₧e dnes existujφ 3 verze protokolu -- 0.9, 1.0 a 1.1. Formßt po₧adavku a odpov∞di se v jednotliv²ch verzφch odliÜuje.
P°φÜt∞ si po °ad∞ probereme komunikaci mezi klientem a serverem ve vÜech 3 verzφch HTTP.
HTTP verze 0.9
V HTTP/0.9 je formßt po₧adavku velice jednoduch². Jde o jeden °ßdek, kde je za klφΦov²m slovem GET uvedena cesta k po₧adovanΘmu dokumentu. Pokud chceme pomocφ HTTP/0.9 zφskat nap°. dokument http://www.server.cz/~krystof/linky.html, musφme se p°ipojit k poΦφtaΦi www.server.cz na port 80 (standardnφ port slu₧by WWW) a zaslat po₧adavek:
GET /~krystof/linky.html
Jako odpov∞∩ nßm p°ijde obsah souboru linky.html. VÜe si m∙₧eme sami vyzkouÜet a zahrßt si na prohlφ₧eΦ. StaΦφ spustit Telnet a p°ihlßsit se k n∞jakΘmu serveru na port 80. Pak napφÜeme HTTP po₧adavek a nechßme se p°ekvapit, co nßm server odeÜle zp∞t (viz obr. 2).
Na tomto mφst∞ musφme p°ipomenout, ₧e cesta za slovem GET nem∙₧e b²t prßzdnß a musφ v₧dy obsahovat alespo≥ lomφtko:
GET /
Mo₧nß vßs napadlo, jak² dokument odeÜle server jako odpov∞∩, pokud v po₧adavku nenφ urΦen p°φmo soubor, ale pouze adresß° (nebo dokonce jen ko°enov² adresß° jako v naÜem p°φklad∞). V tomto p°φpad∞ WWW server hledß v adresß°i soubor, kter² se jmenuje index.html, default.html Φi welcome.html -- zßle₧φ na konfiguraci. Pokud jej nalezne, odeÜle jej jako odpov∞∩. Pokud takov² soubor neexistuje, odeÜle v²pis obsahu adresß°e (pokud to nenφ v konfiguraci serveru zakßzßno).