VERKKOSOVELLUSTEN OHJELMOINTI, JOHDATUS PHP:HEN Tämän tehtävän tarkoitus on tutustuttaa ympäristöön sekä tutustuttaa wwwdokumenttien tekoon php:llä. Alkutoimet Varmistetaan, että verkkolevyllä on kansio nimeltään public_html. Tämä on kansio, johon jokainen käyttäjä voi luoda omat kotisivunsa. Tarvitsemme tätä kansiota testataksemme php-skriptejämme. Tänne kannattaa luoda alikansio (vaikkapa nimellä php) ja tallettaa kaikki harjoitukset sinne. Kun kotisivukansio on luotu, siihen voidaan viitata osoitteella http://users.metropolia.fi/~ktunnus/. Huomaa, että tällainen viittaaminen edellyttää ns. indeksitiedoston olemassaoloa. Indeksitiedosto on tiedosto, joka näytetään hakemistosta, jos hakemistoon viitataan vain hakemiston nimellä. Indeksitiedoston nimi on yleensä index.tarkennin,esimerkiksi index.html, index.htm, index.php jne... Indeksitiedosto estää hakemiston sisällön suoran katselun. Yksittäiseen tiedostoon voidaan viitata sen nimellä, esimerkiksi seuraavalla tavalla: http://users.metropolia.fi/~ktunnus/php/harjoitus1.php joka viittaa public_html-hakemiston alikansiossa php olevaan harjoitus1.php-nimiseen tiedostoon. Huomaa, että tiedostojen ja kansioiden nimissä kirjainkoko ratkaisee, esimerkiksi tiedostot HARJOITUS1.PHP ja harjoitus1.php ovat kaksi eri tiedostoa! Oikeuksista (samalla pieni unix-kertaus...) Jotta sivut näkyisivät verkossa, tulee sivutiedostolla olla lukuoikeudet ryhmällä others. Lähtökohtaisesti (tietoturvasyistä) eivät muut kuin omistaja (user) saa mitään oikeuksia. Sivun tiedoston kohdalla lähtökohta oikeuksien suhteen on yleensä seuraava: -rw-------. 1 kuivanen kuivanen 537 Jan 20 2005 taulukot.php komentamalla komentoriviltä (esim. edunix.metropolia.fi:ssä) chmod o+r taulukot.php saa tiedosto oikeudet -rw----r--. 1 kuivanen kuivanen 537 Jan 20 2005 taulukot.php Tämän enempiä oikeuksia tiedosto ei tarvitse! ÄLÄ ANNA LIIKAA OIKEUKSIA! Hakemisto tarvitsee x-oikeudet others-ryhmälle, jotta siellä olevia tiedostoja voitaisiin näyttää. Näin ollen kannattaa tarkistaa, että sekä oman kotihakemiston että public_htmlkansion oikeudet ovat tällaiset: drwx-----x. 23 kuivanen kuivanen Oikeudet voivat olla myös tällaiset: drwx---r-x. 23 kuivanen kuivanen 4096 Nov 21 2007 public_html 4096 Nov 21 2007 public_html Tällöin jos hakemistossa ei ole ns. indeksitiedosta (index.html, index.htm, index.php,...), näytetään hakemistoviittauksella hakemiston tiedostot selaimessa. Tämä voi olla ihan hyvä asia testivaiheessa, mutta ns. tuotantokäytössä kannattaa lukuoikeus poistaa. Kotihakemistoon ei saa antaa lukuoikeuksia! 1(5)
HUOMAA! Oppilaitoksemme unix-servereillä on välillä havaittu käyttäytymistä, jossa Windowspuolella tapahtuva tiedoston muokkaaminen poistaa siltä yllä mainitut lukuoikeudet! Tämä tarkoittaa sitä, että jokaisen muokkaamisen jälkeen on tiedoston oikeudet käytävä muuttamassa takaisin! Millä ohjelmilla koodia toteutetaan? Php-koodia voi toteuttaa millä tahansa suosikkieditorillaan. Luokkiin on asennettu htmleditori nimeltään HTMLKit, joka osaa korostaa php:n syntaksia, joka omalta osaltaan helpottaa koodin kirjoittamista. Tällä editorilla saa myös html-dokumenttien vakio-osat automaattisesti paikoilleen. Luonnollisesti voi käyttää mitä tahansa editoria. Windows-puolen peruseditoreista Notepad++ on asennettu koneisiin ja on Windowsin omaa Notepadia paljon parempi. Editorien lisäksi Eclipse-ympäristössä on myös PHP-paketti mukana. Tästä ja muutenkin PHP:n testauksesta erillisessä dokumentissa! Linux-ympäristössä Bluefish 1 -niminen html-editori on erinomainen työväline. Se tuntee php:n syntaksin ja osaa avustaa funktioiden toteuttamisessa. 1 Huom! Vanhemmissa dokumenttiversioissa mainitun Quanta+-nimisen editorin kehitys on lopetettu. 2(5)
Ensimmäinen esimerkki Alla pieni perustavaa laatua oleva esmerkki siitä, miten PHP-koodi liitetään osaksi wwwdokumenttia. Talleta esimerkki vaikkapa nimellä eka.php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>php-esimerkki 1</title> </head> <body> /* Tästä alkaa koodin osuus. Tätä ei selain näe ikinä. Tällä lailla esitetään usean rivin kommentti, alkaa siis kauttaviiva-tähti ja päättyy tähti-kauttaviivaan... */ print("hello, World!"); // saa tässä muutakin kirjoittaa, // jos tämä klassikko nyppii // Tällainen on muuten yhden // rivin kommentti </body> </html> Kun tiedoston nimessä on perässä.php, ajaa www-palvelin sivun koodin PHP-tulkin lävitse. Selain saa aivan puhtaan www-sivun, jossa ei siis näy mitään PHP-koodauksia mukana. Kun katsot selaimen näyttämää koodia, siinä ei näy mitään viitteitä PHP:hen. Palvelimen täytyy tukea PHP:tä, esimerkiksi perus-apache ei näytä yksin mitään PHPsivuja. Tosin käytännössä aina kun Apache asennetaan perusasetuksillaan, se sisällyttää PHP-moduulin, jolloin PHP:n ajaminen onnistuu. Jos halutaan tulosteeseen html-koodia mukaan, ne pitää lisätä tulosteeseen, vaikkapa näin: print ("<h1>otsikko, toteutettu php:llä</h1>\n"); print ("<p>kappaletekstiä, tämäkin php-koodissa toteutettuna</p>"); Huomaa rivinvaihtomerkki (\n) ensimmäisen print-rivin lopussa. Tällä tavoin saa htmlsivun lähdekoodiin aikaiseksi rivinvaihtoja. Ilman näitä koko html-koodi PHP:stä tulostettuna on samalla rivillä. Tarkkaavainen lukija ymmärtää varsin nopeasti, että koodin luettavuuden kannalta nämä ovat varsin hyödyllisiä lisäyksiä. Tosin tämän esimerkin tekee kätevästi myös heredoc:lla: echo <<<END <h1>otsikko, toteutettu php:llä</h1> <p>kappaletekstiä, tämäkin php-koodissa toteutettuna</p> END; Makuasioista voi kiistellä, kumpi tuntuu mukavammalta. Jälkimmäisessä ei edes tarvita erillisiä rivinvaihtomääreitä. Joka tapauksessa molemmat tavat on syytä hallita, joka paikassa ei voi heredoc:ia käyttää. 3(5)
HUOM! \n:llä ei tietenkään saa tehtyä rivinvaihtoa www-sivulle: print ("<p>kappaletekstiä,\n tämäkin php-koodissa toteutettuna</p>"); Tämä jakaa ainoastaan lähdekoodin kahdelle riville. Itse kappale näkyy yhtenä pötkönä. Jos sen rivinvaihdon haluaa www-sivuun, silloin on käytettävä html-kielen rivinvaihtoa, elikä <br>:ää (<br /> xhtml:ssä). Toinen esimerkki Hieman laajempi esimerkki. Mitä seuraava koodi tekee? <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>looppiesimerkki</title> </head> <body> <h1>taulukkoon rivejä php:llä</h1> <table border="1" cellspacing="0"> $riveja=4; for($i=1; $i<=$riveja; $i++) { print("<tr><td>tämä on rivin $i solu 1</td>\n"); echo ("<td>tämä on rivin $i solu 2</td></tr>\n"); } </table> </body> </html> 4(5)
Tehtäviä Tehtävät kuitataan suoritetuksi esittämällä toimivat vastaukset tunnin lopulla. Tehtäviä voi myös halutessaan ratkoa pienissä ryhmissä. 1. Toteuta ylläolevat esimerkit ja totea niiden toiminta. 2. Aiemmissa esimerkeissä oli esitetty yksi tapa liittää PHP-koodi www-dokumenttiin sekä yksi tulostuslause, print. Tutustu PHP-materiaaliin ja etsi muut tavat liittää PHPkoodi www-dokumenttiin sekä muut tulostuslauseet. 3. Mitä tekee funktio phpinfo()? 4. Seuraava esitys antaa päiväyksen muodossa 8.1.2014: $pvm=date("d.m.y"); echo $pvm; 5. Toteuta nyt seuraavat päiväyksen muodot: a) Sunday, 1. September 2010. b) Kello on: 13.59 (vihje: tutustu php.net-sivustoon) 6. Muuta taulukkoesimerkkiä siten, että voit määrittää muuttujalla myös rivin solujen lukumäärän. 7. PHP:n lainausmerkeillä ( " - lainausmerkki, ' - heittomerkki ) on käytännön eroja, miten ne käsittelevät muuttujia merkkijonoissa. Tutustu dokumentaation kautta tähän eroon ja samalla selvitä, miten mainittu "nowdoc" eroaa "heredoc"-ominaisuudesta. 8. Esimerkeissä on käytetty HTML 4.01 Transitional -koodausta. Sivustoilla voidaan kuitenkin käyttää xhtml-koodausta, jonka 1.0 strict -version tunnistetiedot koodin alussa ovat seuraavat: <?xml version="1.0" encoding="iso-8859-15" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="fi" xml:lang="fi"> Toteuta nyt ensimmäinen esimerkki siten, että vaihdat html-koodauksen xhtml:ksi. Esimerkissä ei tarvitse tehdä mitään muita konversioita kuin vaihtaa ylimmäinen rivi noihin tuossa esitettyihin. Luonnollisesti lopputuloksena on oltava toimiva www-sivu. 5(5)