PHP Trainer Kit Matt Zandstra
PHP Kirjoittajat Kääntäjä Kansi Kannen kuva Kustantaja Matt Zandstra Tmi S. Kolehmainen Frank Chaumont Frank Chaumont ja Santeri Salmi Oy Edita Ab IT Press PL 760 00043 EDITA Sähköpostiosoite Internet palvelu@itpress.fi www.itpress.fi Painopaikka Oy Edita Ab, Helsinki 2001 Authorized translation from the English language edition published by SAMS Publishing Copyright 2000 All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Finnish language edition published by IT Press Copyright 2001. Kaikki oikeudet pidätetään. Tämän julkaisun tai sen osan jäljentäminen ilman tekijän kirjallista lupaa painamalla, monistamalla, äänittämällä tai muulla tavoin on tekijänoikeuslain mukaisesti kielletty. Suomenkielisen version on julkaissut IT Press Copyright 2001. Alkuperäisen teoksen nimi on Teach Yourself PHP4 in 24 Hours ISBN 951-826-257-8
Sisällysluettelo 1 Sisällysluettelo -RKGDQWR 26$,$ORLWHWDDQ 233,7817,3+3.RWLVLYXVWDSRUWDDOLLQ Mikä PHP on?... 20 Kuinka PHP laajeni?... 20 Mitä uutta PHP4:ssä on... 21 Zend-moottori... 21 Miksi valita PHP?... 21 Kehittämisen nopeus...22 PHP on Open Source -tuote...22 Suorituskyky...22 Siirrettävyys...22 Yhteenveto... 22 K&V... 23 Työpaja... 23 Kysymyksiä...23 Toiminta...23 233,7817,3+3QDVHQWDPLQHQ Alustat, palvelimet, tietokannat ja PHP... 26 Mistä löydät PHP4:n ja lisätietoa... 26 PHP4:n asentaminen Linuxille ja Apachelle... 26 Joitakin configure-asetuksia... 27 --enable-track-vars...28 --with-gd...28 --with-mysql...28 Apachen kokoonpano... 29 php.ini... 29 short_open_tag...30 Virheilmoitussäännöt...30 Muuttujakohtaiset asetukset...31 Help!... 31 Yhteenveto... 32 K&V... 32 Työpaja... 32 Kysymyksiä...33 Toiminta...33
2 SIsällysluettelo 233,7817,(QVLPPlLQHQVNULSWL Ensimmäinen skriptimme... 36 PHP-ohjelmalohkojen alku ja loppu... 37 print()-funktio...38 HTML:n ja PHP:n yhdistäminen... 39 Kommenttien lisääminen PHP-koodiin... 40 Yhteenveto... 41 K&V... 41 Työpaja... 42 Kysymyksiä...42 Toiminta...42 26$,,.LHOL 233,7817,5DNHQQXVORKNRW Muuttujat... 46 Dynaamiset muuttujat...47 Viittaukset muuttujiin...49 Tietotyypit... 50 Tyypin muuttaminen funktiolla settype()...52 Tyypin muuntaminen pakkomuuntamalla...53 Operaattorit ja lausekkeet... 55 Sijoitusoperaattori...55 Aritmeettiset operaattorit...56 Liittämisoperaattori...56 Lisää sijoitusoperaattoreita...56 Vertailuoperaattorit...57 Monimutkaisempien testien luominen loogisten operaattoreiden avulla...58 Inkrementointi ja dekrementointi...59 Operaattoreiden prioriteetit...60 Vakiot... 61 Esimääritetyt vakiot...62 Yhteenveto... 62 K&V... 63 Työpaja... 63 Kysymyksiä...63 Toiminta...65 233,7817,2KMHOPDQNXONX Ohjelman kulun muuttaminen... 68 If-lause...68 Else-osan käyttö if-lauseessa...69 Elseif-osan käyttäminen if-lauseessa...70 Switch-rakenne... 72 Ehto-operaattorin käyttö... 73 Silmukat... 74 While-lause...74 Do-while-lause...75 For-lause...76 Silmukoista poistuminen break-lauseella...78 Koodin ohittaminen continue-lauseella...80 Sisäkkäiset silmukat...81 Yhteenveto... 82 K&V... 82
Sisällysluettelo 3 Työpaja... 82 Kysymyksiä...82 Toiminta...83 233,7817,)XQNWLRW Mikä funktio on?... 86 Funktion kutsuminen... 86 Funktion määrittely... 88 Dynaamiset funktiokutsut... 91 Muuttujien näkyvyysalue... 92 Muuttujien määrittely global-määreellä...93 Tilan tallentaminen funktiokutsujen välillä static-määreen avulla... 95 Lisää argumenteista... 97 Argumenttien oletusarvot...98 Muuttujaviittausten vienti funktioille...100 Yhteenveto... 102 K&V... 102 Työpaja... 103 Kysymyksiä...103 Toiminta...104 233,7817,7DXOXNRW Mikä on taulukko?... 106 Taulukoiden luonti... 106 Taulukoiden määrittely array()-funktiolla...106 Assosiatiiviset taulukot... 108 Assosiatiivisen taulukon määrittely array()-funktiolla...108 Assosiatiivisen taulukon suora määrittely tai kasvattaminen...109 Moniulotteiset taulukot... 109 Taulukoiden käsittely... 110 Taulukon koon selvittäminen...110 Taulukon läpikäynti silmukalla...111 Assosiatiivisen taulukon läpikäynti...112 Moniulotteisen taulukon tulostaminen...113 Taulukoiden manipulointi... 115 Kahden taulukon liittäminen array_merge()-funktiolla...115 Useiden arvojen sijoittaminen taulukkoon array_push()-funktiolla...116 Taulukon ensimmäisen alkion poistaminen array_shift()-funktiolla...117 Taulukoiden pilkkominen array_slice()-funktiolla...117 Taulukoiden lajittelu... 118 Numeerisesti indeksoitujen taulukoiden lajittelu sort()-funktiolla...118 Assosiatiivisen taulukon lajittelu asort()-funktiolla...119 Assosiatiivisen taulukon lajittelu avaimen mukaan ksort()-funktiolla...120 Yhteenveto... 120 K&V... 121 Työpaja... 121 Kysymyksiä...121 Toiminta...122 233,7817,2OLRW Mikä olio on?... 124 Olion luominen... 124 Olioiden ominaisuudet... 125 Olioiden metodit... 126 Esimerkki... 130
4 SIsällysluettelo Luokan ominaisuuksien määrittely...130 Muodostimen luominen...130 Metodi addrow()...130 Metodi addrowassocarray()...131 Metodi output()...132 Kaikki yhdessä...132 Mitä puuttuu?...135 Miksi luokka?...135 Periyttäminen... 135 Kantaluokan metodin korvaaminen...137 Korvatun metodin kutsuminen...138 Periyttäminen: Esimerkki... 140 HTMLTable-luokan ominaisuudet...140 Muodostimen luominen...140 Metodi setcellpadding()...141 Output()-metodi...141 Table- ja HTMLTable-luokat kokonaan...142 Miksi käyttää periyttämistä?...145 Yhteenveto... 146 K&V... 146 Työpaja... 146 Kysymyksiä...147 Toiminta...147 26$,,,3+3QNl\WW 233,7817,/RPDNNHLGHQNlVLWWHO\ Globaalit muuttujat ja ympäristömuuttujat... 152 Skripti, joka sieppaa käyttäjän syöttötiedon... 153 Monivalintaelementtien käsittely... 154 Kaikkien lomakekenttien käsittely assosiatiivisen taulukon kautta... 157 GET- ja POST-lähetysten erotteleminen... 159 HTML- ja PHP-koodin yhdistäminen yksittäisellä sivulla... 160 Piilokenttien käyttö tilan tallentamiseen... 162 Käyttäjän uudelleen ohjaaminen... 164 Tiedoston lataamiseen tarvittava lomake ja skripti... 167 Yhteenveto... 170 K&V... 170 Työpaja... 171 Kysymyksiä...171 Toiminta...171 233,7817,7LHGRVWRMHQNlVLWWHO\ Tiedoston sisällyttäminen include()-funktiolla... 174 Tiedostojen testaaminen... 177 Tiedoston olemassaolon testaaminen file_exists()-funktiolla...177 Tiedosto vai hakemisto?...178 Tiedoston tilan tarkistaminen...178 Tiedoston koon määrittäminen filesize()-funktiolla...179 Tiedostoa koskevan päivämäärätiedon selvittäminen...179 Funktio, joka suorittaa useita tiedostotestejä...180 Tiedostojen luominen ja tuhoaminen... 181 Tiedoston avaaminen kirjoittamista, lukemista tai lisäämistä varten... 182 Tiedostojen lukeminen... 183
Sisällysluettelo 5 Rivien lukeminen fgets()- ja feof()-funktioilla...183 Vaihtelevan tietomäärän lukeminen tiedostosta fread()-funktiolla...184 Merkkien lukeminen tiedostosta fgetc()-funktiolla...186 Tiedostoon kirjoittaminen ja lisääminen... 187 Tiedostoon kirjoittaminen fwrite()- tai fputs()-funktiolla...187 Tiedostojen lukitseminen flock()-funktiolla...188 Hakemistojen käsittely... 189 Hakemistojen luominen mkdir()-funktiolla...189 Hakemiston poistaminen rmdir()-funktiolla...189 Hakemiston avaaminen lukemista varten opendir()-funktiolla...189 Hakemiston sisällön lukeminen readdir()-funktiolla...190 Yhteenveto... 191 K&V... 191 Työpaja... 192 Kysymyksiä...192 Toiminta...192 233,7817,'%0IXQNWLRLGHQNl\WW DBM-tietokannan avaaminen... 194 Tiedon lisääminen tietokantaan... 194 Elementtien muuttaminen... 195 Tiedon lukeminen DBM-tietokannasta... 196 Kohteen olemassaolo tietokannassa... 198 Kohteen tuhoaminen tietokannasta... 198 Monimutkaisten tietorakenteiden lisääminen DBM-tietokantaan... 199 Esimerkki... 202 Yhteenveto... 208 K&V... 208 Työpaja... 208 Kysymyksiä...209 Toiminta...209 233,7817,0\64/WLHWRNDQQDQNl\WW Lyhyt SQL-johdanto... 212 Tietokantapalvelimeen kytkeytyminen... 213 Tietokannan valitseminen... 214 Virheistä selviytyminen... 214 Tiedon lisääminen taulukkoon... 215 Automaattisesti inkrementoidun kentän arvon saaminen... 219 Tiedon ottaminen esille... 219 Kyselyn antaman rivimäärän selvittäminen...219 Tulosjoukon käsittely...220 Tiedon muuttaminen... 223 Tietokantaa koskevan tiedon selvittäminen... 224 Tietokantojen luetteleminen...225 Tietokannan taulukoiden luetteleminen...226 Kenttien listaaminen ja tutkiminen...226 Tietokannan rakenne: kaikki yhdessä... 227 Yhteenveto... 230 K&V... 230 Työpaja... 231 Kysymyksiä...231 Toiminta...231 233,7817,3LQWDDV\YHPPlOWl
6 SIsällysluettelo Ympäristömuuttujat... 234 Lyhyt yhteenveto asiakas/palvelin-keskustelusta... 236 Pyyntö...236 Vastaus...237 Asiakirjan saaminen etäosoitteesta... 239 IP-osoitteiden ja isäntänimien muuntaminen... 240 Verkkoyhteyden toteuttaminen... 241 NNTP-yhteyden luominen fsockopen()-funktiolla...244 Sähköpostin lähettäminen mail()-funktiolla... 246 Yhteenveto... 247 K&V... 247 Työpaja... 248 Kysymyksiä...248 Toiminta...248 233,7817,'\QDDPLVWHQNXYLHQNlVLWWHO\ Kuvien luominen ja tulostaminen... 250 Värin toteuttaminen... 251 Viivojen piirtäminen... 251 Värillä täyttäminen... 252 Kaaren piirtäminen... 253 Suorakaiteen piirtäminen... 254 Monikulmion piirtäminen... 255 Värin tekeminen läpinäkyväksi... 256 Tekstin käsittely... 257 Merkkijonon kirjoittaminen imagettftext()-funktiolla...257 Tekstikoon testaaminen imagettfbox()-funktiolla...258 Kaikki yhdessä... 261 Yhteenveto... 266 K&V... 266 Työpaja... 267 Kysymyksiä...267 Toiminta...267 233,7817,3lLYlPllULHQNlVLWWHO\ Päivämäärän sieppaaminen time()-funktiolla... 270 Aikaleiman muuntaminen getdate()-funktiolla... 270 Aikaleiman muuntaminen date()-funktiolla... 271 Aikaleiman luominen mktime()-funktiolla... 273 Päivämäärän testaaminen checkdate()-funktiolla...274 Esimerkki... 274 Käyttäjän syöttämän tiedon tarkistaminen...274 HTML-lomakkeen luominen...275 Kalenteritaulukon luominen...277 Yhteenveto... 281 K&V... 281 Työpaja... 281 Kysymyksiä...281 Toiminta...281 233,7817,7LHGRQNlVLWWHO\ Tietotyyppien kertaaminen... 284 Palautamme mieliin tietotyypit...284 Monimutkaisten tyyppien muuntaminen...285
Sisällysluettelo 7 Tietotyyppien automaattinen muuntaminen...286 Tietotyyppien testaaminen...288 Muita keinoja tyypin muuttamiseen...288 Miksi tietotyypit ovat tärkeitä?...289 Läsnäolon tai tyhjyyden testaaminen... 291 Lisää taulukoista... 292 Vaihtoehtoinen tapa taulukon läpikäynnissä...292 Arvon olemassaolon tarkistaminen...293 Alkion poistaminen taulukosta...294 Funktion käyttäminen taulukon jokaisen alkio kohdalla...294 Mukautettu taulukoiden lajittelu... 295 Yhteenveto... 298 K&V... 299 Työpaja... 299 Kysymyksiä...299 Toiminta...299 233,7817,0HUNNLMRQRLOODW\ VNHQWHO\ Merkkijonojen muotoilu... 302 Muotoileva tulostus printf()-funktiolla...302 Tyypin määrittäjä printf()-funktiossa...302 Tulostustilan määrittäminen tilan määrittäjällä...304 Kentän leveyden määrittäminen...306 Tarkkuuden määrittely...307 Muunnosmäärittäjät: yhteenveto...307 Muotoillun merkkijonon tallentaminen...309 Merkkijonojen tutkiminen... 309 Huomautus merkkijonojen indeksoinnista...309 Merkkijonon pituuden selvittäminen strlen()-funktiolla...310 Osamerkkijonon etsiminen strstr()-funktiolla...310 Osamerkkijonon paikan löytäminen strpos()-funktiolla...311 Merkkijonon osan sieppaaminen substr()-funktiolla...311 Merkkijonon jäsentely strtok()-funktiolla...312 Merkkijonojen muokkaaminen... 313 Merkkijonon puhdistaminen trim()- ja ltrim()-funktioilla...313 Merkkijonon osan muuttaminen substr_replace()-funktiolla...314 Osamerkkijonon korvaaminen str_replace()-funktiolla...314 Isot ja pienet kirjaimet...315 Merkkijonon pilkkominen taulukoiksi explode()-funktiolla...316 Yhteenveto... 316 K&V... 316 Työpaja... 317 Kysymyksiä...317 Toiminta...317 233,7817,6llQQ OOLVWHQODXVHNNHLGHQNl\WWlPLQHQ POSIXin mukaiset säännölliset lausekkeet... 320 Kuvioiden vastineiden hakeminen ereg()-funktiolla...320 Merkkijonojen korvaaminen egrep_replace()-funktiolla...325 Merkkijonojen pilkkominen split()-funktiolla...326 Perl-yhteensopivat säännölliset lausekkeet... 327 Kuvioiden hakeminen preg_match()-funktiolla...327 Vasteiden etsiminen globaalisti preg_match_all()-funktiolla...329 Kuvioiden korvaaminen preg_replace()-funktiolla...332 Yhteenveto... 335 K&V... 335 Työpaja... 335
8 SIsällysluettelo Kysymyksiä...335 Toiminta...336 233,7817,7LODQWDOOHQWDPLQHQHYlVWHLGHQMDN\VHO\PHUNNLMRQRMHQDYXOOD Evästeet... 338 Evästeen anatomia...338 Evästeen asettaminen PHP:llä... 339 Evästeen tuhoaminen...341 Istuntoevästeiden luominen...341 Esimerkki sivuston käytön seuranta...341 Kyselymerkkijonojen käyttö... 348 Kyselymerkkijonon luominen...348 Yhteenveto... 351 K&V... 351 Työpaja... 351 Kysymyksiä...351 Toiminta...352 233,7817,7LODQWDOOHQWDPLQHQLVWXQWRIXQNWLRLOOD Mitä istuntofunktiot ovat?... 354 Istunnon aloittaminen session_start()-funktiolla... 354 Istuntomuuttujien käyttö... 355 Istunnon ID:n siirtäminen kyselymerkkijonossa... 361 Istuntomuuttujien koodaaminen... 362 Istuntomuuttujan rekisteröinnin tarkistaminen... 363 Yhteenveto... 363 K&V... 363 Työpaja... 364 Kysymyksiä...364 Toiminta...364 233,7817,3DOYHOLQ\PSlULVW Putkien avaaminen prosesseihin popen()-funktiolla... 366 Komentojen ajaminen exec()-funktiolla... 369 Ulkoisten komentojen ajaminen system()-funktiolla tai heittomerkkioperaattorilla... 370 Turvallisuusaukkojen tukkiminen escapeshellcmd()-funktiolla... 371 Ulkoisten sovellusten ajaminen passthru()-funktiolla... 373 Ulkoisen CGI-skriptin kutsuminen virtual()-funktion kautta... 374 Yhteenveto... 375 K&V... 375 Työpaja... 376 Kysymyksiä...376 Toiminta...376 233,7817,9LDQKDNX Tiedon saaminen PHP:stä ja skripteistäsi... 378 phpinfo()...378 PHP:n virheilmoitukset... 382 Virheilmoitusten kirjoittaminen lokitiedostoon... 385 Virheilmoituksen sieppaaminen...386 Manuaalinen vianhaku... 387 Yleiset virheet... 389 Yhteenveto... 391 K&V... 391
Sisällysluettelo 9 Työpaja... 391 Kysymyksiä...391 Toiminta...391 26$,9<KWHHQYHWR 233,7817,(VLPHUNNL2VD Lyhyesti... 396 Rakenne... 396 Tietokannan suunnittelu... 397 Suunnitteluvaihtoehdot... 399 Jäsenten ympäristö...399 join.php ja dblib.inc...399 membersmenu.php...412 login.php...413 updateevent.php...415 reviewevents.php...423 Yhteenveto... 427 K&V... 427 Työpaja... 427 Kysymyksiä...427 Toiminta...428 233,7817,(VLPHUNNL2VD Tapahtumapäiväkirjan julkiset näkymät... 430 viewevents.php...430 viewclubs.php...437 viewclub.php...440 viewevent.php...443 Tulevaisuus... 446 Yhteenveto... 446 K&V... 446 Työpaja... 447 Kysymyksiä...447 Toiminta...447 /,,7($9DVWDXNVHWN\V\P\NVLLQ TUNTI 1... 450 Kysymyksiä...450 TUNTI 2... 451 Kysymyksiä...451 TUNTI 3... 452 Kysymyksiä...452 TUNTI 4... 453 Kysymyksiä...453 TUNTI 5... 455 Kysymyksiä...455 TUNTI 6... 457 Kysymyksiä...457 TUNTI 7... 459 Kysymyksiä...459 TUNTI 8... 461 Kysymyksiä...461 TUNTI 9... 465
10 SIsällysluettelo Kysymyksiä...465 TUNTI 10... 467 Kysymyksiä...467 TUNTI 11... 469 Kysymyksiä...469 TUNTI 12... 470 Kysymyksiä...470 TUNTI 13... 472 Kysymyksiä...472 TUNTI 14... 474 Kysymyksiä...474 TUNTI 15... 476 Kysymyksiä...476 TUNTI 16... 477 Kysymyksiä...477 TUNTI 17... 479 Kysymyksiä...479 TUNTI 18... 481 Kysymyksiä...481 TUNTI 19... 483 Kysymyksiä...483 TUNTI 20... 484 Kysymyksiä...484 TUNTI 21... 485 Kysymyksiä...485 TUNTI 22... 487 Kysymyksiä...487 TUNTI 23... 488 Kysymyksiä...488 TUNTI 24... 489 Kysymyksiä...489 +$.(0,672
11 Kirjoittajasta Matt Zandstra (matt@corrosive.co.uk) vetää Corrosive Web Design -yritystä (http://www.corrosive.co.uk) yhdessä liikekumppaninsa Max Guglielminon kanssa. Hän on kehittänyt ohjelmistoja PHP:llä, Javalla, JavaScriptillä, Perlillä, Lingolla ja AppleScriptillä. Matt opiskeli alunperin filosofiaa ja on hankkinut muun osaamisensa keksimällä pyörän uudelleen ja ottamalla sitten selvää, miksi kaikki ei sujukaan oikein. Matt on opettanut HTML-, JavaScript-, Perl- ja PHP-kursseilla ja ollut ohjaavana toimittajana kirjan HTML Unleashed teossa. Silloin, kun Matt ei ole koodaamassa, hän pyöräilee kaupungissa, juo Guinnesia, lukee paljon ja kirjoittaa julkaisemattomia pikku kertomuksia. Hänellä on haaveena kirjoittaa joskus romaani.
12 Omistuskirjoitus Tämä kirja on omistettu isälleni. Hän olisi hyväksynyt sen. Kiitokset Täysin vapaa lähdekoodi -idea on mahdollistanut urani ja tämän kirjan. Haluaisin kiittää kaikkia niitä ihmisiä, joiden uraauurtavat ponnistelut edelleenkin lisäävät tietoa ja osaamista. Erityiskiitokset haluan antaa PHP-yhteisölle, erityisesti niille, jotka hoitavat sähköpostien lähetyslistoja; nuo sähköpostit paljastivat pullonkauloja, ehdottivat menettelytapoja ja virkistivät ajatuksiani. Macmillan-yrityksestä haluan kiittää Randi Rogersia, joka ehdotti minulle tätä projektia, sekä Jeff Schultzia, Paul Schneideria ja Scott Meyersiä tuesta ja kärsivällisyydestä, kun aikarajat alkoivat umpeutua ja paniikki tuli päälle. Kiitokset kuuluvat tietenkin myös kaikille Corrosiven työntekijöille asioiden hoitamisesta poissaolojeni aikana. Tahdon kiittää kollegoitani myös siitä, että he kestivät minua, vaikka en halunnut puhua mistään muusta kuin PHP:stä tuon projektin aikana. Erityiset kiitokset annan liikekumppanilleni Massimo Guglielminolle, joka piti yritystä pystyssä noissa stressaavissa olosuhteissa, sekä Dave Urmsonille, joka otti muotoilun hoitaakseen, kun tilanne meni vaikeaksi. Muita Corrosiven vaikuttajia ovat Anisa Swaffield, Jeff Coburn, Mai Chokelumlerd ja Moira Govern. Minun täytyy kiittää myös Small Planet -yritystä (http://www.smallpla.net) siitä, että he antoivat minulle ylimääräistä kehittämistilaa ja sallivat minun käyttää sitä betaohjelmiston kokeilemiseen. Erityiskiitokset annan Mohammed Abballe ja Clive Hillsille, joka käänsi PHP:n Small Planet - järjestelmässä useammin kuin haluamme kertoakaan. Yksi parhaimpia keinoja testata sitä, että kirjoitettu materiaali on sopivaa ja oikeaa, on käyttää sitä luokkahuoneessa. Kiitokset PHP-oppilailleni, jotka toimivat ystävällisesti koekaniineina. Kiitokset myös vaimolleni Louiselle ja tyttärellemme Hollylle siitä, että he olivat paikalla ja tukivat näkemäänsä synkkää ja sisäänpäin kääntynyttä hahmoa, jollaiseksi muutuin kirjan kirjoittamisen aikana. Sosiaalinen elämäni jäi PHP:n varjoon ja lähipiirini joutui usein koetukselle. Kiitokset Prince Arthur -pubin Alanille ja Doralle kaikesta. Lopuksi kiitokset kaloille, jotka piristivät tekijää.
Johdanto 13 Johdanto Tämä kirja käsittelee PHP:tä, joka on avoin Web-skriptauskieli. PHP:ssä yhdistyvät Perl, ASP ja Java kieleksi, jonka avulla voidaan luoda dynaamisia online-ympäristöjä. Tämä on myös ohjelmointikirja. Kirjan sivumäärä on kuitenkin rajallinen, eikä kirjaa voidakaan pitää täydellisenä PHPohjelmointioppaana: kaikkia PHP:n tarjoamia toimintoja ja tekniikoita ei voida kirjassa käsitellä. Jos olet kokenut ohjelmoija, joka harkitsee siirtymistä PHP-kieleen tai aivan aloitteleva skriptien tekijä, tämän kirjan myötä saat kuitenkin tarpeeksi tietoa ja pohjaa, josta voit sitten edetä itsenäisesti uusille alueille. Kenelle tämä kirja on tarkoitettu? Kirja alkaa perusperiaatteista ja antaa sinulle lopulta hyvät tiedot PHP4-ohjelmointikielestä. Aiempi ohjelmointikokemus ei ole välttämätön, mutta opiskeleminen on helpompaa, jos olet aiemmin tutustunut C- tai Perl-kieleen. PHP4 on Web-ohjelmointiin tarkoitettu kieli. Saadaksesi kirjasta mahdollisimman paljon irti sinun tulisi ymmärtää hieman World Wide Web -ympäristöä ja erityisesti HTML:ää. Vaikka olisitkin aivan aloittelija, voit silti käyttää tätä kirjaa, mutta sinun kannattaisi kuitenkin harkita HTML-käsikirjan hankkimista. Jos osaat luoda HTML-perusdokumentin ja kehittää HTML-taulukon, sinulla on riittävästi osaamista. PHP4 on suunniteltu myös tietokantojen käsittelyyn. Jotkin kirjan esimerkit toimivat MySQL:n kanssa. MySQL on SQL-tietokanta, jota on vapaasti saatavilla joillekin alustoille. Kirja sisältää lyhyen SQLosan, mutta jos aiot käyttää PHP4:ää tietokantojen yhteydessä, sinun kannattaa opiskella SQL-aihetta hieman syvemmin. Saatavilla on runsaasti online-tyyppisiä SQL-käsikirjoja. Jos aiot käyttää jotain muuta kuin MySQL-tietokantaa, voidaan useimmat kirjan esimerkit muokata suhteellisen helposti toimimaan muiden tietokantojen kanssa. Kuinka tämä kirja on organisoitu? Kirja jakaantuu neljään osaan: Osa 1 on johdanto PHP4-kieleen. Osa 2 käsittelee kielen peruspiirteitä. Kiinnitä huomiota erityisesti tähän jaksoon, jos olet aloitteleva ohjelmoija. Osa 3 käsittelee PHP4-kieltä yksityiskohtaisemmin ja siinä tutkitaan funktioita ja tekniikoita, joita ammattilaisohjelmoija tarvitsee. Osa 4 sisältää täydellisen sovellusesimerkin. Osa 1 sisältää oppitunnit 1-3 ja antaa neuvoja ensimmäisen skriptisi kehittämiseen ja ajamiseen. Oppitunti 1, PHP: kotisivusta portaaliin kuvaa PHP:n historiaa ja ominaisuuksia ja kertoo muutamia syitä, joiden takia kannattaa aloittaa tämän skriptikielen opiskelu. Oppitunti 2, PHP:n asentaminen, selittää, kuinka PHP asennetaan UNIX-järjestelmään ja käsittelee joitakin asetusvaihtoehtoja, joita voidaan käyttää PHP:tä skäännettäessä. Oppitunti 3, Ensimmäinen skriptisi, käsittelee eri keinoja upottaa PHP-skripti asiakirjaan ja luoda skripti, joka kirjoittaa tekstin käyttäjän selaimelle.
14 Johdanto Osa 2 sisältää oppitunnit 4-8. Tässä osassa opit tuntemaan PHP-kielen peruskomponentit. Oppitunti 4, Rakennuslohkot, käsittelee PHP:n perusteet. Opit tuntemaan muuttujat, tietotyypit, operaattorit ja lausekkeet. Oppitunti 5, Ohjelman kulku, käsittelee ohjelman kulkuun vaikuttavia rakenteita. If- ja switch-rakenteiden lisäksi tunnilla käsitellään for- ja while-silmukoita. Oppitunti 6, Funktiot, tutkii funktioiden käyttöä koodin organisointiin. Oppitunti 7, Taulukot, käsittelee taulukkomuotoista tietotyyppiä, johon voidaan tallentaa lukuisia arvoja. Tutkimme myös joitakin PHP:n omia funktioita, joilla taulukoita voidaan manipuloida. Oppitunti 8, Oliot, esittelee PHP4:n luokka- ja olio-ominaisuudet. Koko kurssin ajan rakennamme toimivaa esimerkkiä. Osa 3 sisältää oppitunnit 9-22. Tässä osassa paneudumme todella kielen ominaisuuksiin ja tekniikoihin. Oppitunti 9, Lomakkeiden käsittely esittelee mahdollisuuden syöttää tietoa sivulle HTML-lomakkeen kautta. Oppitunnilla opit keräämään käyttäjien tietoja lomakkeen avulla. Oppitunti 10, Tiedostojen käsittely opettaa paikallisella koneella olevien tiedostojen ja hakemistojen käsittelyä. Oppitunti 11, DBM-funktioiden käyttö, esittelee PHP4:n tuen DBMtietokantajärjestelmille, joita on saatavilla useimmille alustoille. Oppitunti 12, Tietokantojen integrointi ja MySQL, tarjoaa lyhyen johdannon SQLsyntaksiin ja esittelee PHP4-funktiot, joilla MySQL-tietokantoja voidaan käsitellä. Oppitunti 13, Pintaa syvemmältä, käsittelee joitakin HTTP-pyyntöihin liittyviä yksityiskohtia ja tutkii PHP-verkkofunktioita. Oppitunti 14, Dynaamisten kuvien käsittely, kertoo PHP:n kuvafunktioista. Niiden avulla voit luoda GIF- ja PNG-tiedostoja dynaamisesti. Oppitunti 15, Päivämäärien käsittely, käsittelee päivämäärien operointiin liittyviä funktioita ja tekniikoita. Oppitunti 16, Tiedon käsittely, palaa tietotyyppeihin ja käsittelee joitakin funktioita, joita voidaan käyttää tiedon käsittelyyn skripteissä. Luvussa käsitellään myös lisää taulukkofunktioita. Oppitunti 17, Merkkijonojen käsittely, käsittelee funktiot, joilla voidaan manipuloida merkkijonoja. Oppitunti 18, Säännölliset ilmaukset, esittelee funktiot, joilla käsitellään säännöllisiä ilmauksia, joita voidaan käyttää hakemaan ja korvaamaan monimutkaisia tekstikuvioita merkkijonoista. Oppitunti 19, Tilan tallentaminen cookies-tekniikalla ja kyselymerkkijonot, opettaa joitakin tekniikoita, joita käyttäen voidaan siirtää tietoa skriptien ja pyyntöjen välillä. Oppitunti 20, Tilan tallentaminen istuntofunktioilla, laajentaa luvussa 19 esitettyjä tekniikoita ja hyödyntää nyt PHP4:n sisäisiä istuntofunktioita. Oppitunti 21, Palvelinympäristön käsittely, näyttää, kuinka skripteistä käsin kutsutaan ulkoisia ohjelmia ja niiden tuotos yhdistetään omaan tulostukseen.
Johdanto 15 Oppitunti 22, Vianhaku, esittää joitakin tekniikoita, joilla voidaan jäljittää ohjelmissa ilmeneviä ongelmia. Luvussa käsitellään myös joitakin yleisiä virheitä. Osa 4 koostuu oppitunneista 23 ja 24. Niiden myötä rakennetaan toimiva esimerkki, joka yhdistää joitakin kirjassa esitettyjä tekniikoita. Oppitunnilla 23, Esimerkki (Osa 1), luodaan lyhyt kerhon listausskripti. Siinä muodostetaan koodi, joka sallii käyttäjien luoda tilejä ja syöttää listoja. Oppitunti 24, Esimerkki (Osa 2), päättää projektin; siinä muodostetaan koodi, jonka avulla muut kuin kerhon jäsenet voivat selata luetteloita ja katsella kerhon profiileita.
16 Johdanto