Viikkotehtävä 10
Viikkotehtävää EI enää vuoden 2007 kurssilla!
Käytetään muiden tekemiä WWW-sivuja tai XML-dokumentteja tiedonlähteenä. Kokeillaan kuinka oikeilla HTTP-otsakkeilla ja välimuistilla vähennetään palvelimen kuormaa ja nopeutetaan palvelua. Tutustutaan Apachen handlereihin ja toteutetaan niiden avulla oma sivupohja.
Taso 1
- Kopioi itsellesi mallisivusto ja pura se people-palvelimelle
- Muuta Jyväskylä-sivu PHP-ohjelmaksi (index.php), joka hakee Jyväskylän lämpötilan, kosteuden, auringon nousu- ja laskuajan sekä lämpötilaennusteen seuraavalle päivälle Yahoon tarjoamasta RSS-syötteestä ja lisää tiedot otsikon jälkeen listana tai taulukkona.
- Lisää kaikille sivuston HTML- ja PHP-tiedostoille oma käsittelijä (handler), joka lisää jokaiseen sivuun vakionavigoinnin. Muista varmistaa, että navigoinnin linkit toimivat jokaisella sivulla.
- Tekemäsi käsittelijän täytyy osata tallentaa jokaisesta luodusta sivusta
välimuistiversio, jossa on navigointi ja sivun sisältö.
- Oletusarvoisesti sivua pyydettäessä tarjotaan välimuistiversiota.
- HTML-dokumenttia pyydettäessä välimuistiversio uusitaan vain jos HTML-dokumentti on muuttunut nykyisen välimuistiversion tekemisen jälkeen.
- PHP-sivua pyydettäessä välimuistiversio päivitetään 10 minuutin välein.
- Varmista, että käsittelijä osaa vastata oikeilla HTTP-otsakkeilla (Last-Modified, Expires, Cache-Control) selaimen mahdollisiin If-Modified-Since-kyselyihin.
Vinkki
Alikansioissa sijaitsevien dokumenttien käsittely pitää tehdä seuraavalla tavalla tai toinen vaihtoehto on kirjoittaa käsittelijään kaikki tiedostoviittaukset absoluuttisilla poluilla ja aina siirtyä käsiteltävän tiedoston kansioon.
// polku käsiteltävään tiedostoon
$file = $_SERVER["PATH_TRANSLATED"];
// oletuspolku
$sijainti = getcwd();
// suhteellinen polku käsiteltävään _kansioon_
$suhtpolku = ereg_replace($sijainti, "", $file);
$p = strripos($suhtpolku, "/");
$suhtpolku = substr($suhtpolku, 1, $p);
// ....
// ...
// siirrytään kansioon ennen tiedoston käsittelyä
// koska muuten kaikki suhteelliset operaatiot
// toimivat väärin
chdir($suhtpolku);
include($file);
// palataan oletuspaikkaan
chdir($sijainti);
// oletuspaikkaan ei tarvi palata jos käsittelijän omat
// tiedosto-operaatiot tehdään absoluuttisilla poluilla
// vrt "pohja.xml" vs "/home3/368/tjlahton/public_html/php/handlers/pohja.xml"
Vinkki 2
Eikö sisältö kopioidu toisesta dokumentista (DOM-puusta) toiseen dokumenttiin (DOM-puuhun)? lue postituslistalle lähetetty selitys.
Vinkki 3
Eikö template toimi html-tiedostojen kanssa? Vika piilee xhtml-dokumenttien xml-deklaraatioissa joita php-tulkki kuvittelee php:ksi. Käytä siis readfile-funktiota html-tiedostoille include-funktion sijaan. toinen vaihtoehto on laittaa .htaccessiin rivi:
php_flag short_open_tag off
Taso 3
- Toteuta Taso 1:n vaatimusten mukainen sivusto
- Muuta Finland-sivu PHP-ohjelmaksi, joka tekee sivulle taulukon paikkakunnista ja niiden lämpötiloista lenttokenttäsääsivun perusteella. Lisää sivulle myös kaaviokuva paikkakuntien säätiloista. Varmista http-otsakkeita tutkimalla, että lämpötilataulukko ja kaaviokuva uusitaan vain jos tietoihin on tullut muutoksia.
- Tee Jyväskylä-sivusta yleiskäyttöinen PHP-ohjelma, joka hakee säätiedot xml-tiedoston osoittamasta paikasta. Kopioi PHP-ohjelma ja XML-tiedosto tampere, helsinki ja stockholm-kansiohin. Muuta XML-tiedostossa oleva sivun osoite viittaamaan kyseisen kaupungin säätiedot sisältävään rss-tiedostoon
- Lisää käsittelijään mahdollisuus valita sivun navigointipalkkiin lisätyllä linkillä erilainen sivupohja. Pidä sessiossa tallessa mikä sivupohja on käytössä. Huomaa, että sivupohjan vaihtaminen edellyttää kummankin sivupohjan mukaisten dokumenttien tallentamista välimuistiin. Väliaikaistiedostojen määrä kaksinkertaistuu.
Taso 5
- Toteuta Taso 3:n vaatimusten mukainen sivusto
- Lisää sivuston käsittelijään leivänmurunavigoinnin toteutus. Leivänmurunavigoinnin pitää toimia vaikka kansiorakenne muuttuisi ilman että ohjelmakoodiin tarvitsee tehdä muutoksia. Joudut käymään kansiorakennetta läpi sivuston ylimpään sivuun saakka ja ottamaan jokaisen kansion indeksitiedoston title-elementin sisällön leivänmurunavigointiin
- Lisää käsittelijään kirjautuminen tunnuksella testi ja salasanalla testi.
- Tarjoa kirjautuneelle käyttäjälle mahdollisuus valita useista sivupohjista. Kirjautumattomalle käyttäjälle ei tarvitse olla mahdollisuutta vaihtaa sivupohjaa. Luo itse muutama uusi erilainen sivupohja. Tarjoa käsittelijälle lista käytettävistä sivupohjista xml-tiedostona jolloin on hyvin helppoa lisätä uusia sivupohjia käyttöön. Oletuksena käsittelijä käyttää tarjolla olevista pohjista ensimmäistä. Varmista, että väliaikaistiedostot luodaan tarvittaessa kaikille sivupohjille.


Käyttäjien kommentit