1.6. Apache som WAP-server

Det seneste år er WAP-telefoner ved at blive en udbredt standard for at hente mobile internet-sider. Siderne er ikke formatteret i HTML, men i WML (Wireless Markup Language), som er en XML-variant.

I al sin enkelthed er WAP set fra serverens side blot et nyt filformat; WML. Det der skal tilføjes på din hjemmeside for at understøtte WAP, er så kun de samme data i WML, og så formateret i et format så de kan ses på en meget lille skærm.

Det er snyde nemt af få en Apache webserver til at fungere som en WAP-server. Det kræver basalt set kun at webserveren kan fortolke at filer der ender på .wml sendes som Content-type: test/vnd.wap.wml. Samtidig skal du måske også have .wbmp-billeder med over, så derfor skal du tilføje disse to linjer til /etc/http/conf/httpd.conf:

# For de almindelige WML-sider
AddType text/vnd.wap.wml     .wml
# For WML indlejret grafik
AddType image/vnd.wap.wbmp   .wbmp    

Nu skal du bare genstarte Apache, og du har en WAP-server. Lad os lige tage to eksempler.

Eksempel 1-1. Det første WAP-eksempel

Det enkleste eksempel på en WAP-side er nok denne

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>
 <card id='home'>
  <p>
Her kommer teksten på min første WAP-side
  </p>
 </card>
</wml>

Det vigtigste, der skal bemærkes sammenlignet med HTML, er at næsten alle tags skal afsluttes, dvs. <p> skal efterfølges af </p>. Dog skal et billede ikke afsluttet, som det kan ses i næste eksempel

Eksempel 1-2. Et WAP-eksempel med et billede

<img> skal anvendes med / til sidst og alt-tag skal med.

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"  "http://www.wapforum.org/DTD/wml_1.1.xml">
 
<wml>
  <card id="demo" title="Peters søn">
    <p>
    Her er min søde søn Frederik
    <img src="F2.wbmp" alt="Frederik"/>
    </p>
  </card>
</wml>

WML er en ret stor standard, som man kan læse mere på på http://www.wap.com eller http://www.wapforum.com. Du kan på http://www.anywhereyougo.com/ayg/ayg/Content.po?name=wap/Wmlidx få mere hjælp om de enkelte tags. Har du ingen WAP-telefon kan du med fordel bruge http://gelon.net som har en Java-baseret WAP-simulator der er velegnet til test.

Er du interesseret i en kom-i-gang-guide, så prøv at læse http://www.zend.com/zend/tut/wap.php

I det følgende går vi dog lidt længere, idet vi viser hvordan man også får PHP-understøttelse til WAP. Vi antager at du har installeret Apache og PHP4.

Når et PHP-program starter med at sende data tilbage til modtageren, sender PHP først noget et HTTP-hoved. Hovedet indeholder dato, serverudgave og meget andet, men især hvilken type data der vil blive sendt. Hvis intet er anført i hovedet sendes Content-type: text/html, og dette kan ændres med en enkelt kommando: Content-type: text/vnd.wap.wml. Herunder er eksemplet fra før hvor filen hedder test.php i stedet for test.wml, hvorefter Apache vil overgive kontrollen med filen til PHP.

<?php
   // Filnavn: test.php
   header("Content-type: text/vnd.wap.wml");
?><?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"  "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
 <card id='home'>
  <p>
  Dato idag er <?php echo date("Y-m-d"); ?>
  </p>
 </card>
</wml>

I Perl skrives HTTP-hovedet i starten og efterfølges af to '\n'. Dette eksempel skal placeres i /cgi-bin/-kataloget.

#!/usr/bin/perl -w
# Filnavn: test.pl
 
# Bemærk to gange '\n' som afslutter HTTP-hovedet
print "Content-type: text/vnd.wap.wml\n\n";
 
print "<?xml version=\"1.0\"?>\n";
print "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"";
print "  \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n";
print "<wml>\n";
print "  <card id='home'>\n";
print "  <p>\n";
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
    = localtime(time);
my $today=sprintf("%04d-%02d-%02d",$year+1900,$mon+1,$mday);
print "  Dato idag er $today\n";
print "  </p>\n";
print "  </card>\n";
print "</wml>\n";

SSLUG har eksempelvis siden november 1999 vist sin kalender i WAP/PHP-format. Kildeteksten findes på http://www.sslug.dk/adict/wap.phps og kan ses med en almindelig browser. Resultatet af programmet findes på http://www.sslug.dk/adict/wap.php, hvor du så skal bede browseren om at gemme indholdet på din disk hvis du prøver med din browser. Alternativt kan http://gelon.net bruges til at se WAP-kalenderen.