Főoldal | Könyvlista | Gyorskereső

Átmenetileg a rendelés és szállítás szünetel
PHP fejlesztés fels?fokon

PHP fejlesztés fels?fokon

George Schlossnagle:
PHP fejlesztés fels?fokon


Megjelenés: 2004
Kiskapu Kiadó
720 oldal, bolti ár: 7950,- Ft

A könyv elfogyott
utánnyomás nem várható

A könyv ismertetése

Vissza a lap tetejére | A könyv tartalomjegyzéke

George Schlossnagle:
PHP fejlesztés fels?fokon

Ez a könyv címének megfelelően nem kezdőknek készült, hiszen a PHP nyelv alapjaival egyáltalán nem foglalkozik. Célja azoknak a programozási módszereknek és tervezési fogásoknak a rendszerezett bemutatása, amelyeket a való életben felmerülő problémák megoldása során alkalmazhatunk.
A szerző hitvallása szerint egy igazán jó szakkönyvnek nem az a dolga, hogy kifogja a halat az olvasónak, hanem hogy megtanítsa halászni. Nyilván ezzel függ össze az is, hogy ha vetünk egy pillantást a könyv tartalomjegyzékére, nem a többi PHP nyelvvel foglalkozó műből ismert és megszokott fejezetcímeket látjuk. Ugyanez mondható el a példaprogramokról is. Nincsenek köztük tisztán "teoretikus darabok", mindegyik mögött egy-egy olyan valós probléma húzódik meg, amellyel bárki találkozhat mindennapi munkája során.
A szerző természetesen maga is gyakorló és gyakorlott PHP programozó, olyannyira, hogy még a többi PHP könyv szerzője is készséggel elismeri szaktekintélyét. Mindez meglehetősen komoly biztosítékot jelent a tárgyalt anyag használhatóságával kapcsolatban.

Rövid tartalomjegyzék:

I. rész: A kód kezelése
1. fejezet: Programozási stílusok
2. fejezet: Különleges szolgáltatások
3. fejezet: A hibák ellenőrzése és kezelése
4. fejezet: Rendszerek megvalósítása PHP-vel: Sablonok és a web
5. fejezet: Rendszerek megvalósítása PHP-vel: önálló szkriptek
6. fejezet: A részegységek tesztelése

II. rész: Az alkalmazások teljesítményének tervezése
7. fejezet: A fejlesztési környezet kezelése
8. fejezet: Hogyan tervezzünk jó programozási felületeket
9. fejezet: A külső teljesítmény hangolása
10. fejezet: Az adatösszetevők gyorstárazása
11. fejezet: Újrahasznosítás
12. fejezet: Adatbázisok kezelése

III. rész: Elosztott alkalmazások készítése
13. fejezet: Felhasználók azonosítása és a munkafolyamatok biztonsága
14. fejezet: Munkafolyamatok kezelése
15. fejezet: Egy elosztott környezet megvalósítása
16. fejezet: Távoli eljáráshívás (RPC) - távoli szolgáltatások használata

IV. rész: Teljesítmény
17. fejezet: Az alkalmazások teljesítményének vizsgálata
18. fejezet: Jellemzés
19. fejezet: Mesterséges teljesítményvizsgálati módszerek: kódrészletek és függvények értékelése
20. fejezet: A PHP és a Zend motor belülről
21. fejezet: A PHP kiterjesztése 1. rész
22. fejezet: A PHP kiterjesztése 2. rész
23. fejezet: SAPI-k írása és a Zend motor kiterjesztése

Bevezető

Nemrég lapozgattam William Gibson könyveit és az All Tomorrow’s Parties című kötetben erre bukkantam:

Ami túltervezett vagy túl egyedi, annak eredménye mindig előre látható, és ez az előre láthatóság, ha nem is bukással, de az elegancia hiányával jár.

Gibson elegánsan foglalja össze, miért bukik meg sok rendszer. A színes négyszögek táblára rajzolásával nincs semmi baj, de eme ragaszkodásunk a bonyolulthoz hatalmas hátrányt jelent. Amikor megtervezünk valamit, arra van szükség, hogy az adott problémára adjunk megoldást. Nem szabad előre tekintenünk, hogy a probléma vajon mi lesz évekkel később, egy nagyméretű, összetett felépítményben, amikor pedig egy általános célú eszközt építünk, nem szabad túlzott konkrétsággal megkötnünk a felhasználó kezét.

A PHP maga is e kettő - a webes feladatok megoldásának konkrétsága, illetve egy bizonyos, a felhasználók kezét megkötő megoldás megadására való hajlam - között egyensúlyoz. Kevesen mondanák a PHP-re, hogy elegáns. Parancsnyelvként számos, a Világháló csataterein többéves szolgálat közben szerzett sebet hordoz. Ami elegáns benne, az a megközelítés egyszerűsége.

Minden fejlesztő időről időre váltogatja, milyen megközelítést alkalmaz egy-egy feladat megoldására. Kezdetben az egyszerű megoldásokat részesítik előnyben, mert nem elég tapasztaltak ahhoz, hogy a bonyolultabb elveket megértsék. Ahogy tudásuk gyarapszik, az alkalmazott megoldások egyre bonyolultabbak lesznek, és a megoldható feladatok nagysága is fokozatosan nő. Ekkor fenyeget annak a veszélye, hogy az összetettség rutinná válik és csapdába ejt.

Elegendő idő és erőforrás birtokában minden feladat megoldható szinte bármilyen eszközzel. Az eszköz csupán arra való, hogy ne legyen útban. A PHP éppen erre törekszik. Nem kényszerít ránk semmilyen programozási megközelítést, és igyekszik a lehető legkisebbre csökkenteni a közénk és a megoldandó probléma közé beékelődő rétegek számát. Ez azt jelenti, hogy a PHP-ben minden adott, hogy megtaláljuk a legegyszerűbb és legelegánsabb megoldást, és ne kelljen elvesznünk a rétegek és felületek nyolc előadóterem tábláit elfoglaló tengerében.

Természetesen az, hogy minden eszközt megkapunk, amivel elkerülhetjük egy szörnyeteg építését, nem garantálja, hogy így is lesz. De szerencsére itt van nekünk George és ez a könyv. George olyan utazásra hív minket, ami saját útjára hasonlít, nem csupán a PHP-vel, hanem a programfejlesztéssel és problémamegoldással kapcsolatban általában. Pár napnyi olvasás után elsajátíthatjuk mindazt a tudást, amit ő a területen évek munkájával szerzett meg. Nem rossz üzlet, úgyhogy nem is érdemes e haszontalan előszóval vesztegetni az időt - irány az első fejezet és az utazás!

Rasmus Lerdorf

A szerzőről

George Schlossnagle igazgatóként dolgozik az OmniTI Computer Consulting nevű marylandi cégnél, amelynek szakterületét a nagyméretű webes és elektronikus levelezési rendszerek jelentik. Mielőtt az OmniTI-hez került volna, technikai vezetője volt számos magasszintű közösségi webhelynek, ahol tapasztalatokat szerzett a PHP igen nagy vállalati környezetekben történő alkalmazásával kapcsolatban. Állandó résztvevője a PHP közösség munkájának, hozzájárult többek között a PHP mag, illetve a PEAR és PECL bővítménytárak fejlesztéséhez.

Mielőtt az információ-technológia területére lépett volna, George matematikusnak készült, és két évig szolgált a Békehadtestben, mint tanár. Tapasztalatai megtanították arra, hogy a problémamegoldásban értékelje az interdiszciplináris megközelítést, ami a bajok gyökeréig hatol, nem csupán a tüneteket kezeli.

A PHP az üzleti életben

Amikor 1999-ben elkezdtem hivatásszerűen foglalkozni a PHP programozással, a nyelv éppen csak kezdett több lenni egy újabb, amatőrök által használt parancsnyelvnél. Akkor adták ki a PHP 4-et az első Zend motorral, ami gyorsabbá és stabilabbá tette a nyelvet. A PHP-t használók száma ugrásszerűen növekedni kezdett, de a nagy, üzleti célú webhelyek számára még mindig nehéz volt eladni. A nehézség leginkább két forrásból eredt:

A Perl, ColdFusion és más parancsnyelveken fejlesztők nem frissítették ismereteiket a PHP fejlődésével, így nem voltak tisztában az új képességekkel.

A Java nyelven fejlesztők nagy és teljes keretrendszereket, erőteljes objektumközpontú támogatást, statikus típusokat és más, „üzleti” képességeket kívántak.

Mára egyik sem jelent akadályt. A PHP többé nem ragasztónyelv, amit lelkes amatőrök használnak, hanem erőteljes parancsnyelv, amelyet felépítése ideálissá tesz a webes feladatok megoldására.

Egy programozási nyelv hat követelménynek kell, hogy eleget tegyen, hogy üzleti célú alkalmazásokban is használhatóvá váljon:

Gyors prototípus-készítés és megvalósítás

A modern programozási megközelítések (paradigmák) támogatása

Méretezhetőség

(Kiváló) teljesítmény

Együttműködési képesség

Bővíthetőség

Az első követelmény - a gyors prototípus-készítési lehetőség - születése óta erőssége a PHP-nek. A webes fejlesztések és a celofánba csomagolt szoftvertermékek közötti egyik lényeges különbség, hogy a Weben egy termék „leszállításának” szinte semmilyen költsége nincs. A csomagolt termékek esetében azonban egy aprócska hiba is azt jelentheti, hogy ezernyi CD-t írattunk tele hibás kóddal, és ezt csak úgy javíthatjuk ki, ha értesítjük valamennyi érintett vásárlót a hibajavítás létezéséről, és rávesszük őket, hogy töltsék le és telepítsék. A webes hibajavításoknál elég, ha a felhasználó legközelebb újra betölti az oldalt, ezért a webalkalmazások rugalmasan és gyakran frissíthetők.

A parancsnyelvek általában is kitűnőek rugalmas programok fejlesztésére, mert lehetővé teszik, hogy anélkül fejlesszünk gyorsan és próbáljunk ki új ötleteket, hogy ismételten végig kellene járnunk a fordítás-összeszerkesztés-tesztelés-hibakeresés procedúráját. A PHP különösen jó az ilyesmire, mert nagyon gyorsan tanulható, így új fejlesztőket minimális tapasztalattal is bevonhatunk.

A PHP 5 a többi követelménynek is maradéktalanul megfelel. Amint a könyvben látni fogjuk, a PHP új objektummodellje erőteljes és a szabványoknak megfelelő objektumközpontú támogatást nyújt. A PHP fürge és méretezhető, köszönhetően az alkalmazható programozási stratégiáknak, illetve annak, hogy az üzleti logika létfontosságú részeit könnyű újra megvalósítani valamilyen alacsonyszintű nyelven. A nyelv emellett tengernyi bővítményt biztosít a más szolgáltatásokkal való együttműködésre, az adatbázis-kiszolgálóktól a SOAP-ig. Végül, a PHP megfelel a programozási nyelvek legfontosabb követelményének: egyszerűen bővíthető. Ha a nyelv nem rendelkezne a számunkra szükséges szolgáltatással vagy képességgel, mi magunk is hozzáadhatjuk.

A könyv felépítése

A kötet öt, többé-kevésbé önálló részre oszlik. Bár úgy szerkesztettük meg, hogy az érdeklődő könnyen előreugorhasson egy adott fejezethez, a könyvet javasolt elejétől a végéig elolvasni, mert számos példát fokozatosan építünk fel.

A könyv szerkezete a tanulás természetes folyamatához igazodik. Először azt tárgyaljuk, hogyan kell helyes PHP kódot írni, majd rátérünk az egyes módszerekre, azután a teljesítmény fokozására, végül a nyelv bővítésére. A felépítés azon alapul, hogy hisszük, egy profi programozó legfontosabb felelőssége, hogy „karbantartható” kódot írjon, és hogy könnyebb egy jól megírt kódot gyors futásúvá tenni, mint egy gyors, de silány kódot feljavítani.

I. rész Megvalósítási és fejlesztési módszerek

1. fejezet (Kódolási stílusok)

Az első fejezet a kötetben használt kódolási szokásokat mutatja be, és ezek köré egy kódolási stílust épít, valamint rávilágít a következetes, jól dokumentált kód fontosságára.

2. fejezet (Objektumközpontú programozás tervezési minták segítségével)

A második fejezet a PHP 5 objektumközpontú (objektum-orientált, OOP) programozást támogató szolgáltatásait részletezi, és az ilyen irányú képességeket általános tervezési minták környezetében mutatja be. Azzal, hogy teljes áttekintést nyújt mind a PHP 5-ben megjelent új OOP szolgáltatásokról, mind az OOP megközelítés mögött megbúvó elvekről, a fejezet hasznos lehet az OOP programozással ismerkedők és a tapasztalt programozók számára is.

3. fejezet (Hibakezelés)

Hibázni emberi dolog. A harmadik fejezet a PHP eljárásközpontú (procedurális) és OOP hibakezelő eljárásait tárgyalja, különös tekintettel a PHP 5 új, kivétel alapú hibakezelési képességeire.

4. fejezet (Megvalósítás PHP nyelven: a sablonok és a Világháló)

A negyedik fejezet a sablonrendszereket tekinti át, vagyis az olyan elemkészleteket, amelyek a megjelenítés és a programkód kettéválasztását segítik. A fejezet összehasonlítja a teljes és az ad hoc jellegű sablonrendszerek előnyeit és hátrányait, az előbbire példaként a Smarty-t használva.

5. fejezet (Megvalósítás PHP nyelven: önálló programok)

Manapság csak igen kevés webalkalmazásnak nincs szüksége háttérösszetevőre. Az arra való képesség, hogy már létező PHP kód újrahasznosításával írjunk kötegelt feladatokat, héjprogramokat és nem webes feldolgozó rutinokat, létfontosságú a nyelv üzleti környezetben való hasznosításában. Az ötödik fejezet az önálló programok és démonok írásának alapjait taglalja.

6. fejezet (Egységtesztelés)

Az egységtesztelés annak egyik módszere, hogy ellenőrizzük, a kód megfelel-e arra a célra, amire létrehoztuk. A hatodik fejezetben megvizsgáljuk az egységtesztelési módszereket, és azt, hogy a PHPUnit segítségével hogyan készíthetünk rugalmas egységtesztelő csomagokat.

7. fejezet (A fejlesztőkörnyezet kezelése)

A kód összehangolása a legtöbb fejlesztő számára nem a legizgalmasabb feladat, mindazonáltal igen fontos. A hetedik fejezet bemutatja, hogyan tarthatjuk kézben a kódot a nagy projektekben, és átfogó bevezetést nyújt a CVS (Concurrent Versioning System, változatkövető rendszer) használatába.

8. fejezet (Hogyan tervezzünk jó API-t?)

A nyolcadik fejezet útmutatást ad egy olyan kódtár létrehozásához, ami kezelhető, rugalmas és könnyen felhasználható különböző munkák során.

II. rész Gyorstárak

9. fejezet (Teljesítményfokozás külső módszerekkel)

A gyorstárak használata valószínűleg a teljesítmény fokozásának, illetve az alkalmazás méretezésének leghatékonyabb módja. A kilencedik fejezet a PHP-n kívüli tárolási módszereket vizsgálja, és a fordítói és helyettes (proxy) gyorstárakat tárgyalja.

10. fejezet (Adatösszetevők átmeneti tárolása)

A tizedik fejezet arra összpontosít, hogyan építhetünk tárolási módszereket magába a PHP kódba, illetve hogyan és mikor alkalmazzunk gyorstárakat egy alkalmazásban. Sor kerül egy működőképes tárolórendszer kifejlesztésére is, ami több háttértárat használ.

11. fejezet (Számítási újrahasznosítás)

A tizenegyedik fejezetben megnézzük, hogyan tehetjük az egyes algoritmusokat és folyamatokat hatékonyabbá a köztes adatok átmeneti tárolásával. Lefektetjük a számítási újrahasznosítás alapelveit, és azokat gyakorlati példákkal illusztráljuk.

III. rész Elosztott alkalmazások

12. fejezet (Adatbázisok használata)

Az adatbázisok szinte minden dinamikus webhelyen központi szerepet töltenek be. A tizenkettedik fejezet a PHP és az adatbázis-rendszerek közötti híd építésének hatékony módszereit mutatja be.

13. fejezet (A felhasználók hitelesítése és a munkamenetek biztonsága)

A tizenharmadik fejezet a felhasználók azonosításának kezelését, és az ügyfél-kiszolgáló kapcsolatok biztonságát veszi górcső alá. Többek között tárgyaljuk a titkosított munkameneti információk „sütikben” (cookie) való tárolását, és teljes egészében megvalósítunk egy egyszerű bejelentkezési rendszert is.

14. fejezet (Munkamenetek kezelése)

A tizennegyedik fejezet a PHP munkameneti bővítésének ismertetésével, illetve saját munkamenet-kezelők írásával folytatja a felhasználói munkamenetek tárgyalását.

15. fejezet (Elosztott környezet kiépítése)

A tizenötödik fejezet olyan méretezhető alkalmazások építését mutatja be, amelyek egyetlen gépnél többet igényelnek. Részletezzük a számítógépfürtök összeállítását és hatékony kezelését, valamint azt, hogy hogyan kezelhetjük hatékonyan az átmeneti tároló és adatbázisrendszereket.

16. fejezet (RPC: együttműködés távoli szolgáltatásokkal)

Az egyszerű webes gép-gép kommunikációt lehetővé tevő szolgáltatások kulcsszava manapság a webszolgáltatás. Ebben a fejezetben a két legelterjedtebb webszolgáltatási protokollt nézzük meg, az XML-RPC-t és a SOAP-ot.

IV. rész Teljesítmény

17. fejezet (Teljesítménymérés: teljes alkalmazások tesztelése)

Az alkalmazás teljesítményének mérése szükséges ahhoz, hogy meggyőződhessünk róla, elbírja azt a forgalmat, amelynek feldolgozására szánták, és hogy azonosíthassuk azokat az összetevőket, amelyek szűk keresztmetszetet jelenthetnek. A tizenhetedik fejezetben áttekintjük a különböző alkalmazásmérő (benchmark) programcsomagokat, amelyekkel egy alkalmazás teljesítménye és stabilitása megmérhető.

18. fejezet (Profilkészítés)

Miután azonosítottuk a fontosabb lehetséges szűk keresztmetszeteket egy alkalmazásban, profilkészítő eszközökkel elkülöníthetjük a problémás részeket a kódban. A tizennyolcadik fejezet a profilkészítés célját és módszereit ismerteti, majd megtanít az APD (Advanced PHP Debugger) használatára, amellyel megvizsgálhatjuk a kódot.

19. fejezet (Szintetikus mérés: kódblokkok és függvények értékelése)

Két kódrészletet lehetetlen összehasonlítani, ha különbségeik mennyiségi mérésére nincs mód. A tizenkilencedik fejezet áttekinti a teljesítménymérési módszereket, illetve az egyedi mérőprogramok megvalósítását és értékelését.

V. rész Bővíthetőség

20. fejezet (A PHP és a Zend Engine titkai)

Ha tudjuk, hogyan működik a PHP „a színfalak mögött”, okosabb tervezési döntéseket hozhatunk, kihasználva a PHP erősségeit és megkerülve gyengéit. A huszadik fejezet a PHP belső működésének technikai részleteit tartalmazza, illetve azt, hogy hogyan kommunikálnak a webkiszolgálókhoz hasonló alkalmazások a PHP-vel, hogyan készít az értelmező a parancsfájlokból köztes kódot, és hogyan zajlik a program végrehajtása a Zend motorban.

21. fejezet (A PHP bővítése: I. rész)

A huszonegyedik fejezet a C nyelvű PHP bővítmények írásába vezet be. Foglalkozik a meglevő PHP kódok C nyelvre való átültetésével, illetve azzal is, hogyan írhatunk olyan bővítményeket, amelyek lehetővé teszik, hogy a PHP hozzáférjen a mások által készített C könyvtárakhoz.

22. fejezet (A PHP bővítése: II. rész)

A huszonkettedik fejezet az előző témáját folytatja magasabb szinten; olyan témakörökkel, mint az osztályok létrehozása a bővítmények kódjában, illetve az adatfolyamok és a munkamenet-kezelési képességek használata.

23. fejezet (SAPI-k készítése és a Zend Engine bővítése)

A huszonharmadik fejezet a PHP alkalmazásokba ágyazásával foglalkozik, illetve a Zend Engine bővítésével, amelynek révén megváltoztathatjuk a nyelv alapviselkedését.

Felületek és változatok

A kötet a PHP 5-re épül, de az anyag mintegy tíz százalékának kivételével nem kifejezetten csak a PHP 5-re vonatkozik. (Az említett tíz százalékba a 2. és 22. fejezetekben bemutatott új, objektumközpontú szolgáltatások, illetve a 16. fejezetben a SOAP tárgyalása tartozik.) Elveket és módszereket mutatunk be, hogy kódunk gyorsabb, okosabb és jobban tervezett legyen. Reményeink szerint legalább a könyv fele hasznosnak bizonyul abban, hogy bármilyen nyelven jobb kódot írjunk.

Minden programot, ami a kötetben szerepel, Linuxon írtunk és teszteltünk, de módosítás nélkül futniuk kell Solaris, OS X, FreeBSD vagy bármely más Unix-klón rendszeren is. A programok legtöbbje minimális módosítással Windowson is futtatható, bár egyes segédeszközök (mégpedig az 5. fejezetben bemutatandó pcntl függvények) esetleg nem ültethetők át teljesen.

A könyv tartalomjegyzéke

Vissza a lap tetejére | A könyv ismertetése

George Schlossnagle:
PHP fejlesztés fels?fokon

Előszó

A szerzőről

Bevezetés

 

Megvalósítási és fejlesztési módszerek

1. fejezet Kódolási stílusok

A megfelelő stílus kiválasztása 4

A kód formázása és elrendezése 4

Behúzás 4

Sorhossz 7

Térközök használata 8

SQL irányelvek 8

Vezérlési szerkezetek 9

Kapcsos zárójelek a vezérlési szerkezetekben 9

A kapcsos zárójelek következetes használata 10

for vagy while vagy foreach? 11

Cikluson belüli vezérlés a break és a continue használatával 13

A mélyen egymásba ágyazott feltételek elkerülése 14

Névszimbólumok 14

Állandók és valódi globális változók 16

Hosszú életű változók 18

Ideiglenes változók 18

Több szóból álló nevek 19

Függvénynevek 19

Osztálynevek 20

Tagfüggvénynevek 20

Az elnevezések következetessége 20

A változónevek és sémanevek egyeztetése 21

A zavaros kódok elkerülése 22

Rövid címkék 22

HTML készítése echo-val 23

Következetes zárójelezés 23

Dokumentáció 24

Soron belüli megjegyzések 25

API dokumentáció 26

A phpDocumentor használata 27

További olvasmányok 31

 

 

2. fejezet Objektumközpontú programozás tervezési minták segítségével

Bevezetés az objektumközpontú programozásba 34

Öröklés 36

Egységbe zárás 37

Statikus tulajdonságok és tagfüggvények 38

Különleges tagfüggvények 39

Rövid bevezetés a tervezési minták használatába 41

Az Illesztő minta 41

A Sablon minta 46

Többalakúság 47

Felületek és típusjelzések 49

A Gyár minta 52

Az Egyke minta 54

Túlterhelés 56

Az SPL és a bejárók 62

__call() 68

__autoload() 71

További olvasmányok 71

 

 

3. fejezet Hibakezelés

A hibák kezelése 76

A hibák megjelenítése 76

A hibák naplózása 78

A hibák figyelmen kívül hagyása 79

Műveletek végzése hiba esetén 80

A külső hibák kezelése 81

Kivételek 85

Kivételhierarchiák használata 88

Típusos kivételek - egy példa 90

A kivételek láncolása 96

Konstruktoron belüli hibák kezelése 99

Felső szintű kivételkezelő beállítása 100

Adatérvényesítés 103

Mikor használjunk kivételeket? 108

További olvasmányok 108

 

 

4. fejezet Megvalósítás PHP nyelven: a sablonok és a Világháló

Smarty 110

A Smarty telepítése 111

Első Smarty sablonunk: Helló, Világ! 112

Lefordított sablonok a háttérben 113

A Smarty vezérlési szerkezetei 114

A Smarty függvényei és egyebek 117

Átmeneti tárolás a Smarty-val 120

A Smarty haladó szolgáltatásai 122

Saját sablonrendszer készítése 123

További olvasmányok 125

 

5. fejezet Megvalósítás PHP nyelven: önálló programok

A PHP parancssori felülete: bevezetés 129

A bemenet és kimenet kezelése 130

A parancssori argumentumok feldolgozása 132

Gyermekfolyamatok létrehozása és kezelése 135

A megosztott erőforrások bezárása 136

Változók megosztása 137

Takarítás a gyermekek után 137

Jelzések 139

SIGCHLD 140

SIGALRM 142

Egyéb szokványos jelzések 144

Démonok írása 144

A munkakönyvtár megváltoztatása 145

A kiváltságok feladása 146

A kizárólagosság biztosítása 147

A tanultak összefoglalása: figyelőszolgálat 147

További olvasmányok 157

 

 

6. fejezet Egységtesztelés

Bevezetés az egységtesztelésbe 161

Egységtesztek írása automatikus egységteszteléshez 161

Első egységtesztünk 161

Több teszt hozzáadása 163

Kódon belüli és kívüli egységtesztek 164

Kódon belüli tesztelés 164

Önálló tesztek 166

Egyszerre több teszt futtatása 168

A PHPUnit további szolgáltatásai 169

Beszédesebb hibaüzenetek létrehozása 170

Több tesztfeltétel hozzáadása 171

A setUp() és tearDown() tagfüggvények használata 173

Figyelők hozzáadása 174

Grafikus felület használata 176

Tesztvezérelt tervezés 176

A Flesch pontszámító 177

A Word osztály tesztelése 178

1. hibajelentés 186

Egységtesztelés webes környezetben 188

További olvasmányok 191

 

 

7. fejezet A fejlesztőkörnyezet kezelése

Változatkezelés 194

A CVS alapjai 195

A fájlok módosítása 198

A fájlok különbségeinek vizsgálata 199

Több fejlesztő egy munkán 202

Jelzőcímkék 204

Ágak 205

A fejlesztési és üzemi környezet fenntartása 206

Csomagkezelés 211

A kód csomagolása és kibocsátása 213

Bináris állományok csomagolása 216

Az Apache csomagolása 217

A PHP csomagolása 218

További olvasmányok 219

 

 

8. fejezet Hogyan tervezzünk jó API-t?

Újraépíthetőség és bővíthetőség 222

A logika függvényekbe zárása 223

Egyszerű osztályok és függvények használata 224

Névterek használata 225

A csatolás csökkentése 227

Védekező kódolás 228

Kódolási szabványok felállítása 229

Fertőtlenítési eljárások használata 229

További olvasmányok 231

 

 

Gyorstárak

9. fejezet Teljesítményfokozás külső módszerekkel

Teljesítményfokozás a nyelv szintjén 235

Fordítói gyorstárak 236

Nyelvi optimalizálók 239

HTTP gyorsítók 240

Fordított helyettesek 242

Teljesítményfokozás az operációs rendszer szintjén 246

Helyettes gyorstárak 247

Gyorstárbarát PHP alkalmazások 248

Tartalomtömörítés 253

További olvasmányok 254

RFC-k 254

Fordítói gyorstárak 254

Helyettes gyorstárak 255

Tartalomtömörítés 255

 

 

10. fejezet Adatösszetevők átmeneti tárolása

A gyorstárazással kapcsolatos kérdések 258

A gyorstárakban tárolható adatösszetevők felismerése 259

Saját vagy előre elkészített osztályok - melyiket válasszuk? 259

Gyorstárak a memóriában 263

Gyorstárak szerkezet nélküli fájlokban 263

A gyorstár méretének fenntartása 263

A gyorstárak egyidejű használata és összhangja 264

DBM alapú gyorstárak 271

A gyorstárak egyidejű elérése és összhangja 273

A tartalom érvénytelenítése és a gyorstárak karbantartása 273

Gyorstár a megosztott memóriában 278

Süti alapú gyorstárak 279

A gyorstár méretének kezelése 284

Egyidejű hozzáférés és az adatok összhangja 285

Gyorstárak használata az alkalmazásokban 285

Honlapok tárolása 288

Az Apache mod_rewrite modulja - tárolás okosan 295

Oldalak részeinek tárolása 299

Lekérdezések és gyorstárak 302

További olvasmányok 304

 

 

11. fejezet Számítási újrahasznosítás

Példa: a Fibonacci-sorozat 305

Újrahasznosítható adatok tárolása egy kérelmen belül 312

Újrahasznosítható adatok tárolása kérelmek között 315

Számítási újrahasznosítás a PHP-ben 319

PCRE-k 319

Elemszám és hossz 320

További olvasmányok 320

 

 

Elosztott alkalmazások

12. fejezet Adatbázisok használata

Ismerkedés az adatbázisok és lekérdezések működésével 324

Lekérdezések vizsgálata az EXPLAIN segítségével 327

Melyik lekérdezést javítsuk? 329

Adatbázis-elérési minták 331

Ad hoc lekérdezések 332

Az aktív rekord minta 333

A leképező minta 335

Az egyesített leképező minta 341

Az adatbázis-elérés hatékonyságának növelése 343

Az eredményhalmaz korlátozása 343

Lusta előkészítés 345

További olvasmányok 348

 

 

13. fejezet A felhasználók hitelesítése és a munkamenetek biztonsága

Egyszerű hitelesítési sémák 350

Egyszerű HTTP-hitelesítés 351

A lekérdezési karakterlánc csatolása 352

Sütik használata 352

Felhasználók bejegyzése 354

A jelszavak védelme 354

Védelem az emberi tényező kihasználása ellen 357

A hitelesítés fenntartása - hogyan győződjünk meg arról, hogy még mindig ugyanahhoz beszélünk? 358

A $_SERVER[REMOTE_IP] változatlanságának ellenőrzése 358

A $_SERVER[USER_AGENT] változatlanságának ellenőrzése 359

Titkosítatlan sütik használata 359

A követendő módszerekről 359

Titkosítás használata 360

Az elavulás megvalósítása 360

Felhasználók azonosítása 361

Hitelesítés a gyakorlatban - egy példa 361

Egyszeri feliratkozás 367

Az egyszeri feliratkozás megvalósítása 369

További olvasmányok 375

 

 

14. fejezet Munkamenetek kezelése

Ügyfél oldali munkamenetek 378

Munkamenetek megvalósítása sütik segítségével 379

A példa továbbfejlesztése 382

Kiszolgáló oldali munkamenetek 383

A munkamenet-azonosító nyomon követése 385

Beépített módszerek a munkameneti azonosítók követésére 385

A PHP munkamenetek alapjai 387

Saját munkamenet-kezelő módszerek 389

Szemétgyűjtés 395

Szemétgyűjtés a files kezelőben 396

Szemétgyűjtés az mm kezelőben 396

Szemétgyűjtés a MySession kezelőben 396

Ügyfél vagy kiszolgáló oldali munkamenetek - melyiket válasszuk? 397

Saját beépített munkamenet-kezelők megvalósítása 397

 

 

15. fejezet Elosztott környezet kiépítése

Mi is az a fürt? 399

Fürtök tervezése 402

Fő az előrelátás 403

Csapatjáték 404

A függvények névterei 404

Hivatkozzunk a szolgáltatásokra teljes leíró nevekkel! 405

Az erőforrások névterei 405

Tartalom elosztása a fürtökben 406

Vízszintes méretezés 407

Különleges célú fürtök 407

Gyorstárak elosztott környezetben 408

Központosított gyorstárak 411

Teljesen szétterített gyorstárak készítése a Spread segítségével 413

Adatbázisok méretezése 417

Mester-szolga rendszerekre épülő alkalmazások készítése 421

A többszörözés alternatívái 423

A relációs adatbázis-kezelő rendszerek alternatívái 424

További olvasmányok 425

 

 

16. fejezet RPC: Együttműködés távoli szolgáltatásokkal

XML-RPC 428

Egy kiszolgáló felépítése: a MetaWeblog API megvalósítása 430

Az XML-RPC szolgáltatások automatikus felderítése 435

SOAP 438

WSDL 441

A sysem.load átírása SOAP szolgáltatássá 443

Amazon webszolgáltatások és összetett típusok 446

Helyettes kód készítése 448

A SOAP és az XML-RPC összehasonlítása 449

További olvasmányok 450

SOAP 450

XML-RPC 450

Webnaplózás 451

Nyilvánosan elérhető webszolgáltatások 451

 

 

Teljesítmény

17. fejezet Teljesítménymérés: teljes alkalmazások tesztelése

A szűk keresztmetszetek passzív azonosítása 456

Terhelésképzők 458

ab 459

httperf 460

A napló alapú terhelésképző 461

A munkamenet-szimulátor 462

A valósághű adatképző 462

Daiquiri 463

További olvasmányok 464

 

18. fejezet Profilkészítés

A jó PHP profilkészítő titka 466

Profilkészítő alkalmazások - a bőség zavarával küszködve 466

Az APD telepítése és használata 467

Egy nyomkövetési példa 469

Egy nagyobb alkalmazás profiljának elkészítése 471

Az általános gyengeségek felderítése 477

A felesleges szolgáltatások eltávolítása 480

További olvasmányok 485

 

19. fejezet Szintetikus mérés: kódblokkok és függvények értékelése

A mérés alapjai 489

A mérési környezet kiépítése 489

A PEAR mérőcsomagja 490

A mérőrendszer kiépítése 493

Véletlen adatok lépésenkénti használata 494

A mérőrendszer terhelésének levonása 495

Egyéb időmérési adatok 497

Mérések a kódban 500

Mérési példák 501

Karakterek keresése a karakterláncok elején 502

Makrókifejtés 503

Beszúrás vagy összefűzés? 510

 

 

Bővíthetőség

20. fejezet A PHP és a Zend Engine titkai

A Zend Engine működése: opkódok és optömbök 516

Változók 522

Függvények 526

Osztályok 528

Az objektumkezelők 530

Objektumok létrehozása 531

Más fontos adatszerkezetek 531

A PHP kérelmek életciklusa 534

A SAPI réteg 535

A PHP magja 537

A PHP bővítési API 538

A Zend bővítési API 539

Összeáll a kép 541

 

21. fejezet A PHP bővítése: I. rész

A bővítmények alapjai 544

Bővítményváz készítése 545

Bővítmények felépítése és engedélyezése 548

Függvények használata 549

Egy egyszerű példa 549

A típusok és a memória kezelése 551

Karakterláncok feldolgozása 555

Más visszatérési makrók 556

Típusok kezelése 557

Típusátalakítások és elérési makrók 562

Erőforrások használata 566

Hibák visszaadása 571

Modulhorgok használata 572

Modulok indítása és leállítása 572

Modulok kikapcsolása 578

Kérelmek indítása és kikapcsolása 579

Egy példa: a Spread ügyfél burkolója 581

MINIT 582

MSHUTDOWN 583

A modul függvényei 583

A Spread modul használata 591

További olvasmányok 592

 

 

22. fejezet A PHP bővítése: II. rész

Osztályok megvalósítása 593

Új osztály létrehozása 595

Tulajdonságok hozzáadása 596

Osztályöröklés 598

Tagfüggvények hozzáadása 599

Konstruktorok hozzáadása 602

Kivételek kiváltása 603

Saját objektumok és privát változók 604

Gyártófüggvények használata 607

Felületek létrehozása és megvalósítása 608

Saját munkamenet-kezelők készítése 610

A folyamkezelő API 615

További olvasmányok 626

 

 

23. fejezet SAPI-k készítése és a Zend Engine bővítménye

A SAPI-król 627

A CGI SAPI 627

A CGI SAPI alkalmazás 635

A beágyazási SAPI 638

SAPI bemeneti szűrők 640

input_filter 641

A treat_data és a default_post_reader 645

A Zend Engine módosítása és belső vizsgálata 646

Figyelmeztetések helyett kivételek 646

Opkódok kiíratása 649

APD 652

APC 654

A Zend bővítmények visszahívható függvényei 654

Házi feladat 657

 

 

Tárgymutató 659

Vissza a lap tetejére

mesekönyv

szoftver