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 17/98

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

JmΘna soubor∙, kterΘ se hledajφ v p°φpad∞ po₧adavku, kter² obsahuje pouze jmΘno adresß°e, lze pro server Apache nastavit v konfiguraΦnφm souboru srm.conf pomocφ direktivy DirectoryIndex. Dφky tΘto vlastnosti m∙₧eme pou₧φvat URL adresy tvaru http://www.server.cz/.

 

 

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