144 29 41MB
Hungarian Pages 658 [650] Year 2010
PH P és MySQL® webfejlesztöknek Hogyan építsünk webáru házat?
Lu ke Weiling Laura Thomsan
PHP és MySQL webfejlesztöknek - Hogyan építsünk webácuházat? © 2010 Perfact-Pro Kft. Minden jog fenntartva!
ISBN 978-963-9929-13-5
A könyv eredeti címe: PHP and MySQL Web Development, 4th Edition A magyar kiadásért felelős 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.
Bármilyen másolás, sokszorosítás, illetve adatfeldolgozó rendszerben történő tárolás a kiadó előzetes írásbeli hozzájárulása nélkül tilos. Az itt közölt információk kizárólag az olvasó személyes használatára készültek. Jelen mű felhasználása más köny vekben, kereskedelmi szoftverekben, adatbázisokban csak a kiadó előzetes írásbeli hozzájárulásával lehetséges. A szerző és a kiadó a tőle elvárható legnagyobb gondossággal járt el a könyv és a prograrnek készítése során. A könyvben, illet ve a programokban található esetleges hibákért, használatukból eredő esetleges károkért sem a szerző, sem a kiadó nem vállal semminemű felelősséget.
Fordította: Lénárt Szabolcs Szakmailag lektorálta: Kiss Kálmán Nyelvileg lektorálta: Kósa György Tördelte: Fontoló Stúdió
Felelős kiadó a Perfact-Pro Kft. ügyvezető igazgatója l101 Budapest, Pongrác út 9/b. Tel: 260-0990 Fax: 431-0028 [email protected] .perfactkiado.hu
www
Tarralern
Tartalom
Bevezetés
Miért érdemes elolvasni a könyvet?
l
Változó változók
21
Állandók deklarálása és használata
21
Mit tanulhatunk a könyvből?
l
Változók hatóköre
22
Mi a PHP?
2
Műveleti jelek használata
22
Mi a MySQL?
2
Aritmetikai műveleti jelek
23
Miért használjunk PHP-t és MySQL-t?
2
Karakterláncokon alkalmazható műveleti jelek
23
A PHP legfőbb erősségei
3
Értékadó műveleti jelek
23
Melyek a PHP 5 újdonságai?
4
Összehasonlító műveleti jelek
25
A PHP 5.3 főbb jellemzői
5
Logikai műveleti jelek
26
A MySQL legfőbb erősségei
5
Bitműveleti jelek
26
Támogatás elérhetősége
6
Egyéb műveleti jelek
27
Melyek a MySQL 5 újdonságai?
6
Az űrlap végösszegének kiszámítása
28
Hogyan épül fel a könyv?
7
Műveletek elsőbbségi sorrendje és
Végezetül
7
I. rész A PHP használata
9
l. fejezet
a csoportosíthatóság
29
Változókhoz kapcsolódó függvények
30
Változók típusának ellenőrzése és beállítása
30
Változók állapotának ellenőrzése
31
Változók típuskonverziója
31
Döntéshozatal feltételes utasításokkal
31
PHP gyorstalpaló
ll
Kódblokkok
32
Kezdés előtt: a PHP elérése
ll
A különböző feltételes utasítások összehasonlítása
34
Mintaalkalmazás létrehozása: Bob autóalkatrészek
12
Műveletek ismétlése iterációval
35
Rendelési űrlap létrehozása
12
Kiugrás vezérlési szerkezetből vagy kódból
37
Az űrlap feldolgozása
13
Alternatív vezérlési szerkezetek alkalmazása
38
PHP beágyazása HTML-be
13
A dec l a re szerkezet használata
38
PHP címkék
14
Hogyan tovább?
38
PHP utasítások
15
Fehérköz karakterek
15
2. fejezet
Megjegyzések
15
Adatok tárolása és visszakeresése
39
Dinamikus tartalom hozzáadása
16
Adatok elmentése későbbi használat céljából
39
Függvényhívások
16
Bob megrendeléseinek el tárolása és visszakeresése
39
A da te ( ) függvény használata
17
Fájlok feldolgozása
40
Az űrlapváltozók elérése
17
Fájl megnyitása
40
Rövid, közepes és hosszú változók
17
A megfelelő megnyitási mód kiválasztása
40
Karakterláncok összefűzése
19
Eijl megnyitása az fopen() függvénnyel
41
Változók és literálok
19
Fájlok megnyitása FTP-n vagy HTTP-n keresztül
42
Az azonosítók
20
Fájlmegnyitási problémák kezelése
43
Változótípusok
20
Fájlba írás
44
A PHP adattípusai
20
Az fwri te ( ) függvény paramécerei
44
Típuserősség foka
20
Fájlformátumok
44
Típuskényszerítés
21
Fájl bezárása
45
III
IV
Tartalom
Olvasás fájlból
47
Fájl megnyitása olvasásra: fopen ()
48
Ahol meg kell állnunk: feof()
48
Tómbön belüli navigálás: each(),current (),reset (), end(),next (),pos
( ) és p rev() függvény
69
Függvény alkalmazása tömb minden egyes elemére: arra y_
Beolvasás soronként: fgets() , fgetss() és fgetcsv ()
69
walk()
48
Tömbelemek számlálása: count(),sizeof () és array_ ()függvény
70
49
Tómbök átalakítása skaláris változókká: extract ()
70
Karakter beolvasása: fgetc ()
49
További olvasnivaló
71
Tetszőleges mennyiségü adat beolvasása: freact()
50
Hogyan tovább?
71
Egyéb hasznos fájlfüggvények
50
A teljes fájl beolvasása: readfile(), fpassthru () és file()
count_values
Fájl meglétének ellenőrzése: file_exists ()
50
4.
Fájlméret meghatározása: fil esi z e()
50
Karakterláncok kezelése és reguláris kifejezések
Fájl törlése: unlink()
50
Mintaalkalmazás létrehozása: intelligens üzenetküldő
50
Karakterláncok formázása
Fájlok zárolása
51
Karakterláncok megvágása: tr im(),ltrim () és rtrim()
Egy jobb módszer: adatbázis-kezelő rendszerek
52
Fájlon belüli navigálás: rewind(), fseek () és ftell ( )
fejezet
űrlap
73 75
függvény
75
Egyszerű fájlok használata esetén jelentkező problémák 52
Karakterláncok formázása megjelenítés céljából
Hogyan oldják meg a relációs adatbázis-kezelő
Tárolni kívánt karakterláncok formázása:
rendszerek ezeket a problémákat?
52
További olvasnivaló
53
Hogyan tovább?
53
73
addslashes ()
és stripslashes () függvény
75
78
Karakterláncok egyesítése és felosztása sztringkezelő függvényekkel
79
Az explode(),implode () és j oin ()függvény 3.
fejezet
használata
79
Tömbök használata
55
Az strtok ()függvény használata
79
Mit nevezünk tömbnek?
55
A substr ( ) függvény használata
80
Numerikusan indexelt tömbök
56
Karakterláncok összehasonlítása
80
Numerikusan indexelt tömbök létrehozása
56
Karakterláncok sorba rendezése: strcmp(),
Tömb tartalmának elérése
56
Tömbelemek elérése ciklusokkal
57
Nem numerikusan indexelt tömbök
57
Tömb inicializálása
57
Tömbelemek elérése
57
Ciklusok használata
58
Tömbműveleti jelek
59
strchr (),strrchr
Többdimenziós tömbök
59
stristr
Tömbök rendezése
62
A sort() függvény használata
62
Tömbök rendezéseasort () és ksort ()
strcasecmp ( )
és strnatcmp() függvény
Karakterlánc hosszának megállapítása
az
80
strlen ()
függvénnyel
81
Részsztringek keresése és cseréje sztringkezelő függvényekkel
81
Karakterláncok keresése karakterláncban: strstr(), ( ) és
() függvény
82
Részszering pozíciójának megkeresése: strpos () és strrpos()
82
Részsztringek cseréje: str_replace ( ) és substr_
függvényekkel
62
Fordított rendezés
63
Ismerkedés a reguláris kifejezésekkel
83
Többdimenziós tömbök rendezése
63
Az alapok
84
Felhasználó által meghatározott rendezés
63
Karakterkészletek és -osztályok
84
Fordított sorrendbe történő felhasználói rendezés
64
Ismétlődés
85
Tömbök átrendezése
64
Részkifejezések
85
A shuffle ()függvény használata
65
Számolt részkifejezések
85
Az array_reverse ()függvény használata
66
Karakterlánc elejéhez vagy végéhez rögzítés
85
Tömbök feltöltése fájlokból
66
Ágaztatás
86
További tömbkezelési eljárások
68
Literális különleges karakterekhez illesztés
86
replace() függvény
83
Tartalom
A különleges karakterek áttekintése
86
Osztálypéldányok létrehozása
110
Az eddig tanultak alkalmazása az intelligens űrlapban
87
Osztályattribútumok használata
110
Részsztringek keresése reguláris kifejezésekkel
87
Hozzáférés-szabályozás private és public
Részsztringek cseréje reguláris kifejezésekkel
88
Karakterláncok szétbontása reguláris kifejezésekkel
88
Osztálymetódusok hívása
112
További olvasnivaló
88
Öröklődés megvalósítása PHP-ben
113
Hogyan tovább?
88
Láthatóság szabályozása öröklődés esetén a pr i vate
kulcsszóval
és a proteeted kulcsszóval Felülírás
5. fejezet
112
113 114
Öröklődés és felülírás megakadályozása a final
Kód többszöri felhasználása és függvényírás
89
Kód többszöri felhasználásának előnyei
89
Költség
89
A többszörös öröklődés
Megbízhatóság
89
Interfészek megvalósítása
116
Egységesség
90
Osztálytervezés
117
kulcsszóval
115 116
A require ( ) és az include () utasítás használata
90
Az osztály kódjának megírása
117
Fájlnévkitetjesztések és a require {) utasítás
90
Haladó objektumorientált funkciók PHP-ben
124
A require {) urasírás használata weboldalsablonokra
91
Osztályon belüli kanstansok használata
124
Statikus metódusok létrehozása
124
95
Osztálytípus ellenőrzése és típusjelzés
125
Függvények használata PHP-ben
96
Késői statikus kötések
125
Függvényhívás
96
Objektumok klónozása
126
Nem létező függvény hívása
97
Elvont osztályok használata
126
Az auto_prepend_file és
az
auto_append_file
beállítás használata
Metódusok többszörös definiálása a -call()
Kis- és nagybetűle megkülönböztetése függvénynevekben
97
metódussal
126
Saját függvények definiálása
97
Az_autoleact {) függvény használata
127
Függvények alapszerkezete
98
Iterátorak és iteráció létrehozása
127
Függvényeink elnevezése
98
Osztályaink átalakitása karakterláncokká
129
Paraméterek használata
99
A Reflection API használata
129
Hogyan tovább?
130
A hatókör fogalma
100
Cím és érték szerinti paraméterátadás
102
A return kulcsszó használata
103
7. fejezet
Értékvisszaadás függvényekből
103
Hiba- és kivételkezelés
131
Rekurzió megvalósítása
104
Kivételkezelési fogalmak
131
Névterek
105
Az Exception osztály
132
További olvasnivaló
105
Felhasználó által meghatározott kivételek
133
Hogyan tovább?
106
Kivételek Bob autóalkatrész-értékesítő alkalmazásában 135 Kivételek és a PHP további hibakezelő mechanizmusai
6. fejezet
Objektumorientált PHP
107
Ismerkedés az objektumorientált programozás fogalmaival
138
További olvasnivaló
138
Hogyan tovább?
138
107
Osztályok és objektumok
107
II. rész
Többalakúság
108
A MySQL használata
Öröklődés
108
139
8. fejezet
Osztályok, attribútumok és metódusok létrehozása 109
Webes adatbázis megtervezése
141
Osztályszerkezet
109
Relációs adatbázissal kapcsolatos fogalmak
141
Konstruktorok
109
Táblák
141
Destruktorok
110
Oszlopok
142
PHP-ben
v
VI
Tartalom
Sorok
142
10. fejezet
Értékek
142
Munkavégzés MySQL adatbázisunkkal
165
Kulcsok
142
Mi az SQL?
165
Sémák
143
Adatok beszúrása adatbázisba
165
Kapcsolatok
143
Adatok visszakeresése adatbázisból
167
Webes adatbázis megtervezése
144
Adott feltételeknek megfelelő adatok visszakeresése
168
Adatok visszakeresése több táblázatból
169
144
Adatok visszakeresése meghatározott sorrendben
173
Redundáns adatok tárolásának elkerülése
144
Adatok csoportosítása és összesítése
173
Atomi oszlopértékek használata
145
V isszakapni kívánt sorok kiválasztása
175
Válasszunk értelmes kulcsokat!
146
Egymásba ágyazott lekérdezések használata
175
Adatbázisban lévő rekordok frissítése
177
Gondoljuk végig a modellezett, valós világbeli objektumokat!
Gondoljuk végig, rnit szeretnénk az adatbázisból megtudnil
146
Kerüljük a sok üres tulajdonságot tartalmazó
Táblák megváltoztatása létrehozásuk után
177
Rekordok törlése adatbázisból
179
146
Táblák törlése
179
Táblatípusok összefoglalása
147
Teljes adatbázis törlése
179
Webes adatbázis architektúrája
147
További olvasnivaló
179
További olvasnivaló
148
Hogyan tovább?
179
Hogyan tovább?
148
kialakítást!
ll. fejezet 9. fejezet
MySQL adatbázis elérése a webről PHP-vel
181
Webes adatbázis létrehozása
149
Hogyan működnek a webes adatbázis-architektúrák?
181
A MySQL monitor használata
150
Adatbázis lekérdezése a webről
184
Bejelentkezés MySQL-be
150
A felhasználótól érkező adatok ellenőrzése és szűrése
184
Adatbázisok és felhasznáJók létrehozása
151
Kapcsolat létrehozása
184
Felhasználók és jogosultságok beállítása
151
A használni kívánt adatbázis kiválasztása
185
A MySQL jogosuJtsági rendszerének bemutatása
151
Az adatbázis lekérdezése
185
A legkisebb jogosultság elve
151
A lekérdezés eredményeinek visszakeresése
186
Felhasználó beállítása: a GRANT parancs
151
Kapcsolat bontása az adatbázissal
187
Jogosultságok típusai és szintjei
152
Új információ felvitele az adatbázisba
187
A REVOKE parancs
154
Előfordított utasítások használata
189
Példák a GRANT és a REVOKE használatára
154
Egyéb PHP adatbázis-illesztések használata
190
Webes felhasználó beállítása
155
Altalános adatbázis-illesztés használata: PEAR MDB2 190
A megfelelő adatbázis használata
155
További olvasnivaló
192
Adatbázistáblák létrehozása
156
Hogyan tovább?
192
A többi kulcsszó jelentésének megismerése
157
Az oszloptípusok
157
Az adatbázis megtekintése a SHOW és a DESCRIBE paranccsal
159
12. fejezet
Haladó MySQL-adminisztráció
193
A jogosultsági rendszer alaposabb megismerése
193
Indexek létrehozása
159
A user tábla
194
MySQL azonosítók
160
A db és a host tábla
195
Oszlopok adattípusainak kiválasztása
160
A tables_pr�v, a colurnns priv és a
Numerikus típusok
160
Dátum és idő típusok
162
Karakterlánc-típusok
162
További olvasnivaló
164
Hogyan tovább?
164
-
procs_priv tábla
196
Hozzáférés-szabályozás: Hogyan használja a MySQL a jogosuJtsági táblákat?
197
Jogosultságok frissítése: Mikor lépnek életbe a változtatások?
197
MySQL adatbázisunk biztonságossá tétele
198
MySQL az operációs rendszer szemszögéből
198
Tartalom
Jelszavak
198
Felhasználói jogosultságok
198
Szolgáltatások vagy digitális termékek értékesítése
felvétele
Webes kérdések
199
Többletérték hozzáadása termékekhez vagy
További információk begyűjtése az adatbázisokról
199
lnformációszerzés a SHOW utasítással
199
szolgáltatásokhoz
223 226 226
Költségcsökkentés
227
lnformációszerzés oszlopokról a DESCRIBE utasítással 201
Kockázatok és veszélyforrások megismerése
227
A lekérdezések működésének megismerése az
Crackerek
227
201
A kívánt üzleti eredmény elmaradása
228
Adatbázisunk optimalizálása
205
Számítógépes hardverhibák
228
Optimálisra tervezés
205
Elektromos, kommunikációs vagy hálózati hibák
228
Jogosultságok
205
Erős verseny
228
Táblaoptimalizálás
205
Szaftverhibák
228
lndexek használata
205
Változó szabályozási környezet és adójogszabályok
229
Alapértelmezett értékek használata
205
Rendszer-kapacitásbeli korlátok
229
További tippek
205
A megfelelő stratégia kiválasztása
229
Biztonsági mentés készítése MySQL adatbázisunkról
206
Következő lépések
229
MySQL adatbázisunk helyreállítása
206
Replikáció megvalósítása
206
15. fejezet
A master kiszolgáló beállítása
207
Az e-kereskedelem biztonsági kérdései
231
A kezdeti adatátvitel megvalósítása
207
A birtokunkban lévő információ fontossága
231
A slave kiszolgáló vagy kiszolgálók beállítása
208
Biztonsági fenyegetések
232
További olvasnivaló
208
Bizalmas adataink kitettsége
232
Hogyan tovább?
208
Adatvesztés vagy -rongálás
233
Adatmódosítás
234
Denial of Service támadás
234
EXPLAIN utasítással
13. fejezet Haladó MySQL-programozás
209
Szaftverhibák
235
A LOAD DATA INFILE utasítás
209
Le tagadás
235
Tárolómotorok
209
Használhatóság, teljesítmény, költség és biztonság
236
Tranzakciók
210
Biztonsági házirend létrehozása
236
A tranzakciókkal kapcsolatos definíciók megismerése 210 Tranzakciók használata InnoDB táblákkal
210
A felhasználói hitelesítés alapelvei
237
A titkosítás alapjai
238
Külső kulcsok
211
Privát kulcsú titkosítás
239
Tárolt eljárások
212
Nyilvános kulcsú titkosítás
239
Alappélda
212
Digitális aláírások
239
Helyi változók
214
Digitális tanúsítványok
240
Kurzorok és vezérlési szerkezetek
214
Biztonságos webszerverek
240
További olvasnivaló
217
Auditálás és naplózás
241
Hogyan tovább?
217
Tűzfalak
242
Biztonsági mentés készítése az adatokról
242
Biztonsági mentés készítése általános fájlokról
242
III. rész E-kereskedelem és biztonság
219
MySQL adatbázisunk biztonsági mentése és helyreállítása
14. fejezet E-kereskedelmi honlap üzemeltetése
221
Mi a célunk?
221
Az üzleti weboldalak típusai
221
Céges információ megjelenítése online katalógusként 221 Fontos információ közzétételének elmulasztása Termékekre vagy szolgáltatásokra irányuló rendelések
222
242
Fizikai biztonság
242
Hogyan tovább?
243
16. fejezet Webes alkalmazások biztonsága
245
Biztonságkezelési stratégiák
245
Megfelelő gondolkodásmód már a tervezéstől
245
VII
VIII
Tartalom
A biztonság és a használhatóság közötti egyensúly keresése
17. fejezet 245
Hitelesítés megvalósítása PHP-vel és MySQL-lel
265
Biztonsági felügyelet
246
Látogatók azonosítása
265
Alapvető megközelítésünk
246
Hozzáférés-szabályozás megvalósítása
266
A ránk váró fenyegetések azonosítása
246
Jelszavak tárolása
267
Bizalmas adatok elérése vagy módosítása
246
Jelszavak titkosítása
269
Adatvesztés vagy -rongálás
247
Több oldal védelme
270
Denial of Service támadás
247
Alapszintű hitelesítés használata
270
Rosszindulatú kód befecskendezése
247
Alapszintű hitelesítés PHP-ben
Feltört szerver
248
Alapszintű hitelesítés az Apache
271 .
htaccess fájljaival 272
Kikkel állunk szemben?
248
A mod_auth_mysql hitelesítés használata
275
Crackerek
248
Amod_auth_mysql modul telepítése
275
Fertőzött gépek tájékozatlan felhasználói
248
A mod_auth_mysql modul használata
275
Elégedetlen alkalmazottak
248
Egyéni hitelesítési folyamat létrehozása
276
Hardvertolvajok
248
További olvasnivaló
276
Saját magunk
248
Hogyan tovább?
276
Kódunk biztonságossá tétele
249
Felhasználó által bevitt értékek szürése
249
18. fejezet
A kimenet értékeinek szürése védőkarakterekkel
252
Biztonságos tranzakciók végrehajtása PHP-vel és
Kódjaink szervezése
253
MySQL-lel
Mi kerül a kódunkba?
254
Biztonságos tranzakciók megteremtése
277
A felhasználó gépe
278
254
Az internet
278
255
Saját rendszerünk
279
255
A Secure Sockets Layer (SSL) protokoll használata
280
Webszerverünk és a PHP biztonságossá tétele
256
Felhasználói bevitel szürése
282
Tartsuk szaftvereinket naprakészen!
256
Biztonságos tárolás megvalósítása
282
A php. ini fáj l tartalma
257
Hitelkártyaadatok tárolása
283
A webszerver konfigurálása
258
T itkosítás használata PHP-ben
283
A GPG telepítése
283
258
A GPG tesztelése
285
Az adatbázisszerverek biztonsága
259
További olvasnivaló
289
Felhasználók és a jogosuJtsági rendszer
259
Hogyan tovább?
289
Adatküldés a szerverre
260
Kapcsolódás a szerverhez
260
IV. rész
A kiszolgáló futtatása
260
Haladó PHP-módszerek
A hálózat védelme
261
Tűzfalak telepítése
261
19. fejezet
DMZ használata
261
A fájlrendszer és a kiszolgáló elérése
293
Felkészülés a DoS és DDoS támadásokra
262
Fájlfeltöltés
293
Számítógépünk és az operációs rendszer biztonsága
262
A fájlfeltöltés HT ML kódja
294
Tartsuk naprakészen operációs rendszerünket!
262
A fájlt kezelő PHP kód megírása
295
Csak azt futtassuk, amire valóban szükség van!
262
A gyakori feltöltési problémák megelőzése
298
Kiszolgálónk fizikai biztonsága
263
Könyvtárfüggvények használata
298
Katasztrófa -elhárítási terv
263
Olvasás könyvtárakból
298
Hogyan tovább?
263
lnformációszerzés az aktuális könyvtárról
301
A fájlrendszerrel kapcsolatos, megfontolandó szempontok A kód stabilitása és kódhibák Végrehajtó operátor és az
ex ee
parancs
Webes alkalmazások hasztolása fizetős szolgáltatás igénybevételével
277
291
Könyvtárak létrehozása és törlése
301
A fájlrendszer elérése
302
Fájlinformációk gyüjtése
302
Tartalom
Fájltulajdonságok módosítása
304
Rajzolás vagy szöveg írása képre
334
Fájlok létrehozása, törlése és áthelyezése
304
Kimenet készítése a kész grafikáról
335
Programfuttató függvények használata
304
Erőforrások felszabadítása
335
Környezeti változók elérése: a getenv () és a putenv () függvény
Automatikusan létrehozott képek használata más 306
oldalakon
336
További olvasnivaló
306
Szöveg és betük használatával létrehozott képek
336
Hogyan tovább?
306
A rajzvászon beállítása
338
A szöveg hozzáigazítása a gombhoz
339
20. fejezet Hálózati és protokollfüggvények használata
307
A szöveg elhelyezése
341
A szöveg gombra írása
341
A használható protokollok áttekintése
307
Befejezés
341
E-mail küldése és olvasása
307
Ábrák és grafikonadatok rajzolása
342
Más weboldalak tartalmának felhasználása
308
További képkezelő függvények használata
348
Hálózati keresőfüggvények használata
310
További olvasnivaló
348
Biztonsági mentés készítése vagy fájl tükrözése
313
Hogyan tovább?
348
23. fejezet
Biztonsági mentés készítése vagy fájl tükrözése FTP-vel
313
Fájlfeltöltés
318
Munkamenet-vezérlés PHP-ben
349
Időtúllépés elkerülése
318
Mi a munkamenet-vezérlés?
349
További FTP függvények használata
318
A munkamenet alapjai
349
További olvasnivaló
319
Mi a süti?
349
Hogyan tovább?
319
Sütik beállitása PHP-ból
350
Sütik használata munkamenetekkel
350
Munkamenet-azonosító tárolása
350
21. fejezet Dátum és idő kezelése
321
Egyszerű munkamenetek megvalósítása
351
Dátum és idő megállapítása PHP-ból
321
Munkamenet indítása
351
A date ( ) függvény használata
321
Munkamenet- változók regisztrálása
351
Unix-időbélyegek kezelése
322
Munkamenet-változók használata
351
A getdate () függvény használata
323
Változók törlése és a munkamenet megszüntetése
351
Dátumok ellenőrzése a checkdate ( ) függvénnyel
324
Egyszerű példa munkamenetre
352
Időbélyegek formázása
324
Munkamenet-vezérlés konfigurálása
353
Váltás PHP és MySQL dátumformátumok között
326
Hitelesítés munkamenet-vezérléssel
354
Számolás dátumokkal PHP-ben
327
További olvasnivaló
359
Számolás dátumokkal MySQL-ben
328
Hogyan tovább?
359
Míkroszekundumok használata
329
Naptárfüggvények használata
329
24. fejezet
További olvasnivaló
329
További hasznos lehetőségek PHP-ben
361
Hogyan tovább?
329
Karakterláncok kiértékelése az ev al () függvénnyel
361
22. fejezet
Végrehajtás leállítása: die (} és exit (}
361
Változók és objektumok szerializálása
362
Képek előállitása
331
Információgyűjtés a PHP-környezetről
363
Képi támogatás beállítása PHP-ben
331
Milyen bővitmények lettek betöltve?
363
Képformátumok
332
A kód tulajdonosának azonosítása
363
JPEG
332
A kód utolsó módosítási időpontjának megállapítása
363
PNG
332
A futtatási környezet átmeneti módosítása
364
WBMP
332
Forráskód szinkiemelése
364
GIF
332
PHP használata parancssorban
365
Képek létrehozása
333
Hogyan tovább?
365
Rajzvászon létrehozása
333
IX
X
Tartalom
Az adatbázis létrehozása
394
A nyitóoldal létrehozása
395
A felhasználói hitelesítés megvalósítása
396
Felhasználók regisztrálása
397
Bejelentkezés
401
Kijelentkezés
404
Jelszóváltoztatás
405
Elfelejtett jelszó visszaállítása
407
370
Könyvjelzök tárolása és visszakeresése
411
Kód többszöri felhasználása
370
Könyvjelzök hozzáadása
411
Kezelhetö kód írása
371
Könyvjelzök megjelenítése
413
Programozási szabályok
371
Könyvjelzök törlése
414
Kódunk darabokra bontása
373
Könyvjelzök ajánlása
416
Egységes könyvtárstruktúra használata
373
A projekt továbbfejlesztésének lehetséges irányai
418
Hogyan tovább?
418
V. rész Gyakorlati PHP és MySQL projektek fejlesztése
367
25. fejezet A PHP és a MySQL használata nagyobb projektekben
369
A szaftverfejlesztés gyakorlatainak alkalmazása webfejlesztésre
369
Webes alkalmazás projektjének tervezése és megvalósítása
Függvények dokumentálása és megosztása fejlesztői csapaton belül
374
Verziókövetés megvalósítása
374
A fejlesztőkörnyezet kiválasztása
375
Kosár funkció programozása
419
Projektjeink dokumentálása
375
A megoldás alkotóelemei
419
Prototípuskészítés
375
Online katalógus létrehozása
419
A müködés és a tartalom szétválasztása
376
A felhasznáJók által vásárlás közben megrendelt
Kódoptimalizálás
376
Egyszerű optimalizációs lépések
376
Fizetési rendszer megvalósítása
420
28. fejezet
termékek nyomon követése
419
Zend termékek használata
377
Adminisztrációs felület programozása
420
Tesztelés
377
A megoldás áttekintése
420
További olvasnivaló
378
Az adatbázis létrehozása
423
Hogyan tovább?
378
Az online katalógus létrehozása
425
Kategóriák listázása
426
Adott kategória könyveinek listázása
428
26. fejezet Hibakeresés
379
A könyv részletes adatainak megjelenítése
430
Programozási hibák
379
A kosár funkció megvalósítása
431
Szintaktikai hibák
379
A kosar_megjelenitese.php kód használata
431
Futásidejű hibák
380
A kosár megjelenítése
433
Logikai hibák
384
Termékek hozzáadása a kosárhoz
435
Hibakeresés a változók tartalmának kiíratásával
385
A módosított tartalmú kosár mentése
437
Hibajelentési szintek
387
A fejlécen látható összefoglaló adatok megjelenítése
437
A hibajelentési beállítások módosítása
388
A pénztárnál
438
Saját hibák kiváltása
389
A fizetés feldolgozása
442
A hibakezelés elegáns módja
389
Az adminisztrációs felület megvalósítása
444
Hogyan tovább?
390
A projekt továbbfejlesztése
450
Meglévő rendszer használata
450
Hogyan tovább?
450
27. fejezet Felhasználói hitelesítés megvalósítása és személyre
29. fejezet
szabott tartalom megjelenítése
391
A megoldás alkotóelemei
391
Webalapú levelezöszolgáltatás létrehozása
451
Felhasználói azonosítás és személyre szabás
391
A megoldás alkotóelemei
451
A könyvjelzök tárolása
392
Levelezöprotokollok: a POP3 és az !MAP
Könyvjelzök ajánlása
392
A megoldás áttekintése
392
összehasonlítása POP3 és !MAP támogatása PHP-ben
451 451
Tartalom
A megoldás áttekintése
452
31. fejezet
Az adatbázis létrehozása
454
Webes fórum fejlesztése
A kód architektúrájának vizsgálata
455
Gondoljuk végig a feladatot!
517
Be- és kijelentkezés
460
A megoldás alkotóelemei
517
Felhasználói fiókok beállítása
462
A megoldás áttekintése
518
Új felhasználói fiók létrehozása
463
Az adatbázis megtervezése
519
Meglévő felhasználói fiók módosítása
464
A hozzászólások fanézetének megtekintése
521
Felhasználói fiók törlése
464
Kibontás és összecsukás
523
Levél olvasása
465
A hozzászólások megjelenítése
525
Postafiók kiválasztása
465
A
526
Postafiók tartalmának megtekintése
467
A hozzászólások egyenkénti megtekintése
530
Levélüzenet olvasása
469
Új hozzászólás írása
532
Üzenetfejlécek megjelenítése
472
A projekt továbbfejlesztése
538
Üzenet törlése
472
Meglévő rendszer használata
538
Levélküldés
473
Hogyan tovább?
538
cs
omopont osztály használata
517
Új üzenet küldése
473
Válaszküldés vagy levél továbbítása
474
32. fejezet
A projekt továbbfejlesztése
476
Perszonalízált PDF dokumentumok előállitása
539
Hogyan tovább?
476
A projekt áttekintése
539
Dokumentumformátumok összehasonlítása
539
A megoldás alkotóelemei
542
30. fejezet Levelezölista-kezelő alkalmazás fejlesztése
477
Vizsgáztatórendszer
542
A megoldás alkotóelemei
477
A dokumentum-előállító szoftver
542
A megoldás áttekintése
544
A levelezőlisták és a feliratkozott felhasznáJók adatbázisának létrehozása
478
A tesztkérdések lekérdezése
545
Hírlevelek feltöltése
478
A válaszok értékelése
546
Csatolt állományokat tartalmazó levelek küldése
478
RTF formátumú oklevél létrehozása
548
A megoldás áttekintése
478
PDF formátumú oklevél létrehozása sablonból
550
Az adatbázis létrehozása
480
PDF dokumentum előállitása PDFlib függvényekkel
553
A kód architektúrájának meghatározása
482
"Helló, világ!" kód PDFlib függvényekkel
553
A bejelentkezés megvalósítása
488
Az oklevél előállítása PDFlib függvényekkel
556
Új felhasználói fiók létrehozása
488
Fejlécekkel kapcsolatos problémák kezelése
562
Bejelentkezés
490
A projekt továbbfejlesztése
562
Felhasználói funkciók megvalósítása
492
Hogyan tovább?
562
Levelezőlisták megtekintése
493
Listainformációk megjelenítése
496
33. fejezet
Levelezőlisták archívumának megtekintése
498
Kapcsolódás az Amazon Web Services felülethez
Fel- és leiratkozás
499
A felhasználói fiók beállításainak megváltoztatása
500
Jelszavak megváltoztatása
500
Kijelentkezés
502
Ismerkedés az XML-lel
564
Adminisztrátori funkciók megvalósítása
502
Web Services
566
Új levelezőlista létrehozása
503
A megoldás alkotóelemei
567
Új hírlevél feltöltése
504
Az Amazon Web Services felület használata
567
Egyszerre több fájl feltöltésének kezelése
506
XML értelmezése: REST válaszok
568
A hírlevél előnézetének megtekintése
510
SOAP használata PHP-vel
568
A hírlevél kiküldése
511
Gyorsítótárazás
568
A projekt továbbfejlesztése
515
A megoldás áttekintése
568
Hogyan tovább?
515
Az alkalmazás magja
571
XML és SOAP segítségével
563
A projekt áttekintése: XML és a Web Services használata
563
XI
XII
Tartalom
Adott kategóriában lévő könyvek megjelemtése
576
AmazonResultSet objektum lekérése
578
Kérés intézése és az eredmény visszakeresése REST segítségével
585
Kérés intézése és eredmény visszakeresése SOAP segítségével
591
Ajax elemek hozzáadása a PHPbookmark alkalmazáshoz
609
További információ
618
Bővebben a Document Object Modelről (DOM)
618
JavaScript könyvtárak Ajax alkalmazásokhoz
618
Ajax-fejlesztői weboldalak
619
A kérésből származó adatok gyorsítótárazása
592
Vásárlói kosár fejlesztése
594
A függelék
Fizetés az Amazonnál
597
A PHP és a MySQL telepítése
621
A projekt kódjának telepítése
597
Az Apache, a PHP és a MySQL telepítése Unix alatt
621
A projekt továbbfejlesztése
598
Bináris fájlok telepítése
622
További olvasnivaló
598
Forrás telepítése
622
A httpd. conf fájl: kóddarabok
626
34. fejezet
A PHP támogatás is működik?
626
Web 2.0-s alkalmazások fejlesztése
Az SSL működik?
627
Ajax-programozással
599
Az Apache, a PHP és a MySQL telepítése Windows alatt
628
Mi az Ajax?
599
HTTP kérések és válaszok
600
A MySQL telepítése Windows alatt
628
DHTML ésX HTML
600
Az Apache telepítése Windows alatt
629
Cascading Style Sheets (CSS)
601
A PHP telepítése Windows alatt
630
Kliensoldali programozás
601
A PEAR telepítése
631
Szerveroldali programozás
602
Egyéb konfigurációk beállítása
632
XML ésX SLT
602
Ajax alapok
602
B függelék
Az XMLHTTPRequest objektum
602
Webes források
633
Kommunikáció a szerverrel
604
Források a PHP-ről
633
A kiszolgáló válaszának feldolgozása
605
MySQL-lel és SQL-lel foglalkozó források
634
Tegyük össze az egészet!
606
Források az Apache-ról
634
Ajax elemek hozzáadása korábbi projektjeinkhez
609
Webfejlesztés
635
Tartalom
Szerzők Laura Thomson vezető szoftvermérnök a Mozilla CorporationnéL Korábban az OmniTI
és a Tangled Web Design egyik
vezetőjeként tevékenykedett. Rendszeresen dolgozik együtt az RMI T Universiry-vel és a Boston Consuleing GrouppaLAl kalmazorc tudományokból (informatika), illerve informatikai mérnöki területen szerzere egyetemi diplomát. Szabadidejében szívesen lovagol, érvel az ingyenes és nyílt forráskódú szoftverek mellett, és nagyon szeret aludni.
Luke Weiling webes fejlesztő az OmniTI-náLA nyílt forráskódú és webes fejlesztésekkel foglalkozó konferenciák, így egye bek közöte az OSCON, a ZendCon, a MySQLUC, a PHPCon, az OSDC és a LinuxTag rendszeres előadója.Az OmniTI előtt a webes anaütikával foglalkozó Hicwise.com-nál, az adatbázis-fejlesztő MySQL AB-nál, illetve független tanácsadóként a Tangled Web Designnál dolgozort.Alkalmazott tudományok (informatika) diplomát szerzerc, és informatikát oktatott a Mel bourne-i RMI T Universiry-n. Szabadidejében az álmadanságát próbálja meg tökélyre fejleszteni.
Társszerzők Julie C. Meloni a Los Altos-i (Kalifornia) székhelyű i2i I nteractive (www.i2ii.com) multimédiás vállalat műszaki igazgatója. Az internet megszületése óta fejleszt webalapú alkalmazásokat, és soha nem fogja elfelejteni az első grafikus kezelőfelületű böngészőt övező izgalmakat. Számos könyvec és cikket írt a webalapú programozási nyelvek és az adatbázisok témakörében, amelyek közül érdemes megemliteni a Sams Teach Yourself PHP. MySQL, and Apache Ali in One című kiadványt.
Adam DeFields webes alkalmazásfejlesztésre és projektmenedzsmentre szakosodott tanácsadó.A Michigan állambeli Grand Rapidsben él, ahol 2002-ben alapított saját cégét irányítja (Emanation Syscems, LLC - www.emanationsyscemsllc. com). Számtalan, különböző technológiára építő webfejlesztési projekeben részt vere, de leginkább a PHP /MySQL alapú fej lesztési munkákat kedveli.
Marc Wandschneider szabadúszó fejlesztő, szerző és előadó, aki a világ számtalan különböző pontján dolgozott már érdekes projektekben. Utóbbi években idejének nagy részét arra fordítja, hogy robusztus és skálázható webes alkalmazásokat fejlesszen. 2005-ben írta Core Web Application Programming with PHP and MySQL című könyvét. Korábban a SWiK (http:/ /swik.net) nyílt forrású közösségi oldal vezető fejlesztője volt. Marc jelenleg Pekingben él, ahol a kínai nyelvet töri, és programoz.
Köszönetnyilvánítás Szeretnénk köszönetet mondani a Pearson csapatának kemény munkájáért. Külön köszönjük Shelley Johnstonnak, akinek áldozatvállalása és türelme nélkül a könyv első három kiadása nem születhecett volna meg. és Mark Tabernek, aki a negyedik kiadásnál átvette Shelley munkáját. Nagyra értékeljük a PHP- és MySQL-fejlesztői csapatok által végzere munkát. Sok éve könnyícik meg a dolgunkat, és így lesz ez a jövőben is rninden nap. Köszönjük az eSec-nél dolgozó Adrian Close-nak, arniért még 1998-ban azt mondta:.,Ezt meg tudjátok csinálni PHP-ben:' Úgy vélte, szeremi fogjuk a PHP-t, és azt kell mondanunk, igaza lett. Végezetül szeretnénk köszönetet mondani családunknak és barátainknak, akik elviselik antiszociális viselkedésünket, amíg könyveinken dolgozunk. Külön köszönjük Nektek, hogy segítetek családtagjainknak: Julie, Robert, Martin, Lesley, Adam, Paul, Archer és Barton.
A magyar kiadáshoz A könyv példáinak forráskódja és a melléklecek letölthetők regisztráció után a www.perfacrkiado.hu/melleklecek oldalról. A könyvben használt, jelenleg ingyenes szoftverek szintén letölthetőek weboldalunkról (www.perfacckiado.hu/melleklecek). Érdemes azonban az interneten megkeresni ezen szoftverek frissítéseit, újabb verzióit és azokat használni.
XIII
Segovia vízvezetéke a római építészet egyik legnagyszerűbb, a mai napig meglévő műemléke. Traianus császár uralkodása alatt, az időszámításunk szerinti első században épült vezeték feladata az volt, hogy vizet szállítson a ma Sierra de Guadarrama né ven ismert hegy lábától az onnan mintegy 18 kilométer távolságra lévő hispániai városba, Segoviába. Az építményt több mint húszezer, kézzel vágort gránittömbből emelték, és sem cementet, sem kapcsokat nem használtak a tömbök rögzítésére. A vízvezetéknek a város középpontján áthaladó, 278 mérer hosszú szakasza duplasoros boltívekkel rendel kezik, amelyek a földtől 34 mérer magasan futva elegáns képet kölcsönöznek az urcáknak. A természet és az ember okozta viszontagságoknak kérezer éve ellenálló építmény az emberi ügyesség időrlen példája: a mai napig hozzájárul a város vízellárásához.
Bevezetés
Köszöntjük a PHP és
MYSQL webfejlesztöknek című kiadványunk olvasóit! Könyvünk oldalaiba igyekeztünk belesűríteni
a PHP és a MySQL- napjaink két legelterjedtebb webfejlesztő eszközének- használata során szerzett minden tudásunkat. A bevezetésben az alábbiakról lesz szó: Miért érdemes elolvasni a könyvet? Mire leszünk képesek a könyv segítségéve!? Mi a PHP és a MySQL,és miért olyan nagyszerűek? Mi változott a PHP és a MySQL legutolsó verzióiban? Hogyan épül fel a könyv? Vágjunk bele!
Miért érdemes elolvasni a könyvete Könyvünk megranírja, hogyan hozzunk létre interaktív weboldalakat - legyen az a legegyszerűbb rendelési űrlap vagy össze tett, biztonságos e-kereskedelmi portál,esetleg interaktív Web 2.0-s oldal. Ráadásul rnindezt nyílt forráskódú technológiák használatával tanuljuk meg előállítani. A könyv azon olvasóknak szól, akik legalább a HTML alapjaival tisztában vannak,és korábban legalább alapszínten prog ramoztak valamilyen modern programozási nyelvben - még ha az nem is feltétlenül internetes programozás volt-,vagy dol goztak már relációs adatbázissal. Kezdő programozók is minden bizonnyal hasznosnak fogják találni a kötetet, de nekik kicsit tovább tarthat az itt leírtak megemésztése. Megpróbáltunk egyetlen alapfogalmat sem kihagyni,ám viszonylag gyorsan vesszük át őket. A könyv azokat célozza meg, akik összetett vagy üzleti weboldal létrehozása szándékával kivánják magas szinten elsa játítani a PHP-t és a MySQL-t. Amennyiben dolgoztunk már más webfejlesztő nyelvvel,akkor a kötet olvasása során gyorsan képbe kerülhetünk. A könyv első kiadását annak idején azért írtuk meg,mert elegünk volt abból,hogy csak olyan PHP könyveket találtunk, amelyek függvények referenciagyűjteményeként szolgáltak. Az ilyen kiadványok is hasznosak,ám nem sokat segítenek,amikor a főnök vagy az ügyfél azt kéri,hogy .. készíts nekem bevásárlókosaras online boltot': Ebben a könyvben minden tőlünk telhetőt megrettünk, hogy hasznos példákkal álljunk elő. Számtalan kód készen áll arra, hogy az olvasó saját weboldalán azonnal alkal mazza azokat,rnig a többi apróbb módosítások után lesz használható.
Mit tanulhatunk a könyvböH Ha elolvassuk,képesek leszünk valóban dinamikus weboldalakat építeni. Ha készítettünk már honlapokat egyszerű HTML használatával, minden bizonnyal beleütköztünk már ennek a megközelítésnek a korlátaival. A tisztán HTML weboldal stati kus tartalma pontosan ilyen - statikus. Amíg fizikailag nem frissírjük,ugyanaz marad. Látogatói semmilyen interaktív módon nem léphernek kapcsolatba az oldallal. Ha olyan nyelvet és adatbázist használunk, mint a PHP, illerve a MySQL, dinamikussá, vagyis testre szabhatóvá és valós idejű információkban gazdaggá tehetjük oldalainkat. A könyvben szándékosan használunk - még az alapozó fejezetekben is- a való világból vett alkalmazásokat. Kezdésképpen árteleintünk egy egyszerű online rendelési rendszert, és átrágjuk magunkat a PHP és a MySQL különböző területein. Ezt követően különböző szempontok szerint megvizsgáljuk az elektronikus kereskedelmet és ehhez kapcsolódóan a bizton ságot, illerve azt, hogy miként jönnek ezek elő valódi weboldal elkészítésekor. Azt is megmutatjuk,hogyan lehet az itt megfo galmazott elvárásokat PHP-ben és MySQL-ben megvalósítani. A könyv utolsó részében áttekintjük, hogyan érdemes közelíreni az igazi projektekhez,és végigmegyünk az alább felsorolt projektek előkészítési, tervezési és megvalósírási szakaszán: Felhasználók hitelesítése és személyre szabott tartalom a hitelesítés alapján Bevásárlókosaras online bolt
2
B evezetés
Webalapú levelezőalkalmazás Levelezőlista-kezelök Online fórumok PDF dokumentumok előállítása Webszolgáltatások XML-lel és SOAP-pal Web 2.0-s alkalmazás létrehozása Ajaxszal Ezen projektek rnindegyike a könyvben megtalálható állapotában is működik, de természetesen egyéni igényeinknek meg felelően módosíthatók. Azért ezekre esett a választásunk, mert meglárásunk szerint ezek tartoznak a programozók által leg gyakrabban fejlesztert webes alkalmazások közé. A könyv ugyanakkor ezektől eltérő igények esetén is nagy segítséget jelenther céljaink elérésében.
MiaPHP� A PHP kifejezetten az internetre kifejlesztett, szerveroldali szkriptnyelv. A HTML oldalakba az oldal minden egyes megnyi tásakor lefutó PHP kódot ágyazhatunk. A PHP kód értelmezése a webszerveren történik, ami a látogató által megtekinthető HTML-t vagy egyéb kimenetet hoz létre. A PHP első verziója 1994-ben készült el, és eredetileg egyetlen ember, Rasmus Lerdorf munkája volt. Más tehetséges emberek is elkezdtek dolgozni vele, és négy jelentős újraíráson ment keresztül, amíg elérkeztünk a jelenleg széles körben hasz nálható, érett termékhez. 2007. júliusi adatok szerint világszerte több mint 21 millió domaínre telepíterték, és ez a szám igen gyorsan nő. (A PHP terjedésének aktuális állását a http://www.php.net/usage.php oldalon tekinthetjük meg.) A PHP nyílt forráskódú projekt, ami azt jelenti, hogy bárki hozzáférher a forráskódhoz, és ingyenesen használhatja, módo síthatja, illetve terjesztheti azt. A PHP erederileg a Personal Home Page (személyes honlap) rövidítése volt, de a GNU rekurzív rövidítésének (GNU= Gnu's Not Unix, azaz a Gnu nem Unix) elfogadásával együtt ez is megválrozort, és most a PHP Hypertext Preprocessor (PHP hiperszöveg előfeldolgozó) kifejezés rövidítését jelenti. A PHP jelenlegi fő változata az 5-ös. Ezt a verziót a nyelv mögött álló virtuális gép, a Zend motor teljes újraírása, illetve a nyelv néhány jelentős javítása jellemzi. A PHP honlapja a htrp://www.php.net címen érhető el. A Zend Technologies weboldala a http://www.zend.com.
MiaMySQU A MySQL egy nagyon gyors, srabil, relációs adatbázis-kezelő rendszer (angol rövidítéssel RDBMS). Az adatbázis lehetövé teszi az adatok hatékony tárolását, keresését, rendezését és kinyerését. A MySQL kiszolgáló az adatokhoz való hozzáférést szabályozva biztosítja, hogy egyidejűleg többen is használhassák az adatokat, gyorsabb hozzáférést kínál hozzájuk, és garan tálja, hogy csak a jogosult Felhasználók szerezhetnek hozzáférést. Ezért a MySQL röbbfelhasználós, többszálú kiszolgáló. Strukturált lekérdező nyelvet (Structured Query Language- SQL), a szabványos adatbázis-lekérdező nyelvet használja.
A MySQL 1996 óta elérhető a nyilvánosság számára, de fejlesztési története 1979-ig nyúlik vissza. A világ legnépszerűbb nyílt forráskódú adatbázisa, amely számtalan alkalommal elnyerte a Linux Journal szaklap "Readers' Choice Award" -ját (Ol vasóink választása díját). A MySQL kettős licencelési rendszerben érhető el. Amennyiben elfogadjuk a nyílt forráskódú licenc (a GPL) feltételeit, ingye nesen használhatjuk. Ha MySQL-t tartalmazó nem GPL alkalmazást kívánunk terjeszteni, fizetős licencet kell vásárolnunk. A MySQL honlapja a http://mysql.com címen érhető el.
Miért használjunk PHP�t és MySQL�t� Ha weboldalfejlesztésre adjuk a fejünket, számralan termék közül választhatunk Az alábbi kategóriákban kell döntést hoznunk: A webszervert futtató hardver Operációs rendszer A webszerver szoftvere Adatbázis-kezelő rendszer Programozási vagy szkriptnyelv Az egyes választások összefügghetnek egymással. Például nem mindegyik operációs rendszer fut bármilyen hardveren, nem rninden webszerver támogatja az összes programozási nyelvet stb.
Bevezetés
Ebben a könyvben alig foglalkozunk a hardverrel, az operációs rendszerekkel vagy a webszerver szaftveréveL Nincs rá szük ségünk. A PHP és a MySQL egyik legnagyszerűbb tulajdonsága, hogy minden fő operációs rendszeren, sőt a kisebbek közül is sok rendszeren használható. A PHP kódok nagy része megírható úgy, hogy operációs rendszerektől és webszerverektől függetlenül futtatható legyen. Egyes PHP függvények az operációs rendszertől függö fájlrendszerhez kötődnek, ám ezeket egyértelműen megjelölik a kézi könyvekben, és mi is jelezzük, amikor ilyennel dolgozunk. Akármilyen hardvert, operációs rendszert és webszervert válasszunk is, szeriotünk mindenképpen érdemes a PHP és a MySQL mellett dönteni.
A PHP legfőbb erősségei A PHP elsődleges versenytársai a Perl, a Microsoft ASP.NET, a Ruby (Rails keretrendszeren vagy másként), aJavaServer Pages (JSP) és a ColdFusion. Ezekkel összehasonlírva a PHP-nak számos erőssége van, amelyek közül a legfontosabbak: Teljesítmény Skálázhatóság Csatlakozási lehetőség (interfész) számtalan különböző adatbázisrendszerhez Beépített könyvtárak a leggyakoribb webes feladatokhoz Alacsony költség Egyszerű elsajátíthatóság és használhatóság Objektumorientált programozás széles körű támogatása Hordozhatóság (platformfüggetlenség) A fejlesztői megközelítés rugalmassága Hozzáférhető forráskód Hozzáférhető támogatás és dokumentáció Fejtsük ki ezeket az erősségeket kicsit bövebben is!
Teljesítmény
A PHP nagyon gyors. Még egyszerű, olcsó szervert használva is több millió letöltése szolgálhatunk ki naponta. A Zend Technolo gies (http://www.zend.com) által publikált összehasonlító adatok alapján a PHP nagyobb teljesítményre képes versenytársainál.
Skálázhatóság
A PHP-Rasmus Lerdorf szavaival élve-.,megosztott elem nélküli" (shared-nothing) archicektúrával rendelkezik. Ez azt jelenti, hogy hatékonyarr és olcsón, akár belépő szintű szerverekkel is lehet horizontálisan bővíteni.
Adatbázis-integráció
A PHP számos adatbázisrendszerhez tud natív módon kapcsolódni. A MySQL-en túlmenően közvetlenül kapcsolódhatunk egyebek között PostgreSQL, Oracle, dbm, FilePro, DB2, Hyperwave, lnformix, lnterBase és Sybase adatbázisokhoz. A PHP 5-ös verziója SQLite nevű, beépített SQL felülettel rendelkezik az egyszerű fájlokhoz. Open Database Connectivity Standard (ODBC), vagyis nyílt adatbázis-kapcsolás használatával bármilyen, ODBC driverrel rendelkező adatbázishoz kapcsolódhatunk. Sok egyéb mellett a Microsoft-termékek tartoznak ide. A PHP-hoz a natív könyvtárak mellett PHP Database Objects (PDO), azaz egy PHP adatbázis-objektumok nevű adatbázis absztrakciós réteg is tartozik, amely következetes hozzáférést tesz lehetövé, és elősegíti a biztonságos programozási megoldások használatát.
Beépített könyvtárak
Mivel a PHP-t interneten való használatta alakították ki, számtalan beépített függvénnyel rendelkezik a különféle, internettel kapcsolatos feladatok elvégzésére. Mindössze néhány sornyi kódra van szükség ahhoz, hogy menet közben állítsunk elő képeket, webes vagy egyéb hálózati szolgáltatásokhoz kapcsoló
Az összefűző operátort (.) használva egyetlen sorba is írhatnánk ugyanezt:
A kódban használt, beépített date () PHP függvény közli a vevővel rendelése feldolgozásának dátumát és idejét. Ez az információ a kód minden egyes lefutásakor más és más lesz. Az 1.3 ábrán a kód egy adott időpontban történő lefuttatásának kimenetét láthatjuk.
t.ll
�
tttaf
���*
��� ������-Bob autóalkatrészek
-
··?r-:-.11-.:,w
Rendelési nedmények
1.3 ábra: A PHP date ()
függvénye formázott dátumot ad vissza.
Függvényhívások Vizsgáljuk meg a date () függvény meghívását! Ez a függvényhívás álcalános formája. A PHP webes alkalmazások fejleszté sekor használható függvények széles választékával rendelkezik. A függvények többségének valamilyen adatot (paramétert) kell átadni, és a függvények maguk is valamilyen értékkel térnek vissza. Nézzük meg újra ezt a függvényhívást: date('H:i,
jS
F');
PHP gyorstalpaló
17
Láthatjuk, hogy a hívással egy karakterlánc (szöveges adat) adódík át a zárójelek közt a függvénynek. A zárójelben lévő elemet a függvény paraméterének, más néven argumentumának hívjuk. Az ilyen paramétereker a függvény bemeneti adarként
l
használja valamilyen konkrét eredmény (kimenet) elöállítására.
A da te ( ) függvény használata A date
()
függvény formázó karakterláncot (formar string) vár paraméterként, ami meghatározza a kivánt kimenet stílusát.
A karakterlánc minden betűje a dátum és idő egy-egy részét jelképezi. A H az óra a 24 órás időformátumban (az egyszámjegyű órák előtt bevezető nullával), az i a percek (szükség eserén szinrén bevezető nullával), a j a hónap napja (mindíg nulla nél kül), az S a sorszárnnév képzője ( jelen esetben ez th, hiszen angolul írjuk ki a dátumot), az A date
()
F
pedig a hónap teljes neve.
függvény által támogatott formáromok teljes list:iját a Dátum és idő kezelése ámű 21. fejezerben találjuk meg.
Az űrlapváltozók elérése A megrendelési űrlap használatának célja az ügyfélrendelések begyűjtése. Az ügyfelek által begépelt adatokat könnyen megsze rezhetjük PHP-ben, de a ténylegesen alkalmazandó módszer az általunk használt PHP verziójáról és php. ini fájlunk egyik beállírásától függ.
Rövid, közepes és hosszú változók A PHP kódon belül az űrlapmezőket az azok nevéhez kapcsolódó nevű PHP változókként érhetjük el. A változók neveit on nan ismerjük fel könnyen a PHP-ben, hogy dollárjellel ($) kezdődnek. (A dollárjel kiírásának elmulasztása gyakran elkövetett programozói hiba.) A használt PHP-verziótól és annak beállírásairól függően háromféleképpen érhetjük el az űrlapadarokat változókkal. Ezek nek a módszereknek nincsen hivatalos nevük, mi ezért rövid, közepes és hosszú stílusnak fogjuk nevezni őket. Mindháromra igaz, hogy a PHP kódnak elküldött oldalon levő űrlapmezők mindegyike elérhető az adott kódban. Az abroncs_db mező tartalmát az alábbi módokon érhetjük el: $abroncs_db
ll
rövid stílus
$_POST['abroncs_db']
ll
$HTTP_POST_VARS['abroncs
közepes stílus
db']
ll
hosszú stílus
Példánkban és a könyv egészében a közepes stílussal (vagyis a $_POST[ 'abroncs_db' ] formával) fogunk hivatkozni az űrlapválrozókra, ám az egyszerűség kedvéért a változók rövidebb változatát is létrehozzuk. De a kódban, nem pedig auto matikusan tesszük ezt, mert automatikus létrehozásuk biztonsági problémát vetne fel a kódban. Saját kódjaink esetében választhatunk ettől eltérő megközelítést. Hogy megalapozott dönrést hozhassunk, tekintsük ár a különböző módszereket: A rövid stílus ( $abroncs_db) kényelmes ugyan, de használata a register _globals konfigurációs beállítás bekap csolását igényli. Ez a beállirás biztonsági okokból alapértelmezésben ki van kapcsolva. A stílus használarakor könnyen követhetünk el a kódot megbízhatarianná (nem biztonságossá) tevő hibákat, éppen ezért ez a stílus napjainkban már nem igazán ajánlott. Nem lenne értelme egy új kódban használni, mert a PHP 6-os verziójából valószínűleg el fog tűnni. Az ajánlott megközelírés a közepes stílus ( $_POST [ 'abroncs_db' l). Amennyiben a közepes stílus alapján a változó nevek rövid változatát hozzuk létre (ahogy tesszük a könyvben is), nem kell biztonsági kérdésekkel foglalkoznunk, rá adásul változóink viszonylag könnyen használhatók lesznek.
A hosszú stílus ( $HTTP _POST_VARS [ 'abroncs_db' l) a leginkább szószáryár. Meg kell említenünk, hogy újabban sokat kifogásolják, így hosszú rávon minden bizonnyal el fog tűnni. Korábban ez volt a leginkább platformfüggeden stílus, de ma már a teljesítményt növelő register _l ong_arra ys konfigurációs dírektívával kiikratható. Új kódban - a rövid stílushoz hasonlóan - ezt sem érdemes már használni, kivéve, ha biztosak vagyunk abban, hogy szoftverünket csak régi szerverekre fogják telepíteni. Rövid stílus használata esetén a kódban lévő változók neve megegyezik a HTML űrlapon lévő űrlapmezők nevével. Nem kell a változókar a kódban deklarálni vagy bármilyen művelertel lérrehozni. Lényegében úgy adódnak ár a kódnak, ahogy
a függvények megkapják paramétereiket. Ha ezt a stílust választjuk, a változókat egyszerűen, például $abroncs_db - ként használhatj uk. Az űrlapon lévő abroncs_ db mező létrehozza az űrlapot feldolgozó kód $abroncs_db változóját. A változókhoz való ilyen kényelmes hozzáférés vonzó lehet, ám mielőrt egyszerűen bekapcsolnánk a regis ter_ globals
beállítást, érdemes végiggondolni, hogy a PHP fejlesztői csapata miért döntött annak kikapcsolása mellett.
18
2. fejezer
A változókhoz való ilyen közverlen hozzáférés igen kényelmes lehet, ám lehetőséger ad arra, hogy a kódok biztonságát veszélyezterő hibákar kövessünk el. Ha az űrlapváltozókar automatikusan ilyen globális változókká alakítjuk, akkor nem
l
lehet egyértelműen megkülönböztetni az általunk létrehozorr és a közverlenül felhasználéktól érkező, nem megbízható vál tozókat. Ha nem járunk el kellő gondossággal, és nem rendelünk minden változóhoz kezdőértéket, akkor a felhasználék saját változóinkkal keveredő változókat és értékeket adhatnak át űrlapválrozókénr. Amennyiben a változók elérésének kényelmes, rövid stílusár használjuk, ügyeljünk arra, hogy minden saját változónak kezdőértéket adjunk! A közepes stílus esetén az űrlapváltozókar a $_POST, $_GET vagy $_REQUEST tömb valamelyikéből keressük vissza. A $_GET vagy $_POST tömb közül az egyik tárolja az űrlapváltozók minden részletét. Hogy melyik tömböt használjuk, az attól függ, hogy az űrlap elküldése GET vagy POST metódussal történe-e. A GET vagy POST metódussal elküldött min den adat kombinációja elérhető a $_REQUEST tömbön keresztül is. Amennyiben az űrlap a POST metódussal lett elküldve, az abroncs_ db mezőbe bevitt adat a$_POST [ 'abroncs_ db' J elemben lett eltárolva. Ha az elküldés GET metódussal történt, az adarot a$_GET['abroncs_db' l elemben fogjuk
megtalálni.Az adat mindkét esetben elérhető a $_REQUEST [ 'abroncs_db' l
tömbelemben is.
Ezek a tömbök aszuperglobális tömbök közé tartoznak. E fogalomhoz a későbbiekben, amikor a változók hatókörét tár gyaljuk, még visszatérünk. Nézzünk meg egy példát, amelyben a változók egyszerűbben használható másolatát hozzák létre! Egy változó ércékének egy másikba másolásához az értékadó (hozzárendelő) műveleti jelet (operátorr) használjuk; ez PHP-ben nem más, mint az egyenlőségjel (=).A következő utasítás annyir tesz, hogy létrehoz egy új, $abroncs_db nevű válrozót, és belemásolja a$ POST ['abroncs_db' J $abroncs_db
=
tartalmár:
$_POST['abroncs_db');
Helyezzük az alábbi kódblokkot a feldolgozó kód elejére! A könyv összes, űrlapból érkező adatokat kezelő kódja hasonló blokkot tartalmaz az elején. Mivel ez a kód nem állít elő semmilyen kimenetet, mindegy, hogy a és az oldalt indító más HTML címkék alá vagy fölé helyezzük. A könnyebb megtalálhatóság érdekében mi általában a kód elejére szaktuk helyezni az ilyen blokkokat.