WWW, WAP a PDA na jedné adrese pomocí PHP

14. ledna 2002

Používání mobilních zařízení pro přístup k datům na Internetu je stále rozšířenější. Díky GPRS vzrůstá i obliba PDA. Zkuste si rozšířit své webové stránky ve formátu HTML tak, aby byla data prezentace dostupná na stejné adrese i pro ostatní zařízení.

Základem je rozpoznání, jaké typy dokumentů je schopen prohlížeč zobrazit. V závislosti na tom přesměrujete na patřičnou verzi stránek. Typy dokumentů předává prohlížeč v proměnné $HTTP_ACCEPT. Pro dokonalejší detekci ještě přidejte rozpoznání známých typů prohlížečů – výsledkem je výraz, který dokonale „odhalí“ prohlížeč a nastaví proměnnou $browser na hodnotu, která odpovídá typu pro něj vhodného formátu – je zde rozpoznáván čistě textový prohlížeč a prohlížeč v počítačích do dlaně, který využívá formát HDML.

Pro úpravu již existujících stránek do hlavního dokumentu (obvykle index.php) přidejte na začátek nejprve volání (pomocí require) souboru pro zjištění schopností prohlížeče. V závislosti na zjištění přesměrujete na patřičnou verzi; nejlépe každou ve zvláštním adresáři – tak budou jednotlivé verze dostupné na své adrese. Hodí se to hlavně v případě, kdy máte k dispozici službu zvanou multi-domain, tak se jakýkoli podadresář stává zároveň subdoménou. Začátek hlavního skriptu index.php by měl vypadat přibližně takto:

<?PHP
require("browser_capability.php");
$path="http://$HTTP_HOST/";
switch ($browser) {
  case "html": $path .= "web/"; break;
  case "wml": $path .= "wap/"; break;
  case "hdml": $path .= "pda/"; break;
  case "text": $path .= "txt/"; break;
  default: $path = "web/";
}
Header("Location: $path\n");
exit;
?>

Není špatné ještě doplnit test, zda není prázdná proměnná $QUERY_STRING. Pokud ano, je zřejmé, že klient v URL zadal nějaké parametry a již požaduje konkrétní stránku. Tento stav nastane při běžném procházení stránek nebo např. volbou uloženého odkazu z oblíbených položek. V tom případě doporučuji detekci a případné přesměrování vynechat (detekce by byla zbytečná a jen by se zdrželo generování stránky) a pokračovat v generování výchozí HTML verze (záleží na konkrétním řešení aplikace).

K detekci schopností prohlížeče použijte následující soubor browser_capability.php:

<?PHP
$browser="none";
if ((ERegI("text/vnd.wap.wml",$HTTP_ACCEPT))  // ověřit, zda prohlížeč akceptuje wml stránky
&& !(ERegI("image/gif",$HTTP_ACCEPT))) $browser="wml";  // pokud neakceptuje obrázky gif, je jasné, že to není prohlížeč HTML stránek
elseif ((ERegI("hdml;version=3.0",$HTTP_ACCEPT)) 
|| (ERegI("avantgo",$HTTP_USER_AGENT))  // pokud akceptuje HDML a ne obrázky gif, jde o PDA zařízení
&& !(ERegI("image/gif",$HTTP_ACCEPT))) $browser="hdml";
elseif (ERegI("Lynx",$HTTP_USER_AGENT)) $browser="text";  // jde o zvláštní textový prohlížeč Lynx
elseif ((ERegI("Mozilla",$HTTP_USER_AGENT))
|| (ERegI("MSIE",$HTTP_USER_AGENT))
|| (ERegI("Explorer",$HTTP_USER_AGENT))) $browser="html";
elseif ((ERegI("WAP",$HTTP_USER_AGENT)) //pokud předchozí testy selhaly, testuje se, zda nejde o browser mobilního zařízení nebo emulátor
|| (ERegI("NOKIA",$HTTP_USER_AGENT))
|| (ERegI("UP.",$HTTP_USER_AGENT))
|| (ERegI("UP/",$HTTP_USER_AGENT))
|| (ERegI("Klondike",$HTTP_USER_AGENT))
|| (ERegI("M3GATE",$HTTP_USER_AGENT))
|| (ERegI("Ericsson",$HTTP_USER_AGENT))
|| (ERegI("WML",$HTTP_USER_AGENT))) $browser="wml";
?>

Uvedený soubor pro detekci jsem tvořil pokusně. V této podobě ho používám déle než rok, nicméně je možné, že se objeví další zařízení, pro které bude nutná úprava výrazu podmínek. Například je možné, že Internet Explorer bude umět, stejně jako Opera, zobrazovat wml stránky – pak by bylo nutné upravit část pro testování řetězce "MSIE".

Podobnou detekcí je dobré vybavit i hlavní skripty jednotlivých verzí (www, wap, text, pda) a v případě nevhodného prohlížeče přesměrovat na vhodnou verzi. Pokud by pak někdo do adresního řádku Internet Exploreru zadal adresu wapové verze stránek, můžete mu místo obvyklého dialogu nabízejícího soubor ke ztažení nabídnout stránku s emulátorem mobilního telefonu. Příklad je vidět na www.trance.cz/wap.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *