php & mysql webfejlesztoknek

650
PH P és MySQL® webfejlesztöknek Hogyan építsünk webáru házat? Lu ke Weiling Laura Thomsan

Upload: janos-marta

Post on 31-Oct-2014

198 views

Category:

Documents


13 download

DESCRIPTION

A könyv példákon keresztül dolgozza fel a PHP webprogramozási ismereteket a PHP, MySQL, apache telepítésétől egy dinamikus webáruház felépítéséig.

TRANSCRIPT

PH P s MySQLwebfejlesztknekHogyan ptsnk webru hzat?

Lu ke Weiling Laura Thomsan

PHP s MySQL webfejlesztknek - Hogyan ptsnk webcuhzat? 2010 Perfact-Pro Kft. Minden jog fenntartva!

ISBN 978-963-9929-13-5

A knyv eredeti cme: PHP and MySQL Web Development, 4th Edition A magyar kiadsrt felels a Perfact-Pro Kft. Authorized translation from the English Language edition, entided PHP and MySQL Web Development, 4th Edition 0672329166, by W ELLING, LUKE; T HOMSON, LAURA, published by Pearson Education, Inc. publishing as Addison Wesley Professional, Copyright 2009 Addison-Wesley. Ali rights reserverd. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, indudig photocopying, recording or by any information starage retrieval system, without pertnission from Pearson Education, Inc. HUNGARIAN language edition published by Perfact-Pro Kft., Copyright 2010 Perfact-Pro Kft.

Brmilyen msols, sokszorosts, illetve adatfeldolgoz rendszerben trtn trols a kiad elzetes rsbeli hozzjrulsa nlkl tilos. Az itt kzlt informcik kizrlag az olvas szemlyes hasznlatra kszltek. Jelen m felhasznlsa ms kny vekben, kereskedelmi szoftverekben, adatbzisokban csak a kiad elzetes rsbeli hozzjrulsval lehetsges. A szerz s a kiad a tle elvrhat legnagyobb gondossggal jrt el a knyv s a prograrnek ksztse sorn. A knyvben, illet ve a programokban tallhat esetleges hibkrt, hasznlatukbl ered esetleges krokrt sem a szerz, sem a kiad nem vllal semminem felelssget.

Fordtotta: Lnrt Szabolcs Szakmailag lektorlta: Kiss Klmn Nyelvileg lektorlta: Ksa Gyrgy Trdelte: Fontol Stdi

Felels kiad a Perfact-Pro Kft. gyvezet igazgatja l101 Budapest, Pongrc t 9/b. Tel: 260-0990 Fax: 431-0028 [email protected]

.perfactkiado.hu

Tarralern

III

Tartalom

Bevezets

Vltoz vltozkl l 2 2 2 3 4 5 5 6 6 7 7

21 21 22 22 23 23 23 25 26 26 27 28

Mirt rdemes elolvasni a knyvet? Mit tanulhatunk a knyvbl? Mi a PHP? Mi a MySQL? Mirt hasznljunk PHP-t s MySQL-t? A PHP legfbb erssgei Melyek a PHP 5 jdonsgai? A PHP 5.3 fbb jellemzi A MySQL legfbb erssgei Tmogats elrhetsge Melyek a MySQL 5 jdonsgai? Hogyan pl fel a knyv? VgezetlI. rsz A PHP hasznlata l. fejezet PHP gyorstalpal

llandk deklarlsa s hasznlata Vltozk hatkre Mveleti jelek hasznlata Aritmetikai mveleti jelek Karakterlncokon alkalmazhat mveleti jelek rtkad mveleti jelek sszehasonlt mveleti jelek Logikai mveleti jelek Bitmveleti jelek Egyb mveleti jelek Az rlap vgsszegnek kiszmtsa Mveletek elsbbsgi sorrendje s a csoportosthatsg Vltozkhoz kapcsold fggvnyek Vltozk tpusnak ellenrzse s belltsa

29 30 30 31 31 31 32 34 35 37 38 38 38

9

Vltozk llapotnak ellenrzse Vltozk tpuskonverzija Dntshozatal feltteles utastsokkal

ll ll 12 12 13 13 14 15 15 15 16 16 17 17 17 19 19 20 20 20 20 21

Kdblokkok A klnbz feltteles utastsok sszehasonltsa Mveletek ismtlse itercivalKiugrs vezrlsi szerkezetbl vagy kdbl

Kezds eltt: a PHP elrse Mintaalkalmazs ltrehozsa: Bob autalkatrszek Rendelsi rlap ltrehozsa Az rlap feldolgozsa PHP begyazsa HTML-be PHP cmkk PHP utastsok Fehrkz karakterek Megjegyzsek Dinamikus tartalom hozzadsa Fggvnyhvsok A da te ( ) fggvny hasznlata Az rlapvltozk elrse Rvid, kzepes s hossz vltozk Karakterlncok sszefzse Vltozk s literlok Az azonostk Vltoztpusok A PHP adattpusai Tpuserssg foka Tpusknyszerts

Alternatv vezrlsi szerkezetek alkalmazsa A dec l a re szerkezet hasznlata Hogyan tovbb?2. fejezet

Adatok trolsa s visszakeresse

39 39 39 40 40 40 41 42 43 44 44 44 45

Adatok elmentse ksbbi hasznlat cljbl Bob megrendelseinek el trolsa s visszakeresse Fjlok feldolgozsa Fjl megnyitsa A megfelel megnyitsi md kivlasztsaEijl megnyitsa az fopen() fggvnnyel

Fjlok megnyitsa FTP-n vagy HTTP-n keresztl Fjlmegnyitsi problmk kezelse Fjlba rs Az fwri te ( ) fggvny paramcerei Fjlformtumok Fjl bezrsa

IV

Tartalom

Olvass fjlbl Fjl megnyitsa olvassra: fopen () Ahol meg kell llnunk: feof()

47 48 48

Tmbn belli navigls: each(),current (),reset (),end(),next (),pos

( ) s p rev() fggvny

69

Fggvny alkalmazsa tmb minden egyes elemre: arra y_walk()

Beolvass soronknt: fgets() , fgetss() s fgetcsv ()48

69

Tmbelemek szmllsa: count(),sizeof () s array_count_values

A teljes fjl beolvassa: readfile(), fpassthru () s file() Karakter beolvassa: fgetc () Tetszleges mennyisg adat beolvassa: freact() Egyb hasznos fjlfggvnyek Fjl megltnek ellenrzse: file_exists () Fjlmret meghatrozsa: fil esi z e() Fjl trlse: unlink() Fjlon belli navigls: rewind(), fseek () s ftell ( )50 49 49 50 50 50 50 50 4.

()fggvny

70 70 71 71

Tmbk talaktsa skalris vltozkk: extract () Tovbbi olvasnival Hogyan tovbb?

fejezet73

Karakterlncok kezelse s regulris kifejezsekMintaalkalmazs ltrehozsa: intelligens zenetkld rlap Karakterlncok formzsa fggvny Karakterlncok formzsa megjelents cljbl Trolni kvnt karakterlncok formzsa: s stripslashes () fggvny

73 75

Fjlok zrolsa Egy jobb mdszer: adatbzis-kezel rendszerek Hogyan oldjk meg a relcis adatbzis-kezel rendszerek ezeket a problmkat? Tovbbi olvasnival Hogyan tovbb?3.

51 52

Karakterlncok megvgsa: tr im(),ltrim () s rtrim()75 75

Egyszer fjlok hasznlata esetn jelentkez problmk 5252 53 53

addslashes ()

78

Karakterlncok egyestse s felosztsa sztringkezel fggvnyekkel Az explode(),implode () s j oin ()fggvny hasznlata79

fejezet55 55 56 56 56 57 57 57 57 58 59 59 62 62

79 79 80 80

Tmbk hasznlataMit neveznk tmbnek? Numerikusan indexelt tmbk Numerikusan indexelt tmbk ltrehozsa Tmb tartalmnak elrse Tmbelemek elrse ciklusokkal Nem numerikusan indexelt tmbk Tmb inicializlsa Tmbelemek elrse Ciklusok hasznlata Tmbmveleti jelek Tbbdimenzis tmbk Tmbk rendezse A sort() fggvny hasznlata Tmbk rendezseasort () s ksort () fggvnyekkel Fordtott rendezs Tbbdimenzis tmbk rendezse Felhasznl ltal meghatrozott rendezs Fordtott sorrendbe trtn felhasznli rendezs Tmbk trendezse A shuffle ()fggvny hasznlata Az array_reverse ()fggvny hasznlata Tmbk feltltse fjlokbl Tovbbi tmbkezelsi eljrsok

Az strtok ()fggvny hasznlata A substr ( ) fggvny hasznlata Karakterlncok sszehasonltsa Karakterlncok sorba rendezse: strcmp(),strcasecmp ( )

s strnatcmp() fggvnyaz

80

Karakterlnc hossznak megllaptsa fggvnnyel

strlen ()

81

Rszsztringek keresse s cserje sztringkezel fggvnyekkel Karakterlncok keresse karakterlncban: strstr(),strchr (),strrchr stristr

81

( ) s82

() fggvny

Rszszering pozcijnak megkeresse: strpos () sstrrpos()

82

Rszsztringek cserje: str_replace ( ) s substr_62 63 63 63 64 64 65 66 66 68replace() fggvny

83 83 84 84 85 85 85 85 86 86

Ismerkeds a regulris kifejezsekkel Az alapok Karakterkszletek s -osztlyok Ismtlds Rszkifejezsek Szmolt rszkifejezsek Karakterlnc elejhez vagy vghez rgzts gaztats Literlis klnleges karakterekhez illeszts

Tartalom

v

A klnleges karakterek ttekintse Az eddig tanultak alkalmazsa az intelligens rlapban Rszsztringek keresse regulris kifejezsekkel Rszsztringek cserje regulris kifejezsekkel Karakterlncok sztbontsa regulris kifejezsekkel Tovbbi olvasnival Hogyan tovbb?5. fejezet

86 87 87 88 88 88 88

Osztlypldnyok ltrehozsa Osztlyattribtumok hasznlata Hozzfrs-szablyozs private s public kulcsszval Osztlymetdusok hvsa rklds megvalstsa PHP-ben Lthatsg szablyozsa rklds esetn a pr i vate s a proteeted kulcsszval Fellrs

110 110

112 112 113

113 114

Kd tbbszri felhasznlsa s fggvnyrs

89 89 89 89 90 90 90 91

rklds s fellrs megakadlyozsa a final kulcsszval A tbbszrs rklds Interfszek megvalstsa Osztlytervezs Az osztly kdjnak megrsa Halad objektumorientlt funkcik PHP-ben Osztlyon belli kanstansok hasznlata Statikus metdusok ltrehozsa Osztlytpus ellenrzse s tpusjelzs Ksi statikus ktsek Objektumok klnozsa Elvont osztlyok hasznlata Metdusok tbbszrs definilsa a -call() metdussal Az_autoleact {) fggvny hasznlata Itertorak s iterci ltrehozsa Osztlyaink talakitsa karakterlncokk A Reflection API hasznlata Hogyan tovbb?7. fejezet 115 116 116 117 117 124 124 124 125 125 126 126

Kd tbbszri felhasznlsnak elnyei Kltsg Megbzhatsg EgysgessgA require ( ) s az include () utasts hasznlata Fjlnvkitetjesztsek s a require {) utasts

A require {) urasrs hasznlata weboldalsablonokraAz auto_prepend_file s bellts hasznlataaz

auto_append_file 95 96 96 97

Fggvnyek hasznlata PHP-ben Fggvnyhvs Nem ltez fggvny hvsa Kis- s nagybetle megklnbztetse fggvnynevekben Sajt fggvnyek definilsa Fggvnyek alapszerkezete Fggvnyeink elnevezse Paramterek hasznlata A hatkr fogalma Cm s rtk szerinti paramtertads A return kulcssz hasznlata rtkvisszaads fggvnyekbl Rekurzi megvalstsa Nvterek Tovbbi olvasnival Hogyan tovbb?6. fejezet

97 97 98 98 99 100 102 103 103 104 105 105 106

126 127 127 129 129 130

Hiba- s kivtelkezels

131 131 132 133

Kivtelkezelsi fogalmak Az Exception osztly Felhasznl ltal meghatrozott kivtelek Kivtelek s a PHP tovbbi hibakezel mechanizmusai

Kivtelek Bob autalkatrsz-rtkest alkalmazsban 135138 138 138

Objektumorientlt PHP

107

Tovbbi olvasnival Hogyan tovbb?

Ismerkeds az objektumorientlt programozs fogalmaival Osztlyok s objektumok Tbbalaksg rklds Osztlyok, attribtumok s metdusok ltrehozsa PHP-ben Osztlyszerkezet Konstruktorok Destruktorok109 109 109 110 107 107 108 108

II. rsz A MySQL hasznlata 8. fejezet 139

Webes adatbzis megtervezse

141 141 141 142

Relcis adatbzissal kapcsolatos fogalmak Tblk Oszlopok

VI

Tartalom

Sorok rtkek Kulcsok Smk Kapcsolatok Webes adatbzis megtervezse Gondoljuk vgig a modellezett, vals vilgbeli objektumokat! Redundns adatok trolsnak elkerlse Atomi oszloprtkek hasznlata Vlasszunk rtelmes kulcsokat! Gondoljuk vgig, rnit szeretnnk az adatbzisbl megtudnil Kerljk a sok res tulajdonsgot tartalmaz kialaktst! Tblatpusok sszefoglalsa Webes adatbzis architektrja Tovbbi olvasnival Hogyan tovbb?9. fejezet

142 142 142 143 143 144 144 144 145 146 146 146 147 147 148 148

10. fejezet

Munkavgzs MySQL adatbzisunkkal

165

Mi az SQL? Adatok beszrsa adatbzisba Adatok visszakeresse adatbzisbl Adott feltteleknek megfelel adatok visszakeresse Adatok visszakeresse tbb tblzatbl Adatok visszakeresse meghatrozott sorrendben Adatok csoportostsa s sszestse V isszakapni kvnt sorok kivlasztsa Egymsba gyazott lekrdezsek hasznlata Adatbzisban lv rekordok frisstse Tblk megvltoztatsa ltrehozsuk utn Rekordok trlse adatbzisbl Tblk trlse Teljes adatbzis trlse Tovbbi olvasnival Hogyan tovbb?ll. fejezet

165 165 167 168 169 173 173 175 175 177 177 179 179 179 179 179

MySQL adatbzis elrse a webrl PHP-vel149

181

Webes adatbzis ltrehozsa

Hogyan mkdnek a webes adatbzis-architektrk? Adatbzis lekrdezse a webrl A felhasznltl rkez adatok ellenrzse s szrse Kapcsolat ltrehozsa A hasznlni kvnt adatbzis kivlasztsa Az adatbzis lekrdezse A lekrdezs eredmnyeinek visszakeresse Kapcsolat bontsa az adatbzissal j informci felvitele az adatbzisba Elfordtott utastsok hasznlata Egyb PHP adatbzis-illesztsek hasznlata Tovbbi olvasnival Hogyan tovbb?12. fejezet

181 184 184 184 185 185 186 187 187 189 190 192 192

A MySQL monitor hasznlata Bejelentkezs MySQL-be Adatbzisok s felhasznJk ltrehozsa Felhasznlk s jogosultsgok belltsa A MySQL jogosuJtsgi rendszernek bemutatsa A legkisebb jogosultsg elve Felhasznl belltsa: a GRANT parancs Jogosultsgok tpusai s szintjei A REVOKE parancs Pldk a GRANT s a REVOKE hasznlatra Webes felhasznl belltsa A megfelel adatbzis hasznlata Adatbzistblk ltrehozsa A tbbi kulcssz jelentsnek megismerse Az oszloptpusok Az adatbzis megtekintse a SHOW s a DESCRIBE paranccsal Indexek ltrehozsa MySQL azonostk Oszlopok adattpusainak kivlasztsa Numerikus tpusok Dtum s id tpusok Karakterlnc-tpusok Tovbbi olvasnival Hogyan tovbb?

150 150 151 151 151 151 151 152 154 154 155 155 156 157 157 159 159 160 160 160 162 162 164 164

Altalnos adatbzis-illeszts hasznlata: PEAR MDB2 190

Halad MySQL-adminisztrci

193

A jogosultsgi rendszer alaposabb megismerse A user tbla A db s a host tbla A tables_prv, a colurnns priv s a-

193 194 195 196 197 197 198 198

procs_priv tbla

Hozzfrs-szablyozs: Hogyan hasznlja a MySQL a jogosuJtsgi tblkat? Jogosultsgok frisstse: Mikor lpnek letbe a vltoztatsok? MySQL adatbzisunk biztonsgoss ttele MySQL az opercis rendszer szemszgbl

Tartalom

VII

Jelszavak Felhasznli jogosultsgok Webes krdsek Tovbbi informcik begyjtse az adatbzisokrl lnformciszerzs a SHOW utastssal A lekrdezsek mkdsnek megismerse az EXPLAIN utastssal Adatbzisunk optimalizlsa Optimlisra tervezs Jogosultsgok Tblaoptimalizls lndexek hasznlata Alaprtelmezett rtkek hasznlata Tovbbi tippek Biztonsgi ments ksztse MySQL adatbzisunkrl MySQL adatbzisunk helyrelltsa Replikci megvalstsa A master kiszolgl belltsa A kezdeti adattvitel megvalstsa A slave kiszolgl vagy kiszolglk belltsa Tovbbi olvasnival Hogyan tovbb? 13. fejezet Halad MySQL-programozs A LOAD DATA INFILE utasts Trolmotorok Tranzakcik Tranzakcik hasznlata InnoDB tblkkal Kls kulcsok Trolt eljrsok Alapplda Helyi vltozk Kurzorok s vezrlsi szerkezetek Tovbbi olvasnival Hogyan tovbb? III. rsz E-kereskedelem s biztonsg 14. fejezet E-kereskedelmi honlap zemeltetse Mi a clunk? Az zleti weboldalak tpusai Fontos informci kzzttelnek elmulasztsa Termkekre vagy szolgltatsokra irnyul rendelsek

198 198 199 199 199

felvtele Szolgltatsok vagy digitlis termkek rtkestse Tbbletrtk hozzadsa termkekhez vagy szolgltatsokhoz Kltsgcskkents Kockzatok s veszlyforrsok megismerse Crackerek A kvnt zleti eredmny elmaradsa Szmtgpes hardverhibk Elektromos, kommunikcis vagy hlzati hibk Ers verseny Szaftverhibk Vltoz szablyozsi krnyezet s adjogszablyok Rendszer-kapacitsbeli korltok A megfelel stratgia kivlasztsa Kvetkez lpsek 15. fejezet Az e-kereskedelem biztonsgi krdsei A birtokunkban lv informci fontossga Biztonsgi fenyegetsek Bizalmas adataink kitettsge Adatveszts vagy -rongls Adatmdosts Denial of Service tmads

223 226 226 227 227 227 228 228 228 228 228 229 229 229 229

lnformciszerzs oszlopokrl a DESCRIBE utastssal 201 201 205 205 205 205 205 205 205 206 206 206 207 207 208 208 208

231 231 232 232 233 234 234 235 235 236 236 237 238 239 239 239 240 240 241 242 242 242 242 242 243

209 209 209 210 210 211 212 212 214 214 217 217

Szaftverhibk Le tagads Hasznlhatsg, teljestmny, kltsg s biztonsg Biztonsgi hzirend ltrehozsa A felhasznli hitelests alapelvei A titkosts alapjai Privt kulcs titkosts Nyilvnos kulcs titkosts Digitlis alrsok Digitlis tanstvnyok Biztonsgos webszerverek Auditls s naplzs Tzfalak Biztonsgi ments ksztse az adatokrl Biztonsgi ments ksztse ltalnos fjlokrl

A tranzakcikkal kapcsolatos defincik megismerse 210

219

MySQL adatbzisunk biztonsgi mentse s helyrelltsa Fizikai biztonsg

221 221 221 222

Hogyan tovbb? 16. fejezet Webes alkalmazsok biztonsga Biztonsgkezelsi stratgik Megfelel gondolkodsmd mr a tervezstl

Cges informci megjelentse online katalgusknt 221

245 245 245

VIII

Tartalom

A biztonsg s a hasznlhatsg kztti egyensly keresse Biztonsgi felgyelet Alapvet megkzeltsnk A rnk vr fenyegetsek azonostsa Bizalmas adatok elrse vagy mdostsa Adatveszts vagy -rongls Denial of Service tmads Rosszindulat kd befecskendezse Feltrt szerver Kikkel llunk szemben? Crackerek Fertztt gpek tjkozatlan felhasznli Elgedetlen alkalmazottak Hardvertolvajok Sajt magunk Kdunk biztonsgoss ttele Felhasznl ltal bevitt rtkek szrse A kimenet rtkeinek szrse vdkarakterekkel Kdjaink szervezse Mi kerl a kdunkba? A fjlrendszerrel kapcsolatos, megfontoland szempontok A kd stabilitsa s kdhibk Vgrehajt opertor s azex ee

17. fejezet 245 246 246 246 246 247 247 247 248 248 248 248 248 248 248 249 249 252 253 254 254 255 18. fejezetBiztonsgos tranzakcik vgrehajtsa PHP-vel s MySQL-lel Hitelests megvalstsa PHP-vel s MySQL-lel

265 265 266 267 269 270 270 271

Ltogatk azonostsa Hozzfrs-szablyozs megvalstsa Jelszavak trolsa Jelszavak titkostsa Tbb oldal vdelme Alapszint hitelests hasznlata Alapszint hitelests PHP-ben Alapszint hitelests az Apache.

htaccess fjljaival 272 275 275 275 276 276 276

A mod_auth_mysql hitelests hasznlata Amod_auth_mysql modul teleptse A mod_auth_mysql modul hasznlata Egyni hitelestsi folyamat ltrehozsa Tovbbi olvasnival Hogyan tovbb?

277 277 278 278 279 280 282 282 283 283 283 285 289 289

Biztonsgos tranzakcik megteremtse A felhasznl gpe Az internet Sajt rendszernk A Secure Sockets Layer (SSL) protokoll hasznlata Felhasznli bevitel szrse Biztonsgos trols megvalstsa Hitelkrtyaadatok trolsa T itkosts hasznlata PHP-ben A GPG teleptse A GPG tesztelse Tovbbi olvasnival Hogyan tovbb? IV. rszHalad PHP-mdszerek

parancs

255 256 256 257 258 258 259 259 260 260 260 261 261 261 262 262 262 262 263 263 263

Webszervernk s a PHP biztonsgoss ttele Tartsuk szaftvereinket naprakszen! A php. ini fj l tartalma A webszerver konfigurlsa Webes alkalmazsok hasztolsa fizets szolgltats ignybevtelvel Az adatbzisszerverek biztonsga Felhasznlk s a jogosuJtsgi rendszer Adatklds a szerverre Kapcsolds a szerverhez A kiszolgl futtatsa A hlzat vdelme Tzfalak teleptse DMZ hasznlata Felkszls a DoS s DDoS tmadsokra Szmtgpnk s az opercis rendszer biztonsga Tartsuk naprakszen opercis rendszernket! Csak azt futtassuk, amire valban szksg van! Kiszolglnk fizikai biztonsga Katasztrfa -elhrtsi terv Hogyan tovbb?

291

19. fejezet A fjlrendszer s a kiszolgl elrse Fjlfeltlts A fjlfeltlts HT ML kdja A fjlt kezel PHP kd megrsa A gyakori feltltsi problmk megelzse Knyvtrfggvnyek hasznlata Olvass knyvtrakbl lnformciszerzs az aktulis knyvtrrl Knyvtrak ltrehozsa s trlse A fjlrendszer elrse Fjlinformcik gyjtse 293 293 294 295 298 298 298 301 301 302 302

Tartalom

IX

Fjltulajdonsgok mdostsa Fjlok ltrehozsa, trlse s thelyezse Programfuttat fggvnyek hasznlata Krnyezeti vltozk elrse: a getenv () s a putenv () fggvny Tovbbi olvasnival Hogyan tovbb? 20. fejezet Hlzati s protokollfggvnyek hasznlata A hasznlhat protokollok ttekintse E-mail kldse s olvassa Ms weboldalak tartalmnak felhasznlsa Hlzati keresfggvnyek hasznlata Biztonsgi ments ksztse vagy fjl tkrzse Biztonsgi ments ksztse vagy fjl tkrzse FTP-vel Fjlfeltlts Idtllps elkerlse Tovbbi FTP fggvnyek hasznlata Tovbbi olvasnival Hogyan tovbb? 21. fejezet Dtum s id kezelse Dtum s id megllaptsa PHP-bl A date ( ) fggvny hasznlata Unix-idblyegek kezelse A getdate () fggvny hasznlata Dtumok ellenrzse a checkdate ( ) fggvnnyel Idblyegek formzsa Vlts PHP s MySQL dtumformtumok kztt Szmols dtumokkal PHP-ben Szmols dtumokkal MySQL-ben Mkroszekundumok hasznlata Naptrfggvnyek hasznlata Tovbbi olvasnival Hogyan tovbb? 22. fejezet Kpek elllitsa Kpi tmogats belltsa PHP-ben Kpformtumok JPEG PNG WBMP GIF Kpek ltrehozsa Rajzvszon ltrehozsa

304 304 304 306 306 306

Rajzols vagy szveg rsa kpre Kimenet ksztse a ksz grafikrl Erforrsok felszabadtsa Automatikusan ltrehozott kpek hasznlata ms oldalakon Szveg s betk hasznlatval ltrehozott kpek A rajzvszon belltsa A szveg hozzigaztsa a gombhoz A szveg elhelyezse

334 335 335 336 336 338 339 341 341 341 342 348 348 348

307 307 307 308 310 313 313 318 318 318 319 319

A szveg gombra rsa Befejezs brk s grafikonadatok rajzolsa Tovbbi kpkezel fggvnyek hasznlata Tovbbi olvasnival Hogyan tovbb? 23. fejezet Munkamenet-vezrls PHP-ben Mi a munkamenet-vezrls? A munkamenet alapjai Mi a sti? Stik bellitsa PHP-bl Stik hasznlata munkamenetekkel Munkamenet-azonost trolsa

349 349 349 349 350 350 350 351 351 351 351 351 352 353 354 359 359

321 321 321 322 323 324 324 326 327 328 329 329 329 329

Egyszer munkamenetek megvalstsa Munkamenet indtsa Munkamenet- vltozk regisztrlsa Munkamenet-vltozk hasznlata Vltozk trlse s a munkamenet megszntetse Egyszer plda munkamenetre Munkamenet-vezrls konfigurlsa Hitelests munkamenet-vezrlssel Tovbbi olvasnival Hogyan tovbb? 24. fejezet Tovbbi hasznos lehetsgek PHP-ben Karakterlncok kirtkelse az ev al () fggvnnyel Vgrehajts lelltsa: die (} s exit (} Vltozk s objektumok szerializlsa

361 361 361 362 363 363 363 363 364 364 365 365

331 331 332 332 332 332 332 333 333

Informcigyjts a PHP-krnyezetrl Milyen bvitmnyek lettek betltve? A kd tulajdonosnak azonostsa A kd utols mdostsi idpontjnak megllaptsa A futtatsi krnyezet tmeneti mdostsa Forrskd szinkiemelse PHP hasznlata parancssorban Hogyan tovbb?

X

Tartalom

V. rsz Gyakorlati PHP s MySQL projektek fejlesztse 25. fejezet A PHP s a MySQL hasznlata nagyobb projektekben A szaftverfejleszts gyakorlatainak alkalmazsa webfejlesztsre Webes alkalmazs projektjnek tervezse s megvalstsa Kd tbbszri felhasznlsa Kezelhet kd rsa Programozsi szablyok Kdunk darabokra bontsa Egysges knyvtrstruktra hasznlata Fggvnyek dokumentlsa s megosztsa fejleszti csapaton bell Verzikvets megvalstsa A fejlesztkrnyezet kivlasztsa Projektjeink dokumentlsa Prototpuskszts A mkds s a tartalom sztvlasztsa Kdoptimalizls Egyszer optimalizcis lpsek Zend termkek hasznlata Tesztels Tovbbi olvasnival Hogyan tovbb? 26. fejezet Hibakeress Programozsi hibk Szintaktikai hibk Futsidej hibk Logikai hibk Hibakeress a vltozk tartalmnak kiratsval Hibajelentsi szintek A hibajelentsi belltsok mdostsa Sajt hibk kivltsa A hibakezels elegns mdja Hogyan tovbb? 27. fejezet Felhasznli hitelests megvalstsa s szemlyre szabott tartalom megjelentse A megolds alkotelemei Felhasznli azonosts s szemlyre szabs A knyvjelzk trolsa Knyvjelzk ajnlsa A megolds ttekintse 391 391 391 392 392 392 379 379 379 380 384 385 387 388 389 389 390 374 374 375 375 375 376 376 376 377 377 378 378 370 370 371 371 373 373 369 369 367

Az adatbzis ltrehozsa A nyitoldal ltrehozsa A felhasznli hitelests megvalstsa Felhasznlk regisztrlsa Bejelentkezs Kijelentkezs Jelszvltoztats Elfelejtett jelsz visszalltsa Knyvjelzk trolsa s visszakeresse Knyvjelzk hozzadsa Knyvjelzk megjelentse Knyvjelzk trlse Knyvjelzk ajnlsa A projekt tovbbfejlesztsnek lehetsges irnyai Hogyan tovbb? 28. fejezet Kosr funkci programozsa A megolds alkotelemei Online katalgus ltrehozsa A felhasznJk ltal vsrls kzben megrendelt termkek nyomon kvetse Fizetsi rendszer megvalstsa Adminisztrcis fellet programozsa A megolds ttekintse Az adatbzis ltrehozsa Az online katalgus ltrehozsa Kategrik listzsa Adott kategria knyveinek listzsa A knyv rszletes adatainak megjelentse A kosr funkci megvalstsa A kosar_megjelenitese.php kd hasznlata A kosr megjelentse Termkek hozzadsa a kosrhoz A mdostott tartalm kosr mentse A fejlcen lthat sszefoglal adatok megjelentse A pnztrnl A fizets feldolgozsa Az adminisztrcis fellet megvalstsa A projekt tovbbfejlesztse Meglv rendszer hasznlata Hogyan tovbb? 29. fejezet Webalap levelezszolgltats ltrehozsa A megolds alkotelemei Levelezprotokollok: a POP3 s az !MAP sszehasonltsa POP3 s !MAP tmogatsa PHP-ben

394 395 396 397 401 404 405 407 411 411 413 414 416 418 418

419 419 419 419 420 420 420 423 425 426 428 430 431 431 433 435 437 437 438 442 444 450 450 450

451 451 451 451

Tartalom

XI

A megolds ttekintse Az adatbzis ltrehozsa A kd architektrjnak vizsglata Be- s kijelentkezs Felhasznli fikok belltsa j felhasznli fik ltrehozsa Meglv felhasznli fik mdostsa Felhasznli fik trlse Levl olvassa Postafik kivlasztsa Postafik tartalmnak megtekintse Levlzenet olvassa zenetfejlcek megjelentse zenet trlse Levlklds j zenet kldse Vlaszklds vagy levl tovbbtsa A projekt tovbbfejlesztse Hogyan tovbb? 30. fejezetLevelezlista-kezel alkalmazs fejlesztse

452 454 455 460 462 463 464 464 465 465 467 469 472 472 473 473 474 476 476

31. fejezetWebes frum fejlesztse

517 517 517 518 519 521 523 525 526 530 532 538 538 538

Gondoljuk vgig a feladatot! A megolds alkotelemei A megolds ttekintse Az adatbzis megtervezse A hozzszlsok fanzetnek megtekintse Kibonts s sszecsuks A hozzszlsok megjelentse Acs

omopont osztly hasznlata

A hozzszlsok egyenknti megtekintse j hozzszls rsa A projekt tovbbfejlesztse Meglv rendszer hasznlata Hogyan tovbb? 32. fejezetPerszonalzlt PDF dokumentumok elllitsa

539 539 539 542 542 542 544 545 546 548 550 553 553 556 562 562 562

A projekt ttekintse Dokumentumformtumok sszehasonltsa A megolds alkotelemei

477 477

Vizsgztatrendszer A dokumentum-elllt szoftver A megolds ttekintse A tesztkrdsek lekrdezse A vlaszok rtkelse RTF formtum oklevl ltrehozsa PDF formtum oklevl ltrehozsa sablonbl PDF dokumentum elllitsa PDFlib fggvnyekkel "Hell, vilg!" kd PDFlib fggvnyekkel Az oklevl ellltsa PDFlib fggvnyekkel Fejlcekkel kapcsolatos problmk kezelse A projekt tovbbfejlesztse Hogyan tovbb? 33. fejezetKapcsolds az Amazon Web Services fellethez XML s SOAP segtsgvel

A megolds alkotelemei A levelezlistk s a feliratkozott felhasznJk adatbzisnak ltrehozsa Hrlevelek feltltse Csatolt llomnyokat tartalmaz levelek kldse A megolds ttekintse Az adatbzis ltrehozsa A kd architektrjnak meghatrozsa A bejelentkezs megvalstsa j felhasznli fik ltrehozsa Bejelentkezs Felhasznli funkcik megvalstsa Levelezlistk megtekintse Listainformcik megjelentse Levelezlistk archvumnak megtekintse Fel- s leiratkozs A felhasznli fik belltsainak megvltoztatsa Jelszavak megvltoztatsa Kijelentkezs Adminisztrtori funkcik megvalstsa j levelezlista ltrehozsa j hrlevl feltltse Egyszerre tbb fjl feltltsnek kezelse A hrlevl elnzetnek megtekintse A hrlevl kikldse A projekt tovbbfejlesztse Hogyan tovbb?

478 478 478 478 480 482 488 488 490 492 493 496 498 499 500 500 502 502 503 504 506 510 511 515 515

563

A projekt ttekintse: XML s a Web Services hasznlata Ismerkeds az XML-lel Web Services A megolds alkotelemei Az Amazon Web Services fellet hasznlata XML rtelmezse: REST vlaszok SOAP hasznlata PHP-vel Gyorsttrazs A megolds ttekintse Az alkalmazs magja 563 564 566 567 567 568 568 568 568 571

XII

Tartalom

Adott kategriban lv knyvek megjelemtse AmazonResultSet objektum lekrse Krs intzse s az eredmny visszakeresse REST segtsgvel Krs intzse s eredmny visszakeresse SOAP segtsgvel A krsbl szrmaz adatok gyorsttrazsa Vsrli kosr fejlesztse Fizets az Amazonnl A projekt kdjnak teleptse A projekt tovbbfejlesztse Tovbbi olvasnival34. fejezet Web 2.0-s alkalmazsok fejlesztse Ajax-programozssal

576 578 585

Ajax elemek hozzadsa a PHPbookmark alkalmazshoz Tovbbi informci Bvebben a Document Object Modelrl (DOM) JavaScript knyvtrak Ajax alkalmazsokhoz Ajax-fejleszti weboldalakA fggelk A PHP s a MySQL teleptse Az Apache, a PHP s a MySQL teleptse Unix alatt 621 621 622 622 626 626 627 628 628 629 630 631 632 609 618 618 618 619

591 592 594 597 597 598 598

Binris fjlok teleptse Forrs teleptse A httpd. conf fjl: kddarabok A PHP tmogats is mkdik? Az SSL mkdik?

599 599 600 600 601 601 602 602 602 602 604 605 606 609

Az Apache, a PHP s a MySQL teleptse Windows alatt A MySQL teleptse Windows alatt Az Apache teleptse Windows alatt A PHP teleptse Windows alatt A PEAR teleptse Egyb konfigurcik belltsaB fggelk Webes forrsok 633 633 634 634 635

Mi az Ajax? HTTP krsek s vlaszok DHTML sX HTML Cascading Style Sheets (CSS) Kliensoldali programozs Szerveroldali programozs XML sX SLT Ajax alapok Az XMLHTTPRequest objektum Kommunikci a szerverrel A kiszolgl vlasznak feldolgozsa Tegyk ssze az egszet! Ajax elemek hozzadsa korbbi projektjeinkhez

Forrsok a PHP-rl MySQL-lel s SQL-lel foglalkoz forrsok Forrsok az Apache-rl Webfejleszts

Tartalom

XIII

Szerzk Laura Thomson vezet szoftvermrnk a Mozilla CorporationnL Korbban az OmniTIs a Tangled Web Design egyik vezetjeknt tevkenykedett. Rendszeresen dolgozik egytt az RMI T Universiry-vel s a Boston Consuleing GrouppaLAl kalmazorc tudomnyokbl (informatika), illerve informatikai mrnki terleten szerzere egyetemi diplomt. Szabadidejben szvesen lovagol, rvel az ingyenes s nylt forrskd szoftverek mellett, s nagyon szeret aludni.

Luke Weiling webes fejleszt az OmniTI-nLA nylt forrskd s webes fejlesztsekkel foglalkoz konferencik, gy egyebek kzte az OSCON, a ZendCon, a MySQLUC, a PHPCon, az OSDC s a LinuxTag rendszeres eladja.Az OmniTI eltt a webes anatikval foglalkoz Hicwise.com-nl, az adatbzis-fejleszt MySQL AB-nl, illetve fggetlen tancsadknt a Tangled Web Designnl dolgozort.Alkalmazott tudomnyok (informatika) diplomt szerzerc, s informatikt oktatott a Mel bourne-i RMI T Universiry-n. Szabadidejben az lmadansgt prblja meg tklyre fejleszteni.

Trsszerzk Julie C. Meloni a Los Altos-i (Kalifornia) szkhely i2i I nteractive (www.i2ii.com) multimdis vllalat mszaki igazgatja.Az internet megszletse ta fejleszt webalap alkalmazsokat, s soha nem fogja elfelejteni az els grafikus kezelfellet bngszt vez izgalmakat. Szmos knyvec s cikket rt a webalap programozsi nyelvek s az adatbzisok tmakrben, amelyek kzl rdemes megemliteni a Sams Teach Yourself PHP. MySQL, and Apache Ali in One cm kiadvnyt.

Adam DeFields webes alkalmazsfejlesztsre s projektmenedzsmentre szakosodott tancsad.A Michigan llambeliGrand Rapidsben l, ahol 2002-ben alaptott sajt cgt irnytja (Emanation Syscems, LLC - www.emanationsyscemsllc. com). Szmtalan, klnbz technolgira pt webfejlesztsi projekeben rszt vere, de leginkbb a PHP /MySQL alap fej lesztsi munkkat kedveli.

Marc Wandschneider szabadsz fejleszt, szerz s elad, aki a vilg szmtalan klnbz pontjn dolgozott mr rdekesprojektekben. Utbbi vekben idejnek nagy rszt arra fordtja, hogy robusztus s sklzhat webes alkalmazsokat fejlesszen. 2005-ben rta Core Web Application Programming with PHP and MySQL cm knyvt. Korbban a SWiK (http:/ /swik.net) nylt forrs kzssgi oldal vezet fejlesztje volt. Marc jelenleg Pekingben l, ahol a knai nyelvet tri, s programoz.

KsznetnyilvntsSzeretnnk ksznetet mondani a Pearson csapatnak kemny munkjrt. Kln ksznjk Shelley Johnstonnak, akinek ldozatvllalsa s trelme nlkl a knyv els hrom kiadsa nem szlethecett volna meg. s Mark Tabernek, aki a negyedik kiadsnl tvette Shelley munkjt. Nagyra rtkeljk a PHP- s MySQL-fejleszti csapatok ltal vgzere munkt. Sok ve knnycik meg a dolgunkat, s gy lesz ez a jvben is rninden nap. Ksznjk az eSec-nl dolgoz Adrian Close-nak, arnirt mg 1998-ban azt mondta:.,Ezt meg tudjtok csinlni PHP-ben:' gy vlte, szeremi fogjuk a PHP-t, s azt kell mondanunk, igaza lett. Vgezetl szeretnnk ksznetet mondani csaldunknak s bartainknak, akik elviselik antiszocilis viselkedsnket, amg knyveinken dolgozunk. Kln ksznjk Nektek, hogy segtetek csaldtagjainknak: Julie, Robert, Martin, Lesley, Adam, Paul, Archer s Barton.

A magyar kiadshozA knyv pldinak forrskdja s a mellklecek letlthetk regisztrci utn a www.perfacrkiado.hu/melleklecek oldalrl. A knyvben hasznlt, jelenleg ingyenes szoftverek szintn letlthetek weboldalunkrl (www.perfacckiado.hu/melleklecek). rdemes azonban az interneten megkeresni ezen szoftverek frisstseit, jabb verziit s azokat hasznlni.

Segovia vzvezetke a rmai ptszet egyik legnagyszerbb, a mai napig meglv memlke. Traianus csszr uralkodsa alatt, az idszmtsunk szerinti els szzadban plt vezetk feladata az volt, hogy vizet szlltson a ma Sierra de Guadarrama n ven ismert hegy lbtl az onnan mintegy 18 kilomter tvolsgra lv hispniai vrosba, Segoviba. Az ptmnyt tbb mint hszezer, kzzel vgort grnittmbbl emeltk, s sem cementet, sem kapcsokat nem hasznltak a tmbk rgztsre. A vzvezetknek a vros kzppontjn thalad, 278 mrer hossz szakasza duplasoros boltvekkel rendel kezik, amelyek a fldtl 34 mrer magasan futva elegns kpet klcsnznek az urcknak. A termszet s az ember okozta viszontagsgoknak krezer ve ellenll ptmny az emberi gyessg idrlen pldja: a mai napig hozzjrul a vros vzellrshoz.

Bevezets

Kszntjk a PHP s

MYSQL webfejlesztknek cm kiadvnyunk olvasit! Knyvnk oldalaiba igyekeztnk belesrteni

a PHP s a MySQL- napjaink kt legelterjedtebb webfejleszt eszkznek- hasznlata sorn szerzett minden tudsunkat. A bevezetsben az albbiakrl lesz sz: Mirt rdemes elolvasni a knyvet? Mire lesznk kpesek a knyv segtsgve!? Mi a PHP s a MySQL,s mirt olyan nagyszerek? Mi vltozott a PHP s a MySQL legutols verziiban? Hogyan pl fel a knyv? Vgjunk bele!

Mirt rdemes elolvasni a knyveteKnyvnk megranrja, hogyan hozzunk ltre interaktv weboldalakat - legyen az a legegyszerbb rendelsi rlap vagy ssze tett, biztonsgos e-kereskedelmi portl,esetleg interaktv Web 2.0-s oldal. Radsul rnindezt nylt forrskd technolgik hasznlatval tanuljuk meg ellltani. A knyv azon olvasknak szl, akik legalbb a HTML alapjaival tisztban vannak,s korbban legalbb alapsznten prog ramoztak valamilyen modern programozsi nyelvben - mg ha az nem is felttlenl internetes programozs volt-,vagy dol goztak mr relcis adatbzissal. Kezd programozk is minden bizonnyal hasznosnak fogjk tallni a ktetet, de nekik kicsit tovbb tarthat az itt lertak megemsztse. Megprbltunk egyetlen alapfogalmat sem kihagyni,m viszonylag gyorsan vesszk t ket. A knyv azokat clozza meg, akik sszetett vagy zleti weboldal ltrehozsa szndkval kivnjk magas szinten elsa jttani a PHP-t s a MySQL-t. Amennyiben dolgoztunk mr ms webfejleszt nyelvvel,akkor a ktet olvassa sorn gyorsan kpbe kerlhetnk. A knyv els kiadst annak idejn azrt rtuk meg,mert elegnk volt abbl,hogy csak olyan PHP knyveket talltunk, amelyek fggvnyek referenciagyjtemnyeknt szolgltak. Az ilyen kiadvnyok is hasznosak,m nem sokat segtenek,amikor a fnk vagy az gyfl azt kri,hogy .. kszts nekem bevsrlkosaras online boltot': Ebben a knyvben minden tlnk telhett megrettnk, hogy hasznos pldkkal lljunk el. Szmtalan kd kszen ll arra, hogy az olvas sajt weboldaln azonnal alkal mazza azokat,rnig a tbbi aprbb mdostsok utn lesz hasznlhat.

Mit tanulhatunk a knyvbHHa elolvassuk,kpesek lesznk valban dinamikus weboldalakat pteni. Ha ksztettnk mr honlapokat egyszer HTML hasznlatval, minden bizonnyal beletkztnk mr ennek a megkzeltsnek a korltaival. A tisztn HTML weboldal stati kus tartalma pontosan ilyen - statikus. Amg fizikailag nem frissrjk,ugyanaz marad. Ltogati semmilyen interaktv mdon nem lphernek kapcsolatba az oldallal. Ha olyan nyelvet s adatbzist hasznlunk, mint a PHP, illerve a MySQL, dinamikuss, vagyis testre szabhatv s vals idej informcikban gazdagg tehetjk oldalainkat. A knyvben szndkosan hasznlunk - mg az alapoz fejezetekben is- a val vilgbl vett alkalmazsokat. Kezdskppen rteleintnk egy egyszer online rendelsi rendszert, s trgjuk magunkat a PHP s a MySQL klnbz terletein. Ezt kveten klnbz szempontok szerint megvizsgljuk az elektronikus kereskedelmet s ehhez kapcsoldan a bizton sgot, illerve azt, hogy miknt jnnek ezek el valdi weboldal elksztsekor. Azt is megmutatjuk,hogyan lehet az itt megfo galmazott elvrsokat PHP-ben s MySQL-ben megvalstani. A knyv utols rszben ttekintjk, hogyan rdemes kzelreni az igazi projektekhez,s vgigmegynk az albb felsorolt projektek elksztsi, tervezsi s megvalsrsi szakaszn: Felhasznlk hitelestse s szemlyre szabott tartalom a hitelests alapjn Bevsrlkosaras online bolt

2

B evezets

Webalap levelezalkalmazs Levelezlista-kezelk Online frumok PDF dokumentumok ellltsa Webszolgltatsok XML-lel s SOAP-pal Web 2.0-s alkalmazs ltrehozsa Ajaxszal Ezen projektek rnindegyike a knyvben megtallhat llapotban is mkdik, de termszetesen egyni ignyeinknek meg felelen mdosthatk. Azrt ezekre esett a vlasztsunk, mert meglrsunk szerint ezek tartoznak a programozk ltal leg gyakrabban fejlesztert webes alkalmazsok kz. A knyv ugyanakkor ezektl eltr ignyek esetn is nagy segtsget jelenther cljaink elrsben.

MiaPHPA PHP kifejezetten az internetre kifejlesztett, szerveroldali szkriptnyelv. A HTML oldalakba az oldal minden egyes megnyi tsakor lefut PHP kdot gyazhatunk. A PHP kd rtelmezse a webszerveren trtnik, ami a ltogat ltal megtekinthet HTML-t vagy egyb kimenetet hoz ltre. A PHP els verzija 1994-ben kszlt el, s eredetileg egyetlen ember, Rasmus Lerdorf munkja volt. Ms tehetsges emberek is elkezdtek dolgozni vele, s ngy jelents jrarson ment keresztl, amg elrkeztnk a jelenleg szles krben hasz nlhat, rett termkhez. 2007. jliusi adatok szerint vilgszerte tbb mint 21 milli domanre teleptertk, s ez a szm igen gyorsan n. (A PHP terjedsnek aktulis llst a http://www.php.net/usage.php oldalon tekinthetjk meg.) A PHP nylt forrskd projekt, ami azt jelenti, hogy brki hozzfrher a forrskdhoz, s ingyenesen hasznlhatja, mdo sthatja, illetve terjesztheti azt. A PHP erederileg a Personal Home Page (szemlyes honlap) rvidtse volt, de a GNU rekurzv rvidtsnek (GNU= Gnu's Not Unix, azaz a Gnu nem Unix) elfogadsval egytt ez is megvlrozort, s most a PHP Hypertext Preprocessor (PHP hiperszveg elfeldolgoz) kifejezs rvidtst jelenti. A PHP jelenlegi f vltozata az 5-s. Ezt a verzit a nyelv mgtt ll virtulis gp, a Zend motor teljes jrarsa, illetve a nyelv nhny jelents javtsa jellemzi. A PHP honlapja a htrp://www.php.net cmen rhet el. A Zend Technologies weboldala a http://www.zend.com.

MiaMySQUA MySQL egy nagyon gyors, srabil, relcis adatbzis-kezel rendszer (angol rvidtssel RDBMS). Az adatbzis lehetv teszi az adatok hatkony trolst, keresst, rendezst s kinyerst. A MySQL kiszolgl az adatokhoz val hozzfrst szablyozva biztostja, hogy egyidejleg tbben is hasznlhassk az adatokat, gyorsabb hozzfrst knl hozzjuk, s garan tlja, hogy csak a jogosult Felhasznlk szerezhetnek hozzfrst. Ezrt a MySQL rbbfelhasznls, tbbszl kiszolgl.Strukturlt lekrdez nyelvet (Structured Query Language- SQL), a szabvnyos adatbzis-lekrdez nyelvet hasznlja.

A MySQL 1996 ta elrhet a nyilvnossg szmra, de fejlesztsi trtnete 1979-ig nylik vissza. A vilg legnpszerbb nylt forrskd adatbzisa, amely szmtalan alkalommal elnyerte a Linux Journal szaklap "Readers' Choice Award" -jt (Ol vasink vlasztsa djt). A MySQL ketts licencelsi rendszerben rhet el. Amennyiben elfogadjuk a nylt forrskd licenc (a GPL) feltteleit, ingye nesen hasznlhatjuk. Ha MySQL-t tartalmaz nem GPL alkalmazst kvnunk terjeszteni, fizets licencet kell vsrolnunk. A MySQL honlapja a http://mysql.com cmen rhet el.

Mirt hasznljunk PHPt s MySQLtHa weboldalfejlesztsre adjuk a fejnket, szmralan termk kzl vlaszthatunk Az albbi kategrikban kell dntst hoznunk: A webszervert futtat hardver Opercis rendszer A webszerver szoftvere Adatbzis-kezel rendszer Programozsi vagy szkriptnyelv Az egyes vlasztsok sszefgghetnek egymssal. Pldul nem mindegyik opercis rendszer fut brmilyen hardveren, nem rninden webszerver tmogatja az sszes programozsi nyelvet stb.

Bevezets

3

Ebben a knyvben alig foglalkozunk a hardverrel, az opercis rendszerekkel vagy a webszerver szaftverveL Nincs r szk sgnk. A PHP s a MySQL egyik legnagyszerbb tulajdonsga, hogy minden f opercis rendszeren, st a kisebbek kzl is sok rendszeren hasznlhat. A PHP kdok nagy rsze megrhat gy, hogy opercis rendszerektl s webszerverektl fggetlenl futtathat legyen. Egyes PHP fggvnyek az opercis rendszertl fgg fjlrendszerhez ktdnek, m ezeket egyrtelmen megjellik a kzi knyvekben, s mi is jelezzk, amikor ilyennel dolgozunk. Akrmilyen hardvert, opercis rendszert s webszervert vlasszunk is, szeriotnk mindenkppen rdemes a PHP s a MySQL mellett dnteni.

A PHP legfbb erssgeiA PHP elsdleges versenytrsai a Perl, a Microsoft ASP.NET, a Ruby (Rails keretrendszeren vagy msknt), aJavaServer Pages (JSP) s a ColdFusion. Ezekkel sszehasonlrva a PHP-nak szmos erssge van, amelyek kzl a legfontosabbak: Teljestmny Sklzhatsg Csatlakozsi lehetsg (interfsz) szmtalan klnbz adatbzisrendszerhez Beptett knyvtrak a leggyakoribb webes feladatokhoz Alacsony kltsg Egyszer elsajtthatsg s hasznlhatsg Objektumorientlt programozs szles kr tmogatsa Hordozhatsg (platformfggetlensg) A fejleszti megkzelts rugalmassga Hozzfrhet forrskd Hozzfrhet tmogats s dokumentci Fejtsk ki ezeket az erssgeket kicsit bvebben is!

Teljestmny

A PHP nagyon gyors. Mg egyszer, olcs szervert hasznlva is tbb milli letltse szolglhatunk ki naponta. A Zend Technolo gies (http://www.zend.com) ltal publiklt sszehasonlt adatok alapjn a PHP nagyobb teljestmnyre kpes versenytrsainl.

Sklzhatsg

A PHP-Rasmus Lerdorf szavaival lve-.,megosztott elem nlkli" (shared-nothing) archicektrval rendelkezik. Ez azt jelenti, hogy hatkonyarr s olcsn, akr belp szint szerverekkel is lehet horizontlisan bvteni.

Adatbzis-integrci

A PHP szmos adatbzisrendszerhez tud natv mdon kapcsoldni. A MySQL-en tlmenen kzvetlenl kapcsoldhatunk egyebek kztt PostgreSQL, Oracle, dbm, FilePro, DB2, Hyperwave, lnformix, lnterBase s Sybase adatbzisokhoz. A PHP 5-s verzija SQLite nev, beptett SQL fellettel rendelkezik az egyszer fjlokhoz. Open Database Connectivity Standard (ODBC), vagyis nylt adatbzis-kapcsols hasznlatval brmilyen, ODBC driverrel rendelkez adatbzishoz kapcsoldhatunk. Sok egyb mellett a Microsoft-termkek tartoznak ide. A PHP-hoz a natv knyvtrak mellett PHP Database Objects (PDO), azaz egy PHP adatbzis-objektumok nev adatbzis absztrakcis rteg is tartozik, amely kvetkezetes hozzfrst tesz lehetv, s elsegti a biztonsgos programozsi megoldsok hasznlatt.

Beptett knyvtrak

Mivel a PHP-t interneten val hasznlatta alaktottk ki, szmtalan beptett fggvnnyel rendelkezik a klnfle, internettel kapcsolatos feladatok elvgzsre. Mindssze nhny sornyi kdra van szksg ahhoz, hogy menet kzben lltsunk el kpeket, webes vagy egyb hlzati szolgltatsokhoz kapcsol

A fenti kd

az

oldalnak radott vltozk ngy tmbjt jelenti meg. Ha az oldalt GET vltozkkal, POST vltozkkal,

stikkel hvtk meg, vagy rendelkezik munkamenet-vltozkkal, akkor azok kirdnak.A kimenetet HTML megjegyzsen bellre raktuk, hogy lthat legyen ugyan, de ne zavarja meg azt, ahogy a bngsz a lt

hat oldalelemeket megjelenti. A hibakeressi informcikat ily mdon rdemes ellltani. A hibakeressi informciknak a 26.1 pldakdhoz hasonlan megjegyzsekbe rejtse lehetv teszi, hogy akraz;

les mkds eltti utols percig az; alkal

mazsunkban hagyjuk a hibakeres kdot. A tomb _ kiiratasa () fggvnyt a print_r () trdelfggvnyeknt (wrapper) hasznlruk. A tomb_kiiratasa () fggvny egyszeren vdkarakterrel ltja el a HTML megjegyzs zr karaktereit.A konkrt kimenet az; oldalnak radott vltozktl fgg, de arnikor a 23. fejezet 23.4 pldakdjhoz hozz;adtuk,az;

albbi

sorokkal egsztette ki a kd ltal ellltott HTML-t:

26

POST

Lthatjuk, hogy a kd megjelenti az elz oldalon lv bejelentkezsi felletrl kldttfelhas znaloi _nev PHPSESSID.

vltozkat:

s j els z o. Megmutatja tovbb a felhasznl nevnek trolsra hasznlt munkamenet-vltozt is:

Ahogy arrl a 23. fejezetben sz volt, a PHP stik segtsgvel kapcsolja a munkamenet-vltozkat az adott fel

hasznlkhoz. A kd kirja a PHPSESSIO pszeud vleden szmot, ami a stiben, az adott felhasznl azonostsa rdekben troldik el.

Hibajelentsi szintekA PHP-nak megszabhatjuk, mennyire legyen akadkoskod a hibkkal. Megadhatjuk, hogy milyen tpus esemnyek generl janak hibazeneteket. Alaprtelmezsben a PHP az rtestseken (notice tpus figyelmeztetseken l kvl minden hibt jelez. A hibajelentsi szintet a 26.1 tblzatban lthat, elre meghatrozott kanstansok segtsgvel llthatjuk be. 26.1 tbla:

Hibajelentsi llandk NvE ERROR E_WARNING E PARSE E NOTICE E CORE ERROR E CORE WARNING E-COMPILE-ERROR E-COMPILE-WARNING E USER ERROR E USER WARNING E USER NOTICE E ALL

rtkl 2 4 8 16 32 64 128 256 512 1024 6143 2048

JelentseFutsidben jelenti a vgzetes hibkat. Futsidben jelenti a nem vgzetes hibkat. Jelenti az rtelmezsi hibkat. Jelenti az rtestseket, amelyek kzlik, hogy valami, amit tettnk, hibs lehet. Jelenti a PHP motor indtsakor keletkez hibkat. Jelenti a PHP motor indtsakor keletkez, nem vgzetes hibkat. Jelenti a fordtskor keletkez hibkat. Jelenti a fordtskor keletkez, nem vgzetes hibkat. Jelenti a felhasznl ltal kivltott hibkat. Jelenti a felhasznl ltal kivltott figyelmeztetseket. Jelenti a felhasznl ltal kivltott rtestseket. Mindent jelent az E_STRICT szinten jelentett hibkon s figyelmeztetseken kvl. Jelenti a kifogsolt s nem ajnlott viselkedst; nincsen benne az E_ALL szint ben, de nagyon hasznos a kd-jratervezshez (code refactoring). Vltoztatsokat javasol az interoperabili ts rdekben.

E STRICT

4096

E RECOVERABLE ERROR

Jelenti az elkaphat vgzetes hibkat.

Mindegyik konstans jelenthet vagy figyelmen kvl hagyhat hibatpust jell. Ha pldul az E_ ERROR hibaszintet lltjuk be, a PHP csak a vgzetes hibkat fogja jelenteni. Az llandkat binris aritmetikai mveletekkel kombinlva tovbbi hibaszin teket rhetnk el. Az alaprtelmezett hibaszintet, ami az rtestsek kivtelvel minden hibt jelent, a kvetkezkppen hatrozhatjuk meg: EALL&

-E NOTICE

Ez a kifejezs az elre meghatrozott llandk kzl kettt tartalmaz, s bitmveleti jelekkel kombinlja azokat. Az s jel

( & ) az S, a tilde ( - ) pedig a NEM bitmveleti jel. A kifejezs a kvetkezkppen olvasand: E_ALLszes tbbi szintet a VAGY bitmveleti jellelE_ERROR

S NEM E_NOTICE.

Az E_ALL nmagban is az sszes tbbi hibatpus kombincija (az E_ STRICT kivtelvel). Egyenrtk azzal, ha az sz

26

( l ) kombinljuk:E_NOTICE

l

E_WARNING

l

E_PARSE

l

l

E_CORE ERROR

l

E_CORE_WARNING

E_COMPILE_ERROR

IE_COMPILE_WARNING

l

E_USER_ERROR

l

E USER_WARNING

l

E

USER NOTICE

Hasonlkppen az alaprtelmezett hibajelentsi szint is meghatrozhat, ha az E _NOTICE kivtelvel az sszes hibaszintet VAGY-gyal kombinljuk:E_ERROR

l

E_WARNING

l

E_PARSE

l

E_CORE_ERROR

l

E_CORE_WARNING

l

E_COMPILE_ERROR

E COMPILE WARNING

l

E USER ERROR

l

E USER WARNING

l

E USER NOTICE

388

26. fejezet

A hibajelentsi belltsok mdostsaA hibajelentsi belltsokat globlis rvnnyel a php. ini fjlban adhatjuk meg. de kdonknt is meghatrozhatjuk ket. Ha az sszes kd esetben szeretnnk mdostani a hibajelentst, az alaprtelmezert php.ini fjl albbi ngy sort kell meg vltoztatni:error reporting display_errors log_errors track errors E ALL On Off Off&

-E NOTICE

Az alaprtelmezert globlis belltsok:

Jelents az rtestsek kivtelvel rninden hibrl Hibazenetek hozzadsa a normlis kimenethez HTML-knt A hibazenetek nincsenek lemezre naplzva A hibk nem lesznek kvetve, hanem a $php_errormsg vltozban eltrolva

Az ltalunk legnagyobb valsznsggel vgrehajtand vltoztats a hibajelentsi szint felemelse az E_ALL

l

E_ STRICT

szintre. A mdosts azt eredmnyezi, hogy a PHP szmtalan rtestst megjelent az olyan esetekben, amelyek hibra uralhat nak, vagy egyszeren csak abbl kvetkeznek, hogy a programoz kihasznlja a PHP gyengn tpusos jellegt. Illetve azt, hogy automatikusan O rtkkel hozza ltre a vltozkat. A hibakeress idejre hasznos lehet az error_reporting szint magasabbra lltsa. Ha sajt hibazenetekkel tjkoz tatjuk a felhasznlt, akkor az lesben mkd alkalmazson kapcsoljuk ki a display_errors belltst, kapcsoljuk be a log_errors-t, a hibajelentsi szintet pedig hagyjuk magasan! Ekkor brmilyen problma esetn a hibanaplkban talljuk a rszletesen kifejtert hibkat. A hibakvetssei kapcsolaros track_ errors bellts bekapcsolsa abban nyjthat segtsget, hogy sajt kdunkban fog lalkozzunk a hibkkal, ne a PHP alaprtelmezett szolgltatsaira hagyatkozzunk. A PHP ugyan hasznos hibazeneteket ad, alaprtelmezert mkdse azonban csnyn nzhet ki, ha a dolgok elromlanak. Vgzetes hiba esetn a PHP az
Error Type: error message in pathlfile.phpon line lineNumber
(Hiba tpusa:hibazenet az eleresi_utvonal/fajl.phpfjl sorSzama sorban
)szveget jelenti meg. s lelltja a kd futtatst. Nem vgzeres hibk esetn ugyanez a szveg jelenik meg. de a furtats foly tatdhat. Ez a HTML jl szrevehetv teszi a hibt, viszont nem nz ki tl meggyzen. A hibazenet stlusa a lehet legritkbb esetben illik az oldal tbbi rsznek megjelenshez. Radsul akr azt is eredmnyezheti, hogy egyes felhasznlk egyltaln nem ltnak az zenetbl semmit. Ez akkor fordulhat el, ha az oldal tartalma tblzaton bell jelenik meg. s bngszjk szigoran veszi, hogy csak szablyos HTML-t jelentsen meg. Egyes bngszk res kpernyknt jelentik meg a tblzat elemeit megnyit, de azokat be nem zr HTML-t, gy pldul a kvetkez kdot: Error Type: error message in path/file.phpon line lineNumber
Nem kell ragaszkodnunk a PHP alaprtelmezett hibakezelshez, s nem szksges rninden fjlhoz ugyanazokat a be26lltsokat hasznlni. Ha csak az aktulisan hasznlt kdban szeretnnk megvltoztaeni a hibajelentsi szintet, az error_reporting () fggvnyt meghvva tehetjk ezt meg.Paramterknt hibajelentsi llandr vagy azok kombincijt tadva ugyangy llthatjuk be a hibajelentsi szintet, rnint a php.ini ugyanilyen nev direktvjban. A fggvny visszatrsi rtke az elz hibajelentsi szint lesz. A fggvny hasz nlatnak gyakori mdja a kvetkez:ll hibajelents kikapcsolsa $elozo_szint=error_reporting(O);ll ide kerl a figyelmeztetseket elllt kd ll hibajelents visszakapcsolsa error reporting($elozo_szint);Hibakeress389Ez a kdrszlee kikapcsolja a hibajelentsr, gy olyan kdot is futtarharunk, amely egybknt j esllyel nem kivnt figyel meztetseker generlna a kpernyre. A hibajelents vgleges kikapcsolsa nem ajnlott, mert megnehezti a programozsi hibk felkutatsr s kijavtst.Sajt hibk kivltsaA trigger_error ( ) fggvnyt sajt hibink kivltsra hasznlhatjuk. Az gy ltrehozott hibkat ugyangy kezeli a PHP, mint a ha gyomnyos hibkat. A fggvny hibazenetet vr, s opcionlisan hibarpust is megadhatunk neki. A hibatpus az E_USER_ERROR, azE_USER_ WARNING vagy az E_USER_NOTICE valamelyike lehet. Ha nem adjuk meg, az E_USER_NOTICE lesz az alaprtelmezen tpus.A trigger_error () fggvnyt a kvetkezkppen hasznlhatj uk:trigger_error('A szmtgp 15msodpercen bell megsemmisti nmagt', E USER_WARNING);A hibakezels elegns mdjaAki C++ vagy Java tern szerzett tapasztalatokkal rkezett a PHP vilgba, az bizonyra jl ismeri a kivtelek hasznlatr. A kivtelek lehetv teszik a fggvnyeknek, hogy jelezzk a hiba bekvetkeztt, majd hagyjk, hogy kivtelkezel foglalkozzon a hibval. A kivtelek kivl mdszert jelentenek nagy projektek hibinak a kezelsre. Rszletesen bemutattuk ket a Hiba- s kivtelkezels cm 7. fejezetben, gy itt s most nem foglalkozunk velk. Mr lttuk, hogyan vltsuk ki sajt hibinkat. Ezen tlmenen sajt hibakezelket is alkalmazharunk a hibk elkapsra. A set_error_handler () fggvnyben olyan fggvnyt adharunk meg, amit felhasznlszint hibk, figyelmeztetsek s rtestsek bekvetkezsekor kell meghvni. A set_error_handler() fggvnyt a hibakezelknt hasznlni kivnt fgg vny nevvel kell meghvni. Hibakezel fggvnynknek kt paramtert kell fogadni: a hiba tpusr s a hibazenetet. A fggvnynek e kt vltoz alap jn el kell tudni dntenie, hogyan kezelj e a hibt. A hibatpusnak a meghatrozon hibatpus-konstansok valamelyiknek kell lennie. A hibazenet a hibt ler karakterlnc A set_error_handler () fggvny meghvsa pldul a kvetkezkppen nzhet ki:set_error_handler('sajat_hibakezelo');Mivel a sa jat_hibakezelo() fggvny meghvsra utasrottuk a PHP-t, meg kell adnunk az ilyen nev fggvnyt. En nek a fggvnynek az albbi a prototpusa:sajat_hibakezelo(int hibatipus, string hibauzenet[,string hibas fajl[,int hibas_sor[,array hibakornyezet]]]))Hogy pontosan mit csinl a fggvny, az mr tlnk fgg. A kezelfggvnynek radott paramterek a kvetkezk: A hiba tpusa A hibazenet A fjl, amelyben a hiba trtnt A sor, amelyben a hiba trtnt A szimblumrbla - vagyis az sszes vltoz s azok rtke a hiba bekvetkezsnek idejben A kezelfggvny lehetsges mveletei az albbiak lehetnek: A megadon hibazenet megjelentse Informci eitraisa a naplfjlban A hiba elkldse e-mailben a megadott cmre A kd befejezse A 26.2 pldakdban hibakezelr deklarlunk, a set_error_handler () fggvnnyel belltjuk a hibakezelt, majd hibkar generlunk. 26.2 pldakd: kezelo.php-A kd egyni hibakezelt deklarl, s klnfle hibkat llt elE_USER_WARNING);15msodpercen bell megsemmistinmagt',E_USER_ERROR);A kd eredmnyt a 26.1 brn lchaguk. Ez az egyni hibakezel szinte semmivel nem tbb a PHP alaprtelmezett viselkedsnL Mivel azonban mi rtuk a kdjt, brmit beprogramozhacunk. Eldnthetjk, hogy mit mondjunk sk meg az informcit gy, hogy illeszkedjenaz azoldal ltogatinak, ha valami balul sl el, s hogyan jelentoldal tbbi rszhez. Ami ennl is fontosabb: mi dnthetjk el, hogy mi trtnjen. Folytatdjk a kd? Naplzzuk vagy megjelentsk a hibazenetet? Automatikusan riasszuk a mszaki tmogatst?T-....'1. .l lo'-""-- " __l iiii\-r;;:.;..,)r.lodiOts- l"""ktklll l6'-,n tijd;.- loQIYDill;a-..-..,a-.BJB.t:baW......, """" '..J J JK)llk.tJI"'*"""F26.1 bra: Sajt hibakezel hasznlatval a PHP hibazeneteinl bartsgosabbakat adhatunk Jelhasznlinknak.Fontos megjegyezni, hogy hibakezelnknek nem feladata mindenfle hibatpussal foglalkozni. Bizonyos hibk, gy az r telmezsi s a vgzetes futsidej hibk tovbbra is az alaprtelmezett hibakezelsi mkdst fogjk kiknyszerteni. Ha sze reennk ezt elkerlni, akkor mieltt tadnnk a paramtereket a vgzetes hibt kivltani kpes fggvnynek, gondoskodjunk alapos ellenrzskrl, s vltsuk ki sajt E_USER_ERROR szint hibnkat, ha a paramterek hibt okoznak! Vgezetl egy hasznos funkci: ha hibakezetnk explicit false rckkel tr vissza, a PHP beptett hibakezelje lesz meg26hvva. gy mi magunk kezelhegkazE_USER_*hibkat, a hagyomnyos hibkat pedig meghagyhatjuk a beptett kezelnek.Hogyan tovbb?A Felhasznli hitelests megvalstsa s szemlyre szabott tartalom megjelentse cm 27. fejezetben elkezdjk els projektnket. Megvizsgljuk, milyen mdszerrel azonosthag uk szabni oldalunk tartalmr.azoldalunkra visszatr felhasznlkat, s hogyan tudjuk szmukra testre27 Felhasznli hitelests megvalstsa s szemlyre szabott tartalom megjelentseEbben a projektben rvesszk a felhasznlkat, hogy regisztrljanak weboldalunkon. Ha ezt megteszik, nyomon kvethetjk, hogy mi rdekli ket, majd ennek megfelelen a szmukra rdekes tartalmat jelentjk meg. Vagyis nem tesznk mst, mint a felhasznli ignyeknek megfelel, szemlyre szabott tartalmat knlunk ltogatinknak. Projektnk lehetsget ad a felhasznlknak, hogy internetes knyvjelzk gyjtemnyt lltsk ssze, s a korbban elmen rett hivatkozsaik alapjn vlheten ket rdekl tovbbi hivatkozsokat ajnlunk figyelmkbe. A szemlyre szabs szinte br milyen webalap alkalmazsban lehetv teszi, hogy a felhasznlk ltal ignyelt tartalmat az ltaluk elvrt formban jelentsk meg nekik. Knyvnk V. rszben minden projektet, gy a jelenlegit is azzal kezdjk, hogy vgiggondoljuk a projekt kvetelmnyeit, amelyek hasonlak azokhoz az elvrsokhoz, amiket valdi gyfeleink trnasztannak. Ezen kvetelmnyek alapjn megtervez zk a megolds alkotelemeit s azok egymshoz val kapcsolatt, vgl pedig megvalstjuk az egyes komponenseket. A jelenlegi projektben az albbi funkcikat kell ltrehozni: Bejelentkezs s felhasznlk hitelestseJelszavak kezelse Felhasznli preferencik feljegyzse Tartalom szemlyre szabsa Tartalom ajnlsa a felhasznlrl megszerzett informcik alapjnA megolds alkotelemeiProjektnk sorn feladatunk egy online knyvjelzkezel rendszer prototpusnak elksztse lesz, amit nevezznk PHPbookmarknak! Alkalmazsunk hasonl lesz a http://www.backRip.com oldalon elrhet BackRiphez, termszetesen azonban annl korltozottabb funkcikat knl majd. A rendszernek lehetv kell tennie a felhasznlknak a bejelentkezst s szemlyes knyvjelzik eltrolst, majd szemlyes preferenciik alapjn ket rdekl tovbbi weboldalakat kell :Ynlania szmukra. A megolds alkotelemei hrom fbb kategriba sorolhatk: Be kell tudnunk azonostani az egyes felhasznlkat, illetve valamilyen mdszerrel hitelestennk is kell ket. El kell tudnunk trolni az egyes felhasznlk knyvjelzi t. A felhasznlknak lehetv kell tenni, hogy knyvjelzket vegyenek fel s trljenek. Az alapjn, amit mr megtudtunk a felhasznlkrl, kpesnek kell lennnk ket rdekl weboldalakat ajnlani szmukra. Most, hogy mr tisztban vagyunk a projekt lnyegvel, elkezdhetjk megtervezni a megoldst s annak alkotelemei t. Nz zk meg az elbb emltett hrom f elvrs lehetsges megoldsait!Felhasznli azonosts s szemlyre szabsSzmos lehetsg knlkozik a felhasznli hitelestsre, ahogy ezt a knyv korbbi rszben mr lttuk. Mivel szemlyre sza bott tartalmat szetetnnk knlni a ltogatknak, felhasznli azonostikat egy MySQL adatbzisban troljuk el, hogy azok segtsgvel ellenrizhessk ket.39227. fejezetHa szeremnk, hogy felhasznlink bejelenckezhessenek felhasznli nevkkel s jelszavukkal, a kvetkez alkotelemekre lesz szksgnk: A felhasznlknak lehetv kell tenni, hogy regisztrls sorn megadjk felhasznli nevket s jelszavukat. Valamilyen formban korltoznunk kell az egyes felhasznli nevek s jelszavak hosszt s formtumt. Biztonsgi okokbl titkost va kell trolnunk a jelszavakat. A felhasznlknak be kell tudniuk jelentkezni a regisztrci sorn megadott azonostkkal. Az oldal hasznlatnak befejezse utn a felhasznlknak ki kell tudniuk jelentkezni. Ennek a funkcinak nincs kl nsebb jelentsge, ha az emberek otthoni szmtgpkrl hasznljk az oldalt, tbb felhasznl ltal megosztott PC esetben azonban igen foncos szerepet jtszik biztonsgi tren. Az oldalnak el kell tudni dntenie, hogy egy adott felhasznl be van-e jelentkezve, s hozz kell frnie a bejelentkezett Felhasznlk adataihoz. A biztonsg nvelse rdekben garantlni kell a felhasznlknak a jelszavuk megvltoztatsnak lehetsgc. Lehetv kell tenni, hogy a Felhasznlk szemlyes kzremkdsnk nlkl j jelszt kaphassanak. Ezt leginkbb gy szek tk megoldani, hogy a regisztrci sorn megadott e-mail cmre elkldik a felhasznlnak a jelszt. Ebbl kvetkezik, hogy a regisztrcikor el kell trolnunk a Felhasznlk e-mail cmt. Mivel titkostott formban troljuk a jelszavakat, s az eredeti jelszavakat ebbl nem tudjuk visszalltani, lnyegben j jelszt kell generlni, belltani s elkldeni a felhasznlnak. A projekt megvalstshoz fggvnyeket fogunk rni minden egyes funkcihoz. A fggvnyek tbbsgc ms projektjeink ben is fel tudjuk majd hasznlni - igaz, ehhez esetenknt apr mdostsokra lehet majd szksg.Aknyvjelzk trolsaA Felhasznlk visszakereshetik s megtekinehetik knyvjelziket. A Felhasznlk j knyvjelzket adhatnak a meglvkhz. Az oldalnak ellenriznie kell, vajon rvnyes URL-eket adnak-e meg. A Felhasznlk trilierik knyvjelziket. Ezeket a lehetsgeket is fggvnyek megrsval fogjuk megteremteni.A Felhasznlk knyvjelzinek is helyet kell adnunk MySQL adatbzisunkban. Az albbi funkcikat kell megvalstanunk:Knyvjelzk ajnlsaTbbfle megkzeltst alkalmazhatunk arra, hogyan ajnljunk knyvjelzket a felhasznlknak. Figyelmkbe ajnlhatnnk pldul a legnpszerbb vagy egy adott tmn bell legnpszerbb oldalakat. Ebben a projektben azonban azt a megoldst vlasztj uk, hogy olyan felhasznlkat keresnk, akiknek a bejelentkezett felhasznlval egyez knyvjelzjk van, s ezeknek a felhasznlknak a tovbbi knyvjelzit ajnljuk a bejelentkezett felhasznlnak. A szemlyes jelleg knyvjelzk tovbbajn lsnak elkerlse rdekben csak olyan knyvjelzket fogunk ajnlani, amiket egynl tbb felhasznl trole el. Ezt a funkcit is fggvnyrssal fogjuk megvalstani.A megolds ttekintseFirklgattunk egy kicsit a szalvtnkra, gy kaptuk a 27.1 brn lthat, a projektet brzol folyamatbrt.2727.1 bra: APHPbookmark rendszer funkcii.Felhasznli hitelests megvalstsa s szemlyre szabon tartalom megjelentse393Az brn lthat mindegyik tglalaphoz egy-egy modult fejleszthetnk; van kztk, amelyikhez egy, van, amelyikhez kt kdot kell rni. Az albbi terletekhez fggvnyknyvtrakat is ltrehozhatunk: Felhasznli hitelests Knyvjelzk trolsa s visszakeresse Adatellenrzs Adatbzishoz csatlakozs Kimenet megjelentse bngszben. A teljes HTML-ellltst erre a fggvnyknyvtrra korltozzuk, hogy egysges megjelentst adjunk a teljes oldalnak. (Ez a megkzelts ismt csak a mkds s a tartalom elklntst szolglja.) A rendszerhez ezen kvl mg egy olyan adatbzist is ltre kell hozni, amely az adatok feldolgozst fogja vgezni. A megoldst alkot kdokat nem teljes kren mutatjuk be, de az alkalmazs sszes kdja megcallhatawww.perfactkiado.hu/mellekletek oldalrl letlthet mellkletek27_ fej e zetknyvtrban. A beillesztett fjloksszefoglalst a 27 .l tblzat tartalmazza.27.1tblzat: A PHPbookmark alkalmazsfjijai LersAz alkalmazs adatbzist ltrehoz SQL kd Nyitoldali bejelentkezsi fellet a rendszerhez Regisztrcis rlap a felhasznlknak Az j regisztrcikat feldolgoz kd Elfelejten jelsz esetn kitltend rlap a felhasznlknak Az elfelejten jelszt visszallt kd A felhasznl sajt oldala, ahol aktulis knyvjelzit lthatja j knyvjelzk hozzadsra szolgl rlap Az j knyvjelzket az adatbzishoz hozzad kd A kijellt knyvjelzket a felhasznl listjbl trl kd A felhasznlknak a hasonl rdeklds trsaik knyvjelzit ajnl kd A regisztrlt felhasznlk ltal a jelszvltoztatshoz kitltend rlap A felhasznl jelszavt az adatbzisban megvltoztat kd A felhasznlt az alkalmazsbl kilptet kd A knyvjelzkezelssei kapcsolatos fggvnyknyvtr A felhasznl ltal bevin adatokat ellenrz fggvnyek Az adatbzishoz kapcsoldsra hasznlt fggvnyek A felhasznli hitelests fggvnyei Knyvjelzk hozzadshoz s trlshez, illetve ajnlshoz szk sges fggvnyek A kimenetet HTML-knt formz fggvnyek A PHPbookmark alkalmazs logjaFjlnvkonyvjelzok.sql bejelentkezes.php regisztracios_urlap.php regisztracio_uj.php elfelejtett_urlap.php elfelejtett_jelszo.php tag.php kj_hozzaadasa_urlap.php kj_hozzaadasa.php kj_torlese.php ajanlas.phpjelszo_valtoztatas_urlap.phpjelszo_valtoztatas.php kijelentkezes.php konyvjelzo_fuggvenyek.php adat_ellenorzo_fuggvenyek.php adatbazis fuggvenyek.php felhasznaloi_hitelesites_fuggvenyek.php url fuggvenyek.phpkirneneti_fuggvenyek.php konyvjelzo.gifLegelszr is az alkalmazs MySQL adatbzist hozzuk ltre, mert erre gyakorlatilag minden ms funkci mkdshez szksg lesz. Ezt kveten abban a sorrendben haladunk a kddal, ahogy azt eredetileg megirtk, gy a nyitoldal utn kvetkezik a fel hasznli hitelests, majd a knyvjelzk trolsa s visszakeresse, s legvgl azok ajnlsa. Ez a sorrend radsul viszonylag logikus is; az egsz abbl addik, hogy vgiggondoljuk, hogyan plnek egymsra a komponensek, majd elszr azokat az ele meket hozzuk ltre, amelyekre a ksbbi medulokhoz szksg lesz.Megjegyzs: Az alkalmazs hibtlan megjelentshez javaScriptet tmogat bngszre van szksg.2739427.fezetAz adatbzis ltrehozsaA PHPbookmark adatbzis igen egyszer felptssel rendelkezik. El kell trolni a felhasznlkat, illetve azok e-mail cmt s jelszavt. Trolnunk kell tovbb a knyvjelzk URL-jt.Egy felhasznlnak tbb knyvjelzje is lehet,s tbb felhasznl is elmentheti ugyanazt a knyvjelzt. Mindezek miatt kt tblra lesz szksgnk: fe lhasznalo s konyvjelzo ( 27 .2 bra).user username laura luke passwd 7cbf26201 e73c9b 1fef10690eeb2e59 email [email protected] [email protected] laura laurabm_URL http://slashdot.org http://php.net27.2 bra: A PHPbookmark rendszer adatbzissmja.A felhasznala tbla a felhasznlk felhasznli nevt (ez az elsdleges kulcs),jelszavt s e-mail cmt trolja. A konyvjelz tblba felhasznli nv s knyvjelz (kj_URL) prok kerlnek. Az ebben a tblban lv felhasznli nv a felhasznal o tbla felhasznli nevre hivatkozik. Az adatbzist, illetve az adatbzishoz az internetrl csatlakoz felhasznlt ltrehoz SQL kdot a 27.1 pldakd tartal mazza. Ha sajt rendszernkn kvnjuk hasznlni,mdostanunk kell ezt a fjlt. Ne felejtsk el a felhasznl jelszavt bizton sgosabbra cserlni!27.1 pldakd: konyjelzok. sql -A knyvjelzk adatbzist ltrehoz SQL fjlCREATE DATABASE konyvjelzok; USE konyvjelzok;CREATE TABLE felhasznala felhasznaloi_nev VARCHAR(16) NOT NULL PRIMARY jlsz CHAR(40) NOT NULL, email VARCHAR(100) NOT NULL ); KEY,CREATE TABLE konyvjelzo ( felhasznaloi_nev VARCHAR(l6) NOT NULL, kj_URL VARCHAR(255) NOT NULL, INDEX (felhasznaloi_nev), INDEX (kj_URL), PRIMARY ); KEY(felhasznaloi nev, kj_URL)GRANT SELECT,INSERT,UPDATE,DELETEON konyvjelzok.* TO kj felhasznalo@localhost IDENTIFIED BY 'jelszo';Az adatbzist gy tudjuk ltrehozni rendszernkn, ha root MySQL-felhasznlknt lefuttatjuk a fenti parancsokat.A k27vetkez paranccsal tehetjk ezt meg rendszernk parancssorbl:mysql-uroot-p body li, hr a{ font-family: Arial,tdHelvetica,sans-serif; font-size: l3px l sans-serif; font-size: l3px{font-family:Arial,Helvetica,{ {color:#3333cc; width=300px; text-align:leftlcolor: #000000 l PHPbookmark Megint csak egy nagyon egyszer kdot lrunk, ami semmi mst nem tesz, mint fggvnyeket hv meg a kimeneti_fuggvenyek. php fjlban lv fggvnyknyvtrbL A 27.4 brn a kd ltal ltrehozott kimenetet lthatjuk.Az oldalon lv szrke rlap a kimeneti_ fuggvenyek.php fjlban tallhat regisztracios _urlap_megjelenitese () fggvny eredmnye. Amikor a felhasznl a"Regisztrls" gombra kattint, a 27.6 pldakdban lv regisztracio_uj .phpkdhoz jut.27.4 bra: A regisztrcisrlap az adatbzisba kerl Jelhasznli adatokat gyjti be.Az elgpelst elkerlend ktszer kell a jelszt azrlapba bevinni.27.6 pldakd: regisztracio_uj. php-A kd ellenrzi az j Jelhasznlk adatait, majd eltroija ket az adatbzisbaEz a kd szintn ismersnek hathat. Ennekaz azoka, hogy a fenti sorok a 23. fejezetben rt kdra plnek.JelszvltoztatsHa a felhasznl a men Jelszvltoztats hivatkozsra kattint, a 27.7 brn lthat rlap jelenik meg bngszjben.1{_EN ....----. o" ....:-;;.;.;.;..;...;:;.;:..;::-=:._.: t::JlPHPbookmarkJelsz megvaltozutoisa .. - ....... _. . Ir.:. ....,l!iaalllll -----l2727.7 bra: A jelsze_valtoztatas_urlap. phpfjl ltal ellltott rlapon a jelszavukat vltoztathaljk meg a felhasznlk.40627. fejezetAz rlapot a jelszo_valtoztatas_urlap.php kd lltja el. Ez nyeit hasznlja fel, gy rszleeesebben mosc nem foglalkozunk vele.azegyszer kd pusztn a kimeneti knyvtr fggvAz rlap elkldsvel a 27.15 pldakdban lthat jelszo_valtoztatas. php kdot hvjuk meg.27.15 pldakd: jelszo_valtoztatas.php-A'Science',Wine',27=>'Travel',16272=>'Science Fiction' ); ?>Az alkalmazst gy hoztuk ltre, hogy REST tvitellel s SOAP protokollal egyarnt hasznlhat legyen. A kt mdszer kzte gy vlaszthatunk, hogy a megfelel rtket lltjuk be a METHOD llandban. A CACHE konstans az Amazonrl letlttt adatok gyorsttrnak elrsi tvonalt trolja. Adjuk meg irt a rendszernkn hasznlni kvnt elrsi tvonalat! Az ASSOCIATEID lland Amazon partnerazonostnkat tartalmazza. Ha a tranzakcikkal egytt ezt is elkldjk az Amazonnak, jutalkot kaphatunk. Ne felejtsk el a kdba berni sajt partnerazonostnkat lKapcsolds az Amazon Web Services fellethez XML s SOAP segtsgvel575A EVTAG konstans az Amazon ltal regisztrcinkkor adott fejleszti token rtkt trolja. Mdostsuk a kdot sajt D tokennk rtknek megfelelen, klnben az alkalmazs nem fog mkdni! Tokene gy ignyelhetnk, ha regsztrlunk az http:/ /aws.amazon.com oldalon. Trjnk most vissza az index. php fjlhoz! A kd az elkszletek utn a f esemnyhurkot tartalmazza. Azzal indul, hogy kinyerjk a$_REQ ST szupergloblis vltozha GET vagy POST mdszerrel rkez vltozkat. Ezt kveten bellt U E juk egyes globlis vltozk rtkr; ezek a vltozk fogjk a ksbbiekben meghatrozni a megjelenirend tartalmat:ll alaprtelmezett rtkek a globlis vltozknakif($mode==''){ ll Semmilyen ms mddal nem foglalkozunk a pldban$mode = 'Books';if($browseNode==' ') $browseNode = 53; if($page==' )'//az53a legjobban fogy ismeretterjeszt knyv kategrija$page = l;//Els oldal - oldalanknt 10 ttelA mode vltoz rtkt Books-ra lltjuk. Az Amazon tbb ms mdot (vagyis termktpust) tmogat, de ebben az alkal mazsban csak a knyvekkel foglalkozunk. A fejezet kdjt egyszeren mdosthatnnk gy, hogy ms termkkategrikat is kezelni tudjon. Ennek els lpse a $mode vltoz rtknek megvltoztatsa lenne. Ellenriznnk kellene az Amazon dokumentcijban, hogy a knyvtl eltr termkek esetn rnilyen ms attribtumokat kapunk vissza, s el kellene tvoltani a felhasznli felletrl a knyvspecifikus elemeket. A browseNode vltoz hatrozza meg a megjelenteni kvnt knyvka tegrikat. A vltoz rtkt bellthatja a felhasznl, amikor a kvlasztott kategrik valamelyik hivatkozsra kattint. Mi magunk 53-ra lltjuk a vltoz alaprtelmezett rtkr, hogy kezelni tudjuk az olyan helyzeteket, arnikor a felhasznl mg nem vlasztott kategrit - pldul, mert mg csak most nyitotta meg weboldalunkat. Az Amazon bngszsi csompontjai egyszer egsz szmok, amelyek egy-egy kategrit azonostanak. Az 53-as rtk a Non-Fiction Books, vagyis az ismeretter jeszt kategrit jelkpezi. Ez legalbb annyira alkalmas a nyitoldalon val megjelentsre, mint brmely msik kategria, hiszen a taln legjobb ltalnos kategrik (kztk pldul a sikerlists knyvek) nem rhetk el bngszsi csompontknt. A page vltoz kzli az Amazonnal, hogy az adott kategrin bell a tallatok mely rszhalmazt kvnjuk megjelenteni. Az l. oldal az 1-10. tallatokat, a 2. oldal a 11-20. tallatokat tartalmazza, s gy tovbb. Az egy oldalon megjeleniehet kny vek szmt az Amazon hatrozza meg, ezt az rtket nem ll mdunkban megvltoztatni. Azt termszetesen megrehetnnk, hogy oldalainkon kt vagy tbb Amazon oldalnyi adatot jelentnk meg, de az oldalanknt tz knyv egyrszt sszer mennyi sg, msrszt felesleges lenne megnehezteni sajt dolgunkat. Ezt kveten megtiszttjuk az esetlegesen a keressi mezben vagy a ET vagy POST paramter ltal kapott beviteli rtkeket: Gll beviteli adat ellenrzse/megtiszttsaif(!eregi('A[A-Z0-9] +$',$ASIN))33ll az ASIN alfanumerikus kell, hogy legyen$ASIN =''; if(!eregi('A[a-z]+$', $mode = 'Books'; // az oldalaknak s a bngszsi csompontoknak $mode)){ll a md csak betkbl llhat$page=intval($page); $browseNodell egsznek kell lennik=intval($browseNode);llEls pillantsra taln kevss rthet, ll de az albbi kdrsz pusztn arrl szl, ll hogy a $search vltozt megszabadtjuk a nem kvn rtkektl$search = safeString($search);Semmi jdonsg nincsen a fenti kdrszletben. AsafeString () fggvnyt a utilityfunctions. php fjlban tall juk. Egyszeren az a feladata, hogy regulris kifejezs segtsgvel eltvoltsa a beviteli karakterlncokbl a nem alfanumerikus karaktereket. Mivel ezzel a tmval korbban mr rszletesen foglalkoztunk, a fggvny kdjt itt s most nem kzljk. A legfbb oka annak, hogy alkalmazsunkban ellenriznnk kell a felhasznl ltal bevitt szveget, az, hogy az ilyen bevitele a gyorsttrban hasznlt fjlnevek ltrehozsra fogjuk felhasznlni. Komoly problmkba futhatnnk bele, ha a felhasznlk .. vagy l karaktert hasznlhatnnak az ltaluk bevitt adatokban.57633. fejezetHa a vsrl mg nem rendelkezik kosrral, akkor most ltrehozzuk neki:if {!isset{$ SESSION ['eart' J)) session_register{'cart'); $ SESSION['cart'] = array{);{Mg mindig vr rnk nhny feladat, mieltt megjelenthetnnk az oldal tetejn lv informcis svban szerepl adatokat (a 33.1 brra visszalapozva felidzhetjk, hogyan nz ki ez a sv). Minden oldal fels svjban megjelenik a kosr, ezrt fontos, hogy az informcis sv megjelentse eltt naprakssz tegyk a kosr vltozjt:ll a fels sv megjelenitse eltt vgrehajtand feladatok if{$action == 'addtocart') { addToCart{$ SESSION['cart'], if{$action == 'deletefromcart') $ASIN, $mode);{$ASIN);deleteFromCart{$ SESSION['cart'], if{$action == 'emptycart') $ SESSION['cart']{= array{);Ezzel a kddal szksg esetn knyveket adhatunk a kosrhoz, illetve trlhetnk belle, mieltt megjelentennk azt. Ksbb mg visszatrnk ezekre a fggvnyekre, amikor a kosr s a fizets mkdst mutatjuk be. Ha szeretnnk most meg vizsglni, a cartfunctions.php fjlban talljuk ket. Egyelre azonban nem foglalkozunk velk, mert elszr az Amazon hoz kapcsold felletet kell megrtennk. Ezt kveten beillesztjk a topbar. php fjlt, ami HTML kdot, egy stluslapot s a cartfunctions.php fjlban lvShowSmallCart{ ) fggvny hvst tartalmazza. Ez utbbi jelenti meg a kosr tartalmt sszefoglal adatokat, amelyeket azbrk jobb fels sarkban tallunk. A kosr funkeit megvalst fggvnyek trgyalsakor mg visszatrnk erre a fggvnyre. Vgl elrtnk a f esemnykezel h urokhoz. A lehetsges mveleteket a 33.2 tblzatban talljuk.3 3.2 tblzat: A J esemnyhurok Mveletbrowsenode detail image search addtocart deletefromcart emptycart showeartlehetsges mveleteiLersAz adott kategriba tartoz knyveket jelenti meg. Ez az alaprtelmezett mvelet. A kivlasztott knyv rszletes adatait jelenti meg. A knyv bortjnak nagyobb vltozatt jelenti meg. A felhasznl ltal vgrehajtott keress eredmnyt jelenti meg. Hozzad egy ttelt a felhasznl kosarhoz. Trl egy ttelt a felhasznl kosarbl. Teljesen kirti a kosarat. Megjelenti a kosr tartalmr.A fenti tblzatban szerepl els ngy mvelet az Amazontl szrmaz adatok visszakeressvel s megjelentsvel kapcso latos, a msodik ngy pedig a kosr kezelsvel foglalkozik.Az Amazontl adatot visszakeres mveletek mind hasonlkppen mkdnek. Nzzk meg pldaknt, hogyan lehet egyadott browsenode-ban, vagyis kategriban tallhat knyvek adatait lekrnilAdott kategriban lv knyvek megjelentseA browsenode (kategria megjelentse) mvelet esetn az albbi kd h*dik vgre:showCategories{$mode); $category = getCategoryName{$browseNode); if{!$category ll {$category=='Best Selling Books')) echo "Current Best Sellers"; else echo "Current Best Sellers in ".$category."";{Kapcsolds az Amazon Web Services fellethez XML s SOAP segtsgvel577A showCategories () fuggvny a kivlasztott kategrik listjt jelenti meg, amely listt az oldalak tbbsgnl azok fels rszn lthatjuk. A getCategoryName () fuggvny a neki radott browsenode rtk alapjn az adott kategria nevt adja vissza. A showBrowseNode () fuggvny az abban a kategriban tallhat knyvekbl jelent meg egy oldalnyit. Vizsgljuk meg legelszr a showCategories() fuggvnyt! Kdjt a 33.5 pldakdban talljuk.33.5 pldakd: A categoryfunctions. phpknyvtr showCategories ()fggvnye- A kivlasztott kategrik listjall npszer kategrik listjnak megjelenitse function showCategories($mode) { global $categoryList; echo "Selected Categories"; if($mode == 'Books')asort($categoryList); Seategories = count($categoryList); $columns = 4; $rows = ceil($categoriesl$columns); echo ""; reset($categoryList); for($col = 0; $col If you have finished with this eart,
eart eontents"; showSummary($products, you can empty it of all items.l, count($products), $mode,0,true);ll a kosr llandan a kpernyn lv rvid sszefoglalsnak megjelenitse ll csak az utols hrom, function showSmalleart() global $ SESSION; echo " Your eart $". number forrnat( eartPrice (), kosrba tett termket mutatja2). "".carteontents().""; ll az Amazon.com kosrhoz csatlakoz rlap echo " "; foreach($_SESSION['cart'] as $ASIN=>$product) $quantity = $_SESSION['cart'] [$ASIN]['quantity']; echo ""; echo ""; echo " ";33ll mutassuk a kosrhoz utoljra hozzadott ttelt! function carteontents() global $ SESSION; $display = array_slice($ SESSION['cart'], $display = array_reverse($display, $result = ''; $counter = 0; ll ha tl hossz a termknv, rvidtsk le' true);-3,3);ll fordtott idrendi sorrendben van rjuk szksgnk59633.fezetforeach($display as $product) if(strlen($product['name'l)ASINSearch($ASIN,if($product->valid ()){$cart[$ASINl = array('price'=>$product->ourPrice(), 'name' => $product->productName(), 'quantity' => l)ll egy adott ttel sszes pldnynak trlse a kosrbl function deleteFromCart(&$cart, unset ($cart[$ASINl); $ASIN){?>Kapcsolds azAmazon Web Services fellethez XML s SOAP segtsgvel597Ennl a kosrnl a korbbiakhoz kpest mshogyan hajtunk vgre nhny dolgot. Nzzk meg pldul az addToCart () fggvnyt! Amikor megprblunk betenni valamit a kosrba, ellenrizzk az ASIN kd rvnyessgt, s kiketessk az aktu lis ( vagy legalbbis gyorsttrazott) rat. A legrdekesebb krds a kvetkez: amikor a vsrlk fizetni akarnak, hogyan juttatjuk el adataikat azAmazonnak?Fizets az AmazonnlNzzk meg kzelebbrl a 33.13 pldakdban lthat showeart () fggvnyt, annak is az albbi rszt:ll az Amazon.com kosrhoz csatlakoz rlap ltrehozsaecho "";foreach($cart as $ASIN=>$product) $quantity=$eart [ $ASIN] ['quantity'] ; value=\"".$ASIN."\">";echo " quitAMajd a kvetkezket begpelve:mysqladmin -u root -p reloadlptessk hatlyba a vlto:ztatsokat! Amennyiben replikcit s:zeretnnk hasznlni MySQL ks:zolglnkon, a binris naplzst is be kell kapcsolnunk. Ehhez elszr is lltsuk le a szervert:mysqladmin -u root -p shutdown62435. fejezetHozzuk ltre az letclmy.cnf nev fjlt, ami a MySQL-belltsainkat fogja trolni! Egyelre csupn egyetlen bellrsra van szksgnk, de akrhnyat bellthatunk itt. A belltsok teljes listjt a MySQL kziknyvben talljuk. Nyissuk meg a fjlt, s gpeljiik be a kvetkezket:[mysqld] log-binMenrsiik el a fjlt, majd zrjuk be! Ezt kveten a mysqld_safe futtatsval indtsuk jra a kiszolglt!A PHP teleptseTovbbra is root felhasznl kell, ha nem azok vagyunk, az su segtsgvel vltsunk vissza r! Mieltt teleptennk a PHP-t, az Apache-t kanfigurlnunk kell, hogy tudja, mit hol tall. {Az Apache szerver belltsakor visszatrnk erre a tmra.) Menjnk vissza a knyvtrhoz, ahova a forrskdot helyeztiik:JI JI JI JI # # #cd lusrlsrc gunzip -c httpd-2.2.9.tar.gz cd httpd-2.2.9ltar xvf -lconfigure --prefix=lusrllocallapache2Most mr elkezdhetjiik a PHP teleptst. Csomagoljuk ki a forrsfjlokat, s vltsunk a knyvtrukra:cd lusrlsrc gunzip -c php-5.2.6.tar.gz cd php-5.2.6ltar xvf A PHP configure parancsval itt is szmtalan belltst hajthatunk vgre. A . l configure --help l less begpel svel kapott segtsg alapjn hatrozhatjuk meg, hogy mit kvnunk hozzadni. Jelen esetben a MySQL, az Apache, a PDFtib s a gd tmogatst kvnjuk bekapcsolni. rdemes megemlteni, hogy a most kvetkezk egyetlen parancs. rhatjuk az egszet egy sorba, vagy - ahogy itt is szerepel - hasznlhatjuk a folytats karaktert, a fordtott perjelt {\). Ez a karakter lehetv teszi, hogy az olvashatsg rdekben tbb sorba rjunk egy hossz utastst:#.lconfigure --prefix=lyourlpathltolphp --with-mysqli=lyourlpathltolmysql coniig --with-apxs2=1usrllocallapache2lbinlapxs --with-jpeg-dir=lpathltoljpeglib --with-tiff-dir=lpathlto.tiffdir --with-zlib-dir=lpathltolzlib\ \\ \ \\--with-imap=lpathltolimapcclient --with-gdEzt kveten ltrehozzuk s teleptjiik a binris fjlokat:ll # # llmake make installMsoljunk be egy INI fjlt a lib knyvtrba:ep php.ini-dist lusrllocallliblphp.inivagyep php.ini-recommended lusrllocallliblphp.iniAA fenti kt parancsban lv php.ini fjlokban eltr belltskszleteket tallunk. Az els, a php.ini-dist elssorban fejlesztsi clra hasznlt gpekre val. Ebben pldul be van kapcsolva a display_ errars direktva. Ez megknnyti a fejlesztst, de lesben mkd gp esetn nem igazn kvnatos. Arnikor knyvnkben a php.ini fjlbeli valamelyik bellts alaprtelmezett rtkre hivatkozunk, akkor a php.ini ezen verzijban tallhat bellrsra gondolunk. A msodik vltozat, a php. ini-recommended lesben miikd gpekre val. A PHP-belltsokat a php.ini fjlt szerkesztve mdosthatjuk. Szmtalan belltst megvltoztathatunk, rdemes nh nyat ezek kzl megemlteni. Ha kdjainkbl szeretnnk e-maileket kldeni, be kell lltanunk a sendmail_path rtkr. Itt az ideje, hogy belltsuk az OpenSSL-t! Ez az, amit ideiglenes tanstvnyok s CSR fjlok ltrehozsra fogunk hasz nlni. A --prefix bellts hatrozza meg a telepts f knyvtrt:# # llgunzip -c openssl-0.9.8h.tar.gz cd openssl-0.9.8h .lconfig --prefix=lusrllocallsslltar xvf -Most ltrehozzuk, teszteljiik s teleptjiik:A PHP s a MySQL teleptse625# make # make test # make installEzt kveten konfigurljuk az Apache-t a fordtshoz. Az --enable-so konfigurcis bellts teszi lehetv a dinami kus megosztott objektumok (DSO), az--enable-sslpedig a mod_ssl modul ignybe vtelr. A szerverszoftver maximlisrugalmassga rdekben az internetszolgltatk s a csomagokat kiad cgek szmra ersen ajnlott a DSO funkci hasznla ta. Megjegyezzk azonban, hogy az Apache nem minden platforrnon tmogatja a DSO-t.# cd.. /httpd-2.2.9# SSL_BASE=../openssl-0.9.8h \./configure\ \--prefix=/usr/local/apache2 --enable-so --enable-sslVgezetl ellltjuk az Apache-t s a tanstvnyokat, majd telepthetjk ket:# makeHa mindent jl csinltunk, az albbihoz hasonl zenetet kell ltnunk:+---------------------------------------------------------------------+Before you install the package you now should prepare the SSL certificate system by running the 'make certificate' command. For different situations the follawing variants are provided:% make certificate TYPE=dummy % make certificate TYPE=test % make certificate TYPE=customCRT=/path/to/your.crt(dummy self-signed Snake Oil cert) (test cert signed by Snake Oil CA) (custom cert signed by own CA) (existing cert)% make certificate TYPE=existing[KEY=/path/to/your.key]Use TYPE=dummy when you're a vendor package maintainer, the TYPE=test when you're an admin but want to do tests only, the TYPE=custom when you're an admin willing to run a real server and TYPE=existing when you're an admin who upgrades a server.(The default is TYPE=test)Additionally add ALGO=RSA(default)or ALGO=DSA to selectthe signature algorithm used for the generated certificate.Use ake certificate VIEW=l'to display the generated data.Thanks for using Apache [email protected] www.engelschall.com&mod ssl. Ralf S. Engelsehall+---------------------------------------------------------------------+Most mr ltrehozhatunk egyni tanstvnyt. Ehhez meg kell adni cmnket, cgnk adatait, illetve nhny tovbbi dolgot. A kontaktadatoknl rdemes a valdi adatokat megadni. A tbbi krdsnl az alaprtelmezett vlaszok is tkletesen megfelelnek:# make certificate TYPE=customs most teleptsk az Apache-t:# make installAHa minden jl megy, az albbihoz hasonl zenetet kell lmunk:+--------------------------------------------------------+You now have successfully built and installed the Apache 2.2 HTTP server. To verify that Apache actually works correctly you now should first check the (initially created or preserved) configuration files62635. fejezet/usr/local/apache2/conf/httpd.confand then you should be able to irnmediately fire up Apache the first time by running:/usr/local/apache2/bin/apachectl startThanks for using Apache. The Apache Group http://www.apache.org/+--------------------------------------------------------+Most pedig ellenrizzk, hogy az Apache s a PHP mkdik-e! Ahhoz azonban, hogy a konfigurcihoz hozzadhassuk a PHP tpust, szerkeszteni szksges a httpd. conf fjlt.A httpd. conf fjl: kddarabokNzzk meg a httpd. conf fjlt! Ha kvettk az eddigi utastsokat, akkorlocal/apache2/conf httpd.conf addtypellomnyunkat az /usr lknyvtrban talljuk. A fjlban a PHP-hoz tartozbellts megjegyzss van alaktva.Szntessk ezt meg, hogy a kvetkezkppen nzzen ki:AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phpsEzzel eljutottunk odig, hogy megnzhetjk, vajon mkdik-e Apache szervernk. Elszr is indtsuk el a kiszolglt SSL tmogats nlkl, hogy felll-e! Ezt kveten ellenrizzk a PHP tmogatst, s lltsuk le, majd indtsuk el a kiszolglt be kapcsolt SSL tmogatssal, hogy meggyzdhessnk rla, minden mkdik-e! A coniigtest utastssal ellenrizzk, hogy a konfigurci megfelelen lett-e belltva:t cd /usr/local/apache2/bin t . /apachectl coniigtestSyntaxOKt./apachectl start httpd started./apachectl start:Ha minden jl ment, az A. l brn lvhz hasonlt fogunk ltni, amikor bngszvel kapcsoldunk a kiszolglhoz.Megjegyzs: A kiszolglhoz a szmtgp domainnevvelvagy IP-cmvel kapcsoldhatunk. Ellenrizzk mindkettt, hogybiztosak lehessnk benne, hogy minden megfelelen mkdik!Itworks!AA. l bra: Az Apache alaprtelmezett tesztoldala.A PHP tmogats is mkdik:Most mr tesztelhetjk a PHP tmogatst! Hozzunk ltre egy a gykrknyvtrba, ami alaprtelmezsben az test.phpfjlt, benneazalbbi kddal! Az llomnyt tegyk/usr l local l apache/htdocskell, hogy legyen! Mindazonltal ez az elrsi tvonal a korbban vlasztott knyvtreltagtl (prefix) fgg. Ezt a httpd.conf fjlban vltoztathatjuk meg: A kpernyn megjelen kimenet az A.2 brhoz hasonl kell, hogy legyen.A PHP s a MySQL teleptse627wto---=.,.::.'::':?;#A.2 bra: A phpinfo ( ) fggvnnyel hasznos konjigurcis informcikhoz juthatunk.Az SSL mkdikApache 2.2 alatt pusztn annyit kell tennnk az SSL bekapcsolshoz, hogy a httpd.conf fjlban a httpd-ssl.conf fjira vonatkoz szably ell eltvoltjuk a megjegyzs jelet. Az albbi sor helyett: # Include conf/extra/httpd-ssl.conf ez szerepeljen a httpd. conf fjlban:Include conf/extra/httpd-ssl.confSzmtalan belltst megvltoztathatunk a httpd-ssl.conf fjlban is; tovbbi informcirt olvassunk bele a http://httpd.apache.org/ docs/2.2/ mod/ mod_ssl.html oldalon elrhet Apache-dokumentcibal A konfigurcis vltoztatsok utn egyszeren lltsuk le, majd indtsuk el a kiszolglt: # /usr/local/apache2/bin/apachectl stop # /usr/local/apache2/bin/apachectl start Prbljuk, hogy mkdik-e; ehhez kapcsoldjunk bngsznkkel a kiszolglhoz, s az albbiakat begpelve vlasszuk ki a https protokollt:https://szervernk.domainnk.huPrbljuk ki szervernk IP-cmt is, valahogy gy:https://xxx.xxx.xxx.xxxvagyhttp://xxx.xxx.xxx.xxx:443Ha minden rendben van, a kiszolgl elkldi a tanstvnyt a bngsznek, hogy biztonsgos kapcsolatot hozzon ltre. Ez arra kszteti a bngszt, hogy elfogadtassa velnk a st magunk ltal alrt tanstvnyt. Ha olyan tanstvnyrl lenne sz, amelyet a bngsznk ltal megbzhatnak tekintett tanst szervezet lltott volnaki, a bngsz nem krdezne meg minket.Jelen esetben mi hoztuk ltre s rtuk al sajt tanstvnyunkat. Egyelre nem kvntunk valdi tanstvnyt beszerezni, mivel most mg csak arrl szeretnnk megbizonyosodni, hogy minden megfelelen mkdik. Ha Internet Explorert vagy Firefoxot hasznlunk, lakat ikont lthacunk az llapotsoron. Ez jelzi, hogy biztonsgos kapcsolat jtt ltre. A Firefoxban hasznlt ikont az A.3 brn lthatjuk; a lakat bngsznk -jobb vagy bal- als sarkban jelenik meg.lwww.googlo.com8-AA.3 bra: A bngszk lakat ikont megjelentve jelzik, hogy az ppen megtekintett oldal SSL kapcsolaton keresztl jtt. A teleptett PHP modulok megosztott objektumknt hasznlathoz nhny tovbbi lpsre van szksg. Elszr is msoljuk a ltrehozott modult a PHP extensions knyvtrba, ami minden bizonnyal az/u sr/local/lib/php/extensionselrsi tvonalon tallhat!Ezt kveten adjuk a php.ini fjlhoz az albbi sort:extension=extension name.soA php.ini mdostsa utn jra kell indtani az Apache-t.62835. fejezetAz Apache, a PHP s a MySQL teleptse Windows alattWindows esetn kiss eltr a teleptsi folyamat, mivel a PHP-t vagy CGI {php. exe) szkriptknt vagy SAPI modulknt {php5apache2_2. dll) llthatjuk be. Az Apache-t s a MySQL-t viszont a Unix alatt ltottakhoz hasonlan teleptjk. A telepts megkezdse eltt ellenrizzk, hogy opercis rendszernkre teleprve vannak-e a legfrissebb javtsok!Megjegyzs: A PHP 5.3-as verzija ta nem tmogaa a Windows 2000-nl rgebbi Windows opercis rendsureket;a PHP 5.3 csak a Windows 2000, a Windows Server 2003, a Windows Server 2008 s a Windows Vista (s termszetesen az ezeknl jabb) opercis rendszert tmogaa.Lass internetkapcsolat esetn rdemes lehet a prograrnak CD-n lv verziit telepteni, m azok a legfrissebbnl egy vagy akr tbb verzival is rgebbiek lehetnek.AMySQL teleptse Windows alatt* .Az albbi teleptsi utastsok Windows Vista opercis rendszerre vonatkoznak. Kezdjk a MySQL elksztsvel! A Windows Essentials msi teleptfjlt a http://www.mysql.com cmrl tlthetjk le. Ha dupln rkattintunk erre az llomnyra, elindul a telepts. A telept varzslval ksrt folyamat els nhny kpernyjn ltalnos informcikat olvashatunk a teleptsrl s " a MySQL-licencrl. Olvassuk el ezeket, s a"Continue {Folytats) gombra kattinrva lpkedjnk vgig rajtuk! Az els fontos dnts az lesz, amikor a telepts tpust kell kivlasztanunk- typical {tipikus), compact {kompakt) vagy custom {egyni). A tipikus tkletesen megfelel lesz, ezrt hagyjuk meg azt {ez a telepts alaprtelmezett tpusa), majd a"Next" {Tovbb) gombra kattinrva folytassuk a teleptst! Ha befejezdn a telepts, menjnk a MySQL Configuration Wizardba {konfigurcis varzsl), hogy ltrehozzuk az " ignyeinknek megfelel, egyni my. ini f:ijlunkat! A varzslt gy rjk el, ha a"MySQL Server Now jellngyzetbe, majd " a"Finish {Ksz) gombra kattintunk. A MySQL Configuration Wizard klnbz kpernyin megjelen konfigurcis belltsok kzl vlasszuk ki a neknk megfelelked A belltsokrl a http://dev.mysql.com/doc/refman/5.0/en/index.html oldalon elrhet MySQL kziknyv ben tallunk rszletes lerst. Ha befejeztk a konfigurlst- ne feledkeznk meg arrl sem, hogy jelszt hatrozzunk meg a root felhasznlnak!-, a varzsl elindtja a MySQL szolgltatst. Miutn teleptettk a kiszolglt, a Vezrlpulton tallhat Services {Szolgltatsok) segdalkalmazs segtsgvel llt hatjuk le, indthatjuk el, illerve llthatjuk be, hogy automatikusan elinduljon. A Services elindtshoz kattintsunk a Start " gombra, majd vlasszuk ki a Control Panelt {Vezrlpultot)! Kattintsunk dupln az"Administrative Tools {Rendszergazdai " eszkzk), majd a"Services gombral A Services segdalkalmazst az A .4 brn ltjuk. Ha mdostani szeretnnk brmelyik MySQL-belltst, elszr le kell lltani a szolgltatst, startup paramterknt megadni azokat, majd jraindtani a MySQL szolgltatst. A MySQL-t lelltani is a Services segdalkalmazsban, tovbb a NET STOP MySQL vagy mysqladmin shutdown paranccsal tudjuk. A MySQL-lel szmtalan parancssori segdalkalmazshoz jutunk. Ezek egyikhez sem knny elrni- kivve, ha a MySQL binris knyvtr benne van a PATH vltozban. Ennek a krnyezeti vltoznak az a feladata, hogy kzlje a Windows-zal, hol keresse a futtathat programokat. A windowsos parancssorban a gyakran hasznlt parancsok tbbsge, kztk pldul a dir s a cd is be van prve a cmd. exe-be. Msikak, pldul a forrnat s az ipconfig sajt futtathat llomnyokkal rendelkeznek. Nem lenne knyelmes, ha a C: \WINNT\system32\format utastst be kellene gpelni, ha formzni szeretnnk a lemezt. Az is knyelmetlen len ne, ha a MySQL monitor futtatshoz be kellene gpelni, hogy C: \mysql\bin\mysql.AA.4 bra: A Services segdalkalmazssal konfigurlhauk a gpnknjut szolgltatsokat.A PHP s a MySQL teleptse629Az alapvet Windows-parancsokhoz tartoz, futtathat fjlok, pldul a forrnat. exe knyvtra automatikusan megta llhat a PATH vltoznkban, gy elg egyszeren begpelni azt, hogy forma t. Hogy ugyanilyen knyelmesen jrhassunk el a MySQL parancssori eszkzkkel is, hozz kell adni azokat ehhez a vltozhoz. Kattintsunk a Start gombra, s nyissuk meg a Vezrlpultot! Kattintsunk dupln a.System" gombra, majd menjnk az "Ad vanced" (Specilis) flre! Ha az "Environment Variables" (Krnyezeti vltozk) gombra kattintunk, rendszernk krnyezeti vltozit megjelent prbeszdablak nylik meg. Ha dupln kattintunk a PATH-ra, szerkeszthetjk a vltoz tartalmr. Tegynk pontos vesszt az aktulis elrsi tvonal vgre, hogy elvlasszuk vele az j bejegyzst az elztl; majd gpeljk be a c: \mysql\b in elrsi tvonalat! Az OK gombra kattintssal eltroljuk ezt a kiegsztst a gp rendszerler adatbzi sban (registry). Szmtgpnk kvetkez jraindtsa utn elg lesz a mysql-t begpelni, nem kell kirni azt, hogy C:\mysql\bin\mysql.Az Apache teleptse Windows alattAz Apache 2.2 a windowsos platformok tbbsgn fut, s az Apache 2.0 meg az Apache 1.3 windowsos verzihoz kpest na gyobb teljestmnyt nyjt, illetve stabilabban mkdk. Az Apache-t telepthetjk forrsbl, de mivel a Windows-felhasznlk tbbsge nem rendelkezik fordtkkal, ebben a rszben az MSI telepts vltozatot mutatjuk be. Menjnk a http://httpd.apache.org oldalra, s tltsk le onnan az Apache 2.2 aktulis verzijnak a Windows binris fjljtl A knyv rsakor mi az apache_2. 2. 9-win32-x86-openssl