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