PHP & MySQL Webfejlesztoknek
Post on 31-Oct-2014
189 Views
Preview:
DESCRIPTION
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 info@perfact.huwww
.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
laura@tangledweb.com.au luke@tangledweb.com.auusername 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 rse@engelschall.com
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
top related