PHP haladóknak - Fekete Könyv [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Tartalomjegyzék 1. fejezet

PHP-bevezetı ............................................. 1

Áttekintés ......................................................................... 2 Programozási 1x1 ................................................................... 3 Egy kis történelem ............................................................... 3 Hibakeresés .......................................................................... 5 A PHP elınyei ......................................................................... 5 Értelmezés kontra fordítás ....................................................... 5 Részkódok kontra programozás .......................................... 6 Kimenet-ellenırzés .................................................................. 6 PHP4 ............................................................................................ 7 Új függvények .......................................................................... 7 Új név ...................................................................................... 7 Sebesség .............................................................................. 8 PHP-hibakeresı .................................................................... 8 A Windowsos COM .................................................................. 9 Reguláris kifejezések függvényei ........................................ 9 PHP és Apache............................................................................ 9 A platformfüggetlen Apache ................................................. 9 Modul vagy CGI ................................................................. 10 A PHP Zenje ........................................................................... 11 Szintaktika ......................................................................... 11 Ha, akkor, különben ........................................................... 12 A megfelelı adattípus ......................................................... 14 Szőkítsd a bejáratot, tágítsd a kijáratot ............................. 14

Gyors megoldások

................................................... 15

Apache-konfiguráció ................................................................ 15 Egyedi Apache-függvények ..................................................... 15 apache_lookup_uri() ........................................................... 16 apache_note()........................................................................ 16 ascii2ebcdic() és ebcdic2ascii() ............................................. 17 getallheaders() .................................................................. 17 PHP-konfiguráció ...................................................................... 17 dl{) ..................................................................................... 17 extension_loaded() ............................................................ 18 Hibakeresés............................................................................... 18 assert() .................................................................................. 18 assert_options() ................................................................ 19 die() ................................................................................... 19 Hibák ..................................................................................... 20 Naplózás .................................................................................... 20 Kimenet-ellenırzés .............................................................. 20

Biztonság..................................................................................... 21 Reguláris kifejezések ................................................................. 21 ereg() ................................................................................... 21 ereg_replace() ......................................................................... 22 eregi() ...................................................................................... 22 eregij-eplace() ................................................................... 23 split() ................................................................................... 23 splitiQ ................................................................................... 23

2. fejezet: Adatok.............................................................25 Áttekintés ........................................................................ 26 Adattípusok ............................................................................ 26 Változók .............................................................................. 26 Automatikus létrehozás ........................................................... 27 Konstansok ............................................................................. 27 Hatókör.................................................................................... 28 Mőveletek az adatokkal .......................................................... 28 Kifejezések .............................................................................. 29 Operátorok ........................................................................... 30 Ellenırzés és szerkezet ..................................................... 37 Függvények ........................................................................ 44 Kategóriák és objektumok ................................................ 44 Adatok az adatbázisoknak ................................................. 44 Adatok a HTML-nek ........................................................... 44 Dátum és idı .......................................................................... 45 Julianus-dátum ..................................................................... 45 Idı ....................................................................................... 45 Naptár ..................................................................................... 46 Matematika ................................................................................ .48 Egész matematika ................................................................... 48 Lebegıpontos matematika .................................................. 49 Tetszıleges pontosságú matematika ...................................... 49

Gyors megoldások

. ................................................. .51

Adatok létrehozása ..................................................................... 51 Sztring-adatok .......................................................................... 51 Egész és lebegıpontos adatok ............................................... 52 Adatok ellenırzése ................................................................ 52 Adatkonvertálás .......................................................................... 55 Sztringfüggvények ...................................................................... 57 rand(), srand() és microtime() ................................................ 62 Dátum és idı kiszámítása .......................................................... 63 Húsvét ..................................................................................... 65

VI

3. fejezet: Tömbök .......................................................... 67 Áttekintés ........................................................................ 68 Egyszerő tömbök ................................................................... 68 A világ legegyszerőbb tömbje ......................................... 68 A tömböket O-tól számozzuk ............................................... 69 A tömb elemeit bárminek elnevezhetjük ......................... 70 Tömblétrehozó függvények ................................................. 71 Lehetséges problémák ..................................................... 71 Többdimenziós tömbök ......................................................... 72 A tömbmutató ........................................................................ 73 Tömbök rendezése ................................................................ 74 Push, Pop, Pad és Mérge ...................................................... 75 Push és Pop ....................................................................... 76 Pad .................................................................................... 76 Mérge..............................................^ ................................. 77

Gyors megoldások ........................................................ 78 Tömbök létrehozása listából az array()-jel ........................ 78 Tömbök létrehozása sztringböl az explode()-dal ............. 78 Tömbök létrehozása sztringböl az implode()-dal ............. 79 Elemi SQL ...................................................................... 79 select ............................................................................. 80 where ................................................................................. 80 order by ......................................................................... 80 group by............................................................................. 80 SQL építése ................................................................... 80 Az adatok tartományának kijelölése a range() segítségével 83 Kulcstartomány kijelölése a range() és az array_flip() segítségével 84 Duplikát tömbértékek megszüntetése az array_flip{) segítségével 84 Tömb véletlenszerősítése a shuffle() segítségével ................85 Bannerek véletlenszerősítése az array_rand()-dal ............86 Fájl tömbbe olvasása a file() segítségével ........................88 Tömb rendezése érték szerint a sort() segítségével ..............89 Asszociatív tömb rendezése érték szerint az asort() segítségével 90 Tömb érték szerinti fordított sorrendbe rendezése az rsort() segítségével ...........................................................................90 Asszociatív tömb érték szerinti fordított sorrendbe rendezése az arsort() segítségével ...........................................................................91 Asszociatív tömb kulcs szerinti rendezése a ksort() segítségével 92 Tömb érték szerinti természetes rendezése a natsort() segítségével 92 Tömb nem természetes rendezése az usort{) segítségével . 95 Fordított ciklus a tömbelemeken ........................................... 99 Ciklus a többdimenziós tömbökön ...................................... 100

VII

4. fejezet: Bankkártyák ................................................ 103 Áttekintés ...................................................................... 104 Kereskedıi bankszámla

Gyerekek

.......... , ........................................ 105

............................................................................. 106

Számlázási név ............................................................... 106 Biztonság................................................................................... 106 Szerver ...................................................................................... 106 Hash-elés................................................................................... 107 Titkosítás .............................................................................. 109 Az mcrypt telepítése .......................................................... 109 mcrypt-függvények ........................................................... 109 Elektronikus fizetési szoftverek .............................................. 117 CyberCash ......................................................................... 117 Payflow ................................................................................... 119 CCVS .................................................................................... 120

Gyors megoldások ...................................................... 122 Adatok hash-elése

............................................................ 122

mhash() ............................... mhash_get_hash_name() .................... mhash_get_block_size() ..................... mhash_count() ........................... mhash_keygen_s2k() .......................

122 124 124 125 125

5. fejezet: MySQL és PostgreSQL ............................... 127 Áttekintés.......................................................................128 Történet ................................................................................. 128 MySQL ................................................................................... 129 PostgreSQL ....................................................................... 129 Néhány különbség .................................................................... 130 Dátumok ................................................................................. 130 Kis- és nagybetők megkülönböztetése.................................. 130 Tranzakciók ............................................................................ 131 Tárolt eljárások .................................................................... 131 Triggerek ................................................................................ 132 Nézetek ............................................................................. 132 Adattípusok .......................................................................... 133 Bitek ....................................................................................... 133 Egész számok ....................................................................... 133 Lebegıpontos számok ..................................................... 134 Sztringek ................................................................................ 135 Blobok ............................................................................... 136 Dátum és idı .......................................................................... 136 A PostgreSQL különleges típusai .......................................... 137 Azonosítók beillesztése ......................................................... 138 Platformfüggetlenség ............................................................... 140 VIII

Adatbázis nyers adatokból ................................................ 140 Adatbázisok és tömbök .......................................................... 140 Indexelni vagy nem indexelni ............................................ 140 Kapcsolatok.............................................................................. 141 ODBC ......................................................................................141

Gyors megoldások



.....................,.......................... 142

Kapcsolódás az adatbázishoz .................................................142 Az adatbázisok listázása..........................................................144 Adatbázistáblák megjelenítése ............................................................................................................................... 14 6 Táblák mezıinek megjelenítése ............................................. 148 Táblák adatainak megjelenítése ..............................................152 Adatsor beillesztése .................................................................157 Adatbázis létrehozása ..........................................................160 Táblák létrehozása ....................................................................160 Adatbázisok használata session-ökhöz ...........................161 A kód megtisztítása ..................................................................169

6. fejezet: Adatbázisok ................................................ 173 Áttekintés ......................................................................174 SQL ............................................................................................174 Indexeljünk vagy ne indexeljünk ............................................174 Kapcsolatok - Relációk ...........................................................175 Állandó kapcsolatok ........................................................... 175 ODBC ...................................................................................... 176 DB2............................................................................................. 178 SAP DB ...................................................................................... 178 Más adatbázisok .................................................................. 179 Adabas ................................................................................. 179 A filePro olvasása ............................................................... 179 A FroníBase olvasása ...........................................................180 Hyperwave ........................................................................ 181 Informix .................................................................................. 182 Ingres II ............................................................................. 182 InterBase ........................................................................... 182 Microsoft Access.................................................................... 183 Microsoft SQL Server ....................................................... 184 mSQL..................................................................................... 184 Oracle .................................................................................... 185 Ovrimos SQL Server ............................................................. 186 SESAM/SQL-Server ........................................................... 186 Solid ....................................................................................... 187 Sybase ................................................................................ 187 Adatbázis-absztrakciós rétegek ........................................ 188 DBA-utasítások ..................................................................... 188 DBM-utasítások ..................................................................... 189 DBX-utasítások ..................................................................... 190 IX

Gyors megoldások ......................................................192 Adatbázis elérése ODBC-vel ............................................... 192 Eredmények ........................................................................ 195 Hibák ................................................................................ 199 Mezıkkel kapcsolatos információk ...................................... 199 További utasítások ........................................................... 200 Új utasítások ........................................................................ 204 Adatbázis elérése DBA-utasításokkal ................................... 205 Adatbázis elérése DBM-utasításokkal................................... 205 Adatbázis elérése DBX-utasítasokkal ................................ 206 Ingres II elérése .................................................................... 206 Idızítések kinyerése: út a teljesítményhez........................... 208

7. fejezet: Környezet .................................................... 213 Áttekintés ............................................................ ___ 214 Apache ...................................................................................... 214 A PHP konfigurálása ..........................................................216 Kiterjesztések ........................................................................216 A php.ini beállításai ............................................................... 217 Idıkorlát ................................................................................ 217 Környezeti változók ............................................................... 218 Biztonság .................................................................................. 218 HTTP-hitelesítés ................................................................... 218 CHMOD ............................................................................ 219 PHP kötegelt módban ......................................................... 219 A PHP ütemezése ..................................................................... 220 COM ...................................................................................... 221 Könyvtár- és fájlnevek ............................................................. 222 Linux és Unix ................................................................... 222 Windows NT ......................................................................... 223 Macintosh.............................................................................. 223 POSIX ........................................................................................ 223 A programok kommunikációjának elısegítése .................... 224 Megosztott memória ......................................................... 225 Szemaforok........................................................................... 226 Külsı programok ..................................................................... 226 Extra információ ...................................................................... 227 mnoGoSearch-függvények ................................................ 227

Gyors megoldár .......................................................... 229 A régi fájlok eltávolítása ..................................................... 229 Külsı programok végrehajtása .............................................. 233 Word-dokumentumok Rtf-formátumba konvertálása COM segítségével ........................................ 236 HTTP hitelesítés példa ............................................................ 239 Hogyan igazítsuk a kódot a környezethez? ..................... 241 Hibanaplózás ................................................................... 241

X

Menekülı látogatók ............................................................... 243 Szkript idıtúllépés ................................................................. 243 Az adatbázis kiválasztása .................................................... 244 Böngészı-alapú kódok .................................................... 245 Utasítások ellenırzése .................................................... 246 Ellenırzés a fejlécek elküldése elıtt ............................... 246 A PHP ellenırzése ........................................................... 247 A memória ellenırzése ....................................................... 247 Szokatlan formátumok megjelenítése ................................... 248 Képek biztonságos megjelenítése ......................................... 248

8. fejezet: Fájlok............................................................251 Áttekintés

................................................................. 252

Könyvtárak ............................................................................... 252 Apache-nézet ................................................................... 252 PHP-nézet ........................................................................ 252 Nézetek váltása ................................................................253 Fájltípusok ..............................................................................253 Fájlok megjelenítése............................................................. 253 Fájlok létrehozása és megváltoztatása ........................... 253 Fájlok másolása ................................................................254 Ideiglenes fájlok ............................................................... 254 Fájlok feltöltése .....................................................................254 Fájllista-cache ......................................................................255 Engedélyezés/Jogosultságok ............................................255

Gyors megoldások ...................................................... 256 Könyvtárak listázása .............................................................256 Közös kód ..............................................................................256 Az is_dir() megközelítés ...................................................256 A filetype() megközelítés .......................................................257 A get directory_file() megközelítés ..................................258 Formázott fájllista ..............................................................259 Egyéb könyvtárfüggvények ................................................260 Könyvtárak létrehozása és törlése ....................................262 Fájlok listázása az attribútumokkal együtt ............................263 Általános kód ....................................................................263 A get_directory_file() kiterjesztése ........................................263 Formázott fájllista ..............................................................265 További attribútumok .............................................................266 Lemezterület-kimutatás ........................................................... 267 Általános kód .................................................................... 267 A get_directory_file() kiterjesztése ..................................267 Üres lemezterület ............................................................. 268 Fájllista és elfoglalt lemezterület ...................................... 270 A könyvtárak által elfoglalt lemezterület kiíratása .......... 272 A legnagyobb könyvtárak által elfoglalt lemezterület kiíratása 273

XI

A legnagyobb fájlok által elfoglalt lemezterület kiíratása . . . 274 Képfájlok attribútumainak kiíratása ....................................... 275 Képinformációk kigyőjtése .................................................... 276 Képinformációk megjelenítése .............................................. 277 Bármilyen típusú adat megjelenítése ............................... 278 Általános kód .................................................................... 278 Szövegfájl megjelenítése ...................................................... 279 HTML-fájl megjelenítése .................................................... 280 Bármilyen típusú fájl megjelenítése ............................... 281 Üres fájlok létrehozása ....................................................... 283 Fájlok feltöltése .................................................................... 284 CRC-számolás fájlokra ............................................................ 286

9. fejezet: Őrlapok ........................................................ 289 Áttekintés

................................................................ 290

Alternatív navigáció................................................................. 290 HTML vagy tisztán PHP?......................................................... 291 A minimális HTML ............................................................... 292 Bell és Whistle ......................................................................... 293 Őrlapkérdések....................................................................... 295 összetett mőveletek ................................................................ 298 JavaScript ........................................................................... 299 A csinos gördülımenük eltávolítása ..................................... 299 Mezık érvényesítése a szerveren ....................................... 299 Hosszú őrlapok ................................................................... 300 A hosszú őrlapok feldarabolása ........................................... 300 Az információ oldalról oldalra való továbbítása ............... 301 Használható hosszú őrlapok tervezése ........................... 303 Fájlok feltöltése ....................................................................... 304

Gyors megoldások...................................................... 307 Őrlap létrehozása..................................................................... 307 Őrlapok létrehozása függvényekkel ................................. 307 Hosszú lista létrehozása őrlapon belül .......................... 309 Oszlopok igazítása ................................................................... 311 Egy válasz a sok közül ...................................................... 314 Egy válasz a sok közül rádiógombokkal ............................... 317 Több válasz a sok közül .......................................................... 318 Válaszok megırzése és hibák kiemelése ........................ 323

10. fejezet: Függvények .............................................. 327 Áttekintés

. ................................................................ 328

A világ legrövidebb függvénye ............................................329 Értékek visszaadása ...........................................................329 Értékek bevitele ........................................................................332 Tetszıleges értékek .................................................................333 XII

Változó számú beviteli mezık ................................................ 334 Hatáskör .................................................................................... 336 Statikus változók .................................................................. 339 Rekurzió .................................................................................... 341 Változóban elnevezett függvények ................................... 341 Sorrend...................................................................................... 342

Gyors megoldások .......................................................343 Függvény létrehozása .......................................................... 343 Globális változó deklarálása................................................... 344 Statikus változó deklarálása .............................................. 345 Függvény tárolása változóban .......................................... 346 Alapértelmezett függvényparaméterek használata .............. 347 A függvény létezésének ellenırzése ..................................... 348 A call_user_func() használata ................................................. 349 A create_function{) használata .......................................... 350 A func_get_arg() és a func_num_args() használata ............ 351 Afunc_get_args() használata ............................................ 352 Shutdown-függvény beiktatása .............................................. 353

11. fejezet: Képek ......................................................... 355 Áttekintés

.................................................................356

GIF ...........................................................................................356 PNG.............................................................................................356 JPEG .......................................................................................... 357 PDF .............................................................................................358 ClibPDF .............................................................................358 FDF ....................................................................................363 PDFIib ....................................................................................366 Flash és Shockwave ........................................................... 366 A fájl ....................................................................................... 367 Képkocka ........................................................................... 367 Szín ....................................................................................368 Objektumok ............................................................................368 Szöveg ................................................................................ 371 Bittérképek és szimbólumok .............................................371 Mőveletek .............................................................................. 372 Gombok ............................................................................. 373 Képadatbázisok ..................................................................... 374 MySQL ................................................................................... 374 Egyéb SQL-adatbázisok ................................................... 375 Hyperwave ........................................................................ 375 A képi modul telepítése ........................................................... 375 Képek megjelenítése ............................................................. 375 Mindig használd az Alt-ot az image tag-ben ......................... 376 Használd a méretinformációt az image tag-ben ................... 377 Vázlatképek létrehozása........................................................ 377 ____ ^ XIII

Képek létrehozása ................................................................... 377 Képek változtatása .................................................................. 381 Színek változtatása .............................................................. 381 Átméretezés és újbóli mintavételezés ............................. 382 Külsı programok ...................................................................... 383 A megfelelı formátum kiválasztása ....................................... 383

Gyors megoldások ......................... , ........................ 384 Képek listázása ........................................................................ 384 Képinformációk győjtése ....................................................... 384 Képinformáció kiíratása ............................................................. 385 Szöveg létrehozása PDF-dokumentumban ClibPDF-fel . . . 391 Szöveg létrehozása PDF-dokumentumban PDFIib-bel . . . . 392 Szöveg létrehozása GIF-, JPEG- vagy PNG-képekben . . . . 394 Diagram létrehozása GIF-, JPEG- vagy PNG-képekben . . . 395

12. fejezet: Nemzetközi beállítások ............................ 399 Áttekintés ...................................................................... 400 Nyelv vagy ország észlelése ................................................... 401 Nyelv vagy ország észlelése a böngészıbıl ................... 401 Nyelv vagy ország észlelése az Apache-csal ....................... 402 A legjobb megoldás a PHP .............................................. 402 Nyelvi követelmények ......................................................... 404 Alkalmazásspecifikus vagy honlapspecifikus beállítás . . . 404 GNU-recode ......................................................................... 405 GNU-gettext ........................................................................... 406 Helyesírás.................................................................................. 406 Szóegyeztetés .................................................................. 407 Aspell ................................................................................. 409 Pspell ................................................................................ 409 Több-bájtos karakterek ...................................................... 412

Gyors megoldások ................................................... 414 Országinformáció létrehozása ................................................ 414 Országinformáció tárolása ................................................. 416 Országinformáció visszakeresése ......................................... 419 Session-ök használata az országinformációkra ................... 422 Üzenet keresése más nyelvben a GNU-gettext-tel ........... 423 Szöveg keresése más nyelvekben SQL-lel ........................... 425 A karaktertípusok ellenırzése ................................................ 428 Kifejezések és helynevek egyeztetése levenshtein()-nel . . 431

13. fejezet: Internet ....................................................... 433 Áttekintés...................................................................... 434 URL ............................................................................................ 434 Séma vagy protokoll ............................................................. 435 Hıst .................................................................................. 435 XIV

V Elérési út ............................................................................... 435 Oldal ...................................................................................... 436 Töredék.................................................................................. 436 Lekérdezés ............................................................................ 436 Különleges karakterek........................................................... 437 Base64 kódolású szöveges sztringek .............................. 437 Más szerverek böngészése ..................................................... 438 Csatolófüggvények .................................................................. 439 SNMP .................................................................................... 442 Curl............................................................................................. 445 FTP ............................................................................................. 445

Gyors megoldások ....................................................... 447 Base64 kódolás ........................................................................ 447 A web böngészése PHP-val .....................................................448 Linkek ellenırzése ....................................................................451 FTP-függvények használata ....................................................453 Curl használata ....................................................................460 Curl-opciók ..........................................................................461

14. fejezet: LDAP .......................................................... 467 Áttekintés

................................................................. 468

Telepítés .....................................................................................469 Terminológia ..............................................................................469 DN - megkülönböztetett nevek ..........................................469 RDN - relatív megkülönböztetett nevek ...............................470 Szintek ................................................................................471 Elemek ...................................................................................471 Attribútumok ...........................................................................471 Objektum ...........................................................................472 DIT ......................................................................................... 472 Séma ................................................................................. 472 LDIF ....................................................................................... 473 Szerverjellemzık ................................................................... 473 Küldés ................................................................................ 473 Másolás ............................................................................. 473 Biztonság ........................................................................... 474 LDAP-függvények ..................................................................... 474

Gyors megoldások ....................................................... 478 LDAP Windows NT alatti telepítése ........................................ 478 PHP-kiterjesztés ................................................................. 478 OpenLDAP-szerver ............................................................... 478 A szerver tesztelése .......................................................... 480 Csatlakozás az LDAP-hez ................................................... 481 Országkódok hozzáadása .................................................... 484 Csatlakozás ....................................................................... 485 Országkódok megszerzése ................................................... 485 XV \

Országkódok formázása ....................................................... 485 Az elsı országkód hozzáadása ............................................ 486 További országkódok hozzáadása ........................................ 487 Felhasználó hozzáadása ..................................................... 488 Közbülsı szintek hozzáadása ............................................... 489 A végsı szint hozzáadása..................................................... 489 Hibakezelés .......................................................................... 490 Az összes elem listázása ......................................................... 492 Az egy szinten levı összes elem listázása .......................... 493 Az összes szint összes elemének listázása ......................... 496 Az elemek értelmezése a listázáson belül ............................ 498

15. fejezet: Posta .......................................................... 501 Áttekintés ...................................................................... 502 IMAP ........................................................................................... 502 Postaládafüggvények ....................................................... 503 Levelezési függvények ..................................................... 504 Kiemelıfüggvények ............................................................... 506 Sztringkonvertáló függvények ........................................... 506 Egyéb függvények ................................................................. 512 Levélfejrészek ...................................................................... 514 Minimális fejrészek ........................................................... 514 További fejrészek .............................................................. 515 MIMÉ .......................................................................................... 515 „ MIME-Version ........................................................................ 516 Content-Type .................................................................... 516 Content-Transfer-Encoding .............................................. 516 Content-ID ........................................................................ 516 Content-Description .............................................................. 517 Content-Disposition ............................................................... 517 Mőködési üzemmódok............................................................. 517 Offline .................................................................................... 517 Online .................................................................................... 518 Kapcsolat nélkül ............................................................... 519 Átmeneti ................................................................................ 519

Gyors megoldások

. . .............................................. 520

A PHP levelezı függvényeinek telepítése ............................. 520 Windows NT .......................................................................... 520 Unix ................................................................................... 520 Levél küldése ............................................................................ 521 Egy levél küldése ............................................................. 521 A From fejrész elküldése ................................................ 523 Több fejrész küldése ............................................................. 524 Egy üzenet küldése több címzettnek .................................... 525 Levél küldése csatolt állománnyal .................................... 527 Tesztadatok kiválasztása ...................................................... 528

XVI

Fájlinformációk győjtése .................................................... 528 MIME-f ej részek létrehozása .............................................. 530 MIME-üzenetrészek létrehozása ........................................ 531 Nem MIME-fejrészek létrehozása ..................................... 532 A levél elküldése .................................................................... 533 Levelezési címek ellenırzése ............................................. 533

16. fejezet: Hálózatok ................................................... 537 Áttekintés

__ .......................................................... . 538

A hibakeresı ..................... , ................................................. 538 DNS- és MX-rekordok ............................................................... 538 Host-nevek ................................................................................. 539 IP-címek .................................................................................. 539 ip2long() .............................................................................. 540 Iong2ip{) .............................................................................. 541 Protokollnevek és -számok ..................................................... 541 Szolgáltatás nevek és port-számok ....................................... 541 getservbyname() .................................................................... 541 getservbyport() .................................................................. 542 Csatolók ..................................................................................... 542 pfsockopen() .......................................................................... 542 socket_get_status() ............................................................... 543 socket_set_blocking() ....................................................... 543 socket_set_timeout() ............................................................. 544 Rendszernapló ................................................................... 544 define_syslog_variables() ................................................. 544 openlog() ........................................................................... 544 syslog() .................................................................................. 545 closelog() ........................................................................... 545 NFS ............................................................................................. 546 NIS ......................................................................................... 546 Térkép .................................................................................... 546 yp_get_default_domain() ....................................................... 547 yp_master()............................................................................ 547 yp_order() .............................................................................. 547 yp_match() ........................................................................ 548 yp_first() ............................................................................ 548 yp_next() ................................................................................ 548 WDDX ......................................................................................... 548 WDDX csomag ...................................................................... 549 CORBA....................................................................................... 550 orbitobject() ............................................................................ 550 orbitenum() ............................................................................ 551 orbitstruct{) ........................................................................ 551 satellite_caught_exception() ............................................. 551 satellite_exception_id() ..................................................... 551

XVII

sateHite_exception_value() ............................................... 551 Tömörítés ................................................................................... 552 bzip2 ..................................................................................... 552 gzip ........................................................................................ 554

Gyors megoldások...................................................... 555 DNS-rekordok vizsgálata ......................................................... 555 MX-rekordok megszerzése ............................................... 556 A host-név megszerzése ...................................................... 557 A host-név megszerzése cím alapján ................................... 558 A host-cím megszerzése név alapján ................................... 558 Host-címek listázása név alapján ......................................... 560 Protokoll szám ok felsorolása ............................................. 561 Adatok besorolása WDDX-szel .......................................... 562 wddx_serialize_value() ..................................................... 562 wddx_deserialize() ............................................................ 563 serialize() .......................................................................... 563 wddx_serialize_vars{) ....................................................... 564 wddx_deserialize() változókkal ........................................ 564 wddx_packet start() ......................................................... 565 wddx_add_vars() ................................................................... 565 wddx_packet_end() ............................................................... 565 Adatok tömörítése zlib használatával .................................... 566 Saját napló írása ................................................................. 568

17. fejezet: Objektumok ............................................... 569 Áttekintés ......................................................................570 Osztályok .................................................................................. 570 new........................................................................................ 571 Mint egy változó ............................................................... 571 stdCIass ............................................................................ 572 Tulajdonságok ....................................................................... 574 var .................................................................................... 574 Konstruktır............................................................................ 575 $this ................................................................................... 575 Módszerek ........................................................................... 576 Megsemmisítı ....................................................................... 577 Osztályok kiterjesztése ...................................................... 579 Függvények hozzáadása ...................................................... 579 Konstruktırök a kiterjesztett osztályokban ........................... 579 Függvények cseréje ......................................................... 580 Függvények törlése............................................................... 581 Többszörös kiterjesztések..................................................... 582 :: ............................................................................................ 582 parent .................................................................................... 583 Szoftverterjesztés és dokumentáció ...................................... 583 Többszörös adatelemek és állapot ....................................... 583 XVIII

Többszörös kimenet

Gyors megoldások

......................................................... 584

. . .

............................. 5 8 5

Objektumok mentése sessiönökben és a __ sleepQ használata 585 Objektumfüggvények használata ...................................... 589 call_userjmethod() ............................................................ 589 call_user_method_array() ................................................ 590 c!ass_exists() .................................................................... 591 get_class{) ........................................................................ 591 get_class_methods()............................................................. 591 get_ciass_vars() ............................................................... 592 get_declared_classes{) ...................................................... 592 get_object_vars() ............................................................. 593 get_parent_class() ................................................................ 593 is_subclass_of() ............................................................... 594 method_exists() .................................................................... 594 Honlap testreszabása objektumokkal ................................... 594 Hírcsoportok olvasása ............................................................ 598

18. fejezet: Keresés ..................................................... 605 Áttekintés ..................................................................... 606 Keresıprogramok felkutatása ................................................ 606 LDAP ................................................................................ 607

Z39.50 ........................................................................................... 607 YAZ ............................................................................................ 607 A YAZ telepítése ................................................................... 608 Adatforrások ......................................................................... 608 Tesztelés............................................................................... 609 RPN .................................................................................. 610 Keresés YAZ-val....................................................................... 610 Nem támogatott keresés ...................................................... 610 YAZ-függvények ................................................................610 Adatbázis alapú keresések ................................................615 Adatok megırzése eredeti formájukban ............................... 615 Rugalmas adatok ............................................................. 616 Rugalmas keresések ............................................................ 617 Az adatok oztályozása ......................................................617 Csökkenteni, de meghagyni .............................................617 Szabad szövegasszociációk használata ..........................618 Készíts nagy tárgymutatót .....................................................618

Gyors mecsnldások

.................................................620

Keresés egy szerveren ....................................................... 620 search() .............................................................................620 array_display() .................................................................. 622 Dél-Ausztráliai Állami Könyvtár ........................................ 623 Bell Labs ................................................................................624 Keresés több szerveren .................................................... 626 XIX

Adatforrás ............................................................................. 626 Keresési paraméterek .......................................................... 626 search() ............................................................................ 626 array_display() ................................................................. 630 A keresés tesztelése ............................................................ 630 Az eredmények..................................................................... 630 Keresés a google.com-on ................................................. 631 Az őrlap ............................................................................ 631 A nyers eredmények............................................................. 633 Eredmények szerkesztése ................................................... 633 Eredmények megjelenítése .................................................. 634 Adatok indexelése ................................................................... 635

19. fejezet: Session-ök ................................................639 Áttekintés ............................................ , ........................640 A honlap tulajdonosának haszna ..................................... 641 A látogató elınyei ............................................................... 641 Sessionazonosító .................................................................... 641

Cookie-k....................................................................................... 641 HTTPS .............................................................................. 642 Cookie-k vagy URL-ek ..................................................... 643 Adatok vagy adatbázisok........................................................ 643 PHP-szolgáltatások ............................................................ 644 php.ini ................................................................................... 644 PHP session-függvények ..................................................... 646 Vásárlói szolgáltatások ...................................................... 653

Gyors megoldások

. . . . . . . . . . . . . . . . . . . . . . . . . 655

Session indítása cookie-kkal és fájlokkal ............................. 655 Session indítása MySQL használatával ................................ 659 Az aktuális felhasználók megjelenítése ........................... 668 A session_end() használata ................................................... 670 Fájlok ................................................................................. 670 Adatbázisok ..................................................................... 670

20. fejezet: XML ............................................................ 675 Áttekintés ..................................................................... 676 Mi az XML? ................................................................................ 676 Miért csodálatos az XML? ..................................................... 676 Mit csinál az XML? .......................................................... 677 Mit nem csinál az XML? ................................................... 677 AZ XML nem helyettesíti a HTML-t .................................. 678 Adatok .................................................................................. 678 Külsı elemek .................................................................... 680 Nem értelmezett elemek ....................................................... 680 Komplex DTD-k írása .......................................................681 XX

Szerkezet ............................................................................... 681 Nevek ..................................................................................... 681 Attribútumok ........................................................................ 681 CDATA ............................................................................... 682 DTD .................................................................................... 682 Névmezık .............................................................................. 683 Xlink és XPointer ................................................................... 684 XML-függvények .................................................................. 684 Telepítés ................................................................................. 684 Függvények ....................................................................... 684 XSLT ........................................................................................... 691 HTML, DHTML vagy XSLT? ............................................. 691 Az XSLT telepítése ................................................................ 692 XSLT-függvények .............................................................. 692 WDDX ......................................................................................... 695 DOM ....................................................................................... 696 A DOM XML telepítése ..................................................... 696 DOM XML-függvények ..................................................... 697

Gyors megoldások ................................................... 703 Az XML-fájlok megjelenítése ................................................... 703 Az XML-adatok megjelenítése ................................................. 704 XML-adatok értelmezése ......................................................... 707 XML nyitó- és zárótag-ek összeillesztése ............................. 711

A CD-ROM tartalma ...................................................... 717

XXI

1. fejezet PHP-bevezetı Gyors megoldások Apache-konfiguráció Egyedi Apache-függvények

oldal: 15 15

apache_lookup_uri()

16

apache_note()

16

ascii2ebcdic() és ebcdic2ascii()

17

getallheaders()

17

PHP-konfiguráció

17

dl()

17

extensionjoaded()

18

Hibakeresés

18

assert()

18

assert_options()

19

die()

19

Hibák

20

Naplózás

20

Kimenet-ellenırzés

20

Biztonság

21

Reguláris kifejezések

21

ereg()

21

ereg_replace()

22

eregi()

22

eregi_replace()

23

split()

23

spliti()

23

7. re/ezer

Hi-tr-Devezeto

Áttekintés Üdvözlünk a PHP világában! Ha jelenleg valamely más szkript nyelven programozol, akkor itt az ideje, hogy élvezd a világ legjobb webes szkript nyelvének elınyeit. Még ha a szkript nyelvektıl oly távol esı programnyelvet használsz is, mint az Assembler vagy a C, munkád úgy felgyorsul majd, mint Kirk kapitány, amikor bringájáról átszállt az Enterprise őrhajóra. Jómagam azért kezdtem PHP-t használni, mert Periben írni néha rettentıen unalmas volt, a Visual Basic pedig csak egy platformon elérhetı. A PHP mindkét problémán segít. A 20. század végén a Visual Basic volt a világ legnépszerőbb programnyelve, akár a fogorvosok is írhattak vele fogászati alkalmazásokat. A Visual Basic a Basic nyelvhez kötıdik, de a Basic család összes tagja különbözik valamiben, és még a Visual Basicnek is számos inkompatíbilis változata létezik. A PHP-nek csak két változata terjedt el: a PHP3 és a PHP4. A PHP4 világszerte gyors ütemben váltja fel a PHP3-at. A webszervereken kívül futó segédprogramok írására a Perl alkalmasabb, mint a PHP, jóllehet lehetıség van a PHP kibıvítésére és ezen segédprogramok nagy részének helyettesítésére. Ha egy ideig használod a PHP-t, egyszerőbbnek fogod találni a PHP kiterjesztését, mint a Perire való visszatérést. Korábban Assemblerben és Cobolban programoztam nagygépes szervereken. Az Assembler-hívık a gyors végrehajtás érdekében mindent Assemblerben akartak megírni, a Cobol-hívık pedig a gyors programozás miatt szerettek volna mindent Cobolban megcsinálni. Akkoriban a számítógépek annyival lassabbak és drágábbak voltak, hogy a mőveletek végrehajtásának sebessége még kényes témának számított: egy jelentıs processzorfejlesztés húsz programozó éves fizetésébe került. Most viszont a processzor sebességének nagymértékő növelése annyiba kerül, mintha egy hétre bérelnénk egy programozót. A gyors programvégrehajtás így nem téma többé. A PHP3 elég lassú volt ahhoz, hogy mentségül szolgáljon a Perihez értı programozóknak, miért nem váltottak. A nagy teljesítmény eléréséhez azonban már nincs szükség a Perire. A C az egyetlen a programozáshoz szükséges másik nyelv, és a C is csupán a PHP-hez való operációs rendszerek és fordítóprogramok megírásához kell. Ha értesz a PHP megírásához használt ANSI C-hez, akkor a PHP forráskódjával új változatokat hozhatsz létre, vagy fejlesztheted a jelenlegit. A hozzám hasonló 99,75% , aki nem ismeri a C-t, sokrétőbbé teheti a PHP-t különféle kódok, függvények és objektumok összegyőjtésével. Számtalan honlapon elıre megírt alkalmazások és komponensek győjteményeit találjuk, amelyek saját célra felhasználhatók. A Freshmeat (freashmeat.net) és a Sourceforge (sourceforge.net) jó kiindulási pont lehet mindehhez. Ha mondjuk PHP-alapú e-mail-klienst vagy -szolgáltatást szeretnél létrehozni, keress rá a Freshmeaten a „php email" kifejezésre. A könyv írása idején ez a keresés 56 találatot eredményezett, amelyek között szerepeltek alkalmazások, objektumok és fejlesztés alatt álló kódok béta-verziói is.

Áttekintés

Programozási 1x1 Ha egyenesen a HTML-szerkesztésbıl csöppensz bele a PHP-programozás világába, hasznos lehet megismerned a szkript nyelveket és fejlıdésük történetét. Ha esetleg programoztál már más nyelveken, akkor mind a GML-rıl, mind a nyílt forráskódról szóló információ segíthet a PHP mőködésének megértésében.

Egy kis történelem Charles Babbage 1833-ban réz- és ónkerekekbıl kezdett számítógépet építeni. Ez akkoriban, amikor Assemblerben kezdtem programozni, egy kicsit primitívnek tőnt számomra, mostanában viszont a modern programnyelvek és az Assembler közti különbség tőnik akkorának, mint a réz és a modern számítógépek szilikonchipje közti különbség. Mintegy 30 programnyelvben dolgoztam, és írtam is egypárat, de jó néhányszor belefutottam az egyes cégek által kifejlesztett saját tulajdonú programnyelvek, illetve az egyetlen programozó által írt nyelvek okozta megszorításokba. A nyílt forráskódú szoftverfejlesztés lényegében megszüntette ezeket a korlátozó tényezıket. Ha egyetlen ember fejleszt egy nyelvet, szorosan ellenırzése alatt tarthatja azt, és képes a számítástechnikának új irányokat adni. Az IBM-nél 1969-ben dr. Charles Goldfarb vezette azt a kutatócsoportot, amely a Generalized Markup Language-t (GML), majd késıbb a Standard Generalized Markup Language-t (SGML) kifejlesztette. Az SGML a Hypertext Markup Language (HTML) ıse. Elmondhatjuk, hogy Dr. Goldfarb új irányba terelte a számítástechnikát. A nagy vállalatoknál kifejlesztett saját tulajdonú programnyelvek ezzel ellentétes irányba haladnak. Az IBM két olyan termékével is dolgoztam, amelyek ugyanazt a piacot célozták meg, de mind a kettıt korlátozta, hogy nem voltak kompatíbilisek az IBM összes termékével. Az IBM szakemberei saját érdekeiknek megfelelıen használták a fejlesztési projekteket, ami aztán mindkét termék végét jelentette. Nyílt forráskódú fejlesztés esetén nincsen .ehetıség az egyéni érdekek elıtérbe helyezésére, hiszen ez a fejlesztési módszer lehetıvé :sszi, hogy a programozók versenyeztessék saját ötleteiket, a felhasználók pedig eldöntik, nogy nekik melyik változat felel meg. Végeredményben a kevésbé hasznos termék beolvad más termékekbe, vagy háttérbe szorul, hiszen helyette a fejlesztık a népszerőbb termékek :ovábbfejlesztésével vagy teljesen új ötletek kidolgozásával foglalkoznak.

A nyílt forráskód megjelenése 1992-ben Linus Torvalds a Linux megírásával elıtérbe helyezte a nyílt forráskódú szoftvereket. A Linux egy olcsó PC-n is futtatható ingyenes operációs rendszer. Emberek ezrei töltik szabadidejüket a Linux fejlesztésével, hogy emberek milliói ingyenesen használhassák. 1994-ben Rasmus Lerdorf kifejlesztette a PHP/FI-t, ami a nyílt forráskódú fejlesztéseknek köszönhetıen PHP4-gyé fejlıdött. A PHP4 egy olyan nyílt forráskódú nyelv az új webfejlesztık számára, amely folyamatosan váltja fel a Perihez hasonló régebbi nyelveket.

Fordítás és fejlesztés A kezdeti programnyelveket papíron fordították le, és bináris formában gépelték be. Késıbb megjelentek az automatikus fordítóprogramok, amelyek az ember által

1. fejezet

PHP-bevezetı

értelmezhetı nyelvet a számítógép számára megfelelı bináris nyelvre fordítják. A fordítás csökkentette a feldolgozási idıt, de hosszadalmas késlekedést okozott a programozóknak. A szkript nyelvek az egyszeri fordítást olyan értelmezési folyamattal helyettesítik, amely minden egyes alkalommal lezajlik, amikor a számítógép a szkriptet beolvassa. A programozás ezáltal felgyorsult, de a szkriptek lassabbak lettek. Az 1980-as évek elején a szkript nyelveket fejlesztık fordítóprogramokkal kísérleteztek. Bizonyos szkriptértelmezık voltaképpen a memóriába fordították a szkriptet, így a szkript gyakran használt részeit csak egyszer kellett fordítani, és sokkal gyorsabban futottak. Néhány szkriptfejlesztı továbbment, a lefordított memóriatérképeket lemezre mentette, így a következı futtatások gyorsabbak lettek. A 1990-es évek végén a webszerver nyelvek hasonló fejlıdésen mentek keresztül. A Perit és az elsı PHP-t - mivel HTML-oldalak voltak - soronként értelmezték. A fejlesztık késıbb olyan rendszereket választottak, amelyek a memóriába fordítottak. A PHP3 és a PHP4 közötti óriási teljesítménykülönbség az értelmezésrıl a fordításra való áttérésnek köszönhetı. Mind az Apache, mind a PHP számára léteznek már különbözı cache-mechanizmusok, amelyek elmentik a lefordított memóriatérképeket a következı futtatások számára. Attól függıen, hogy a szknpted hogyan mőködik, a webszervered jócskán felgyorsulhat a cache-szoftver használatától, de le is lassulhat, mert a pótlólagos szoftverráfordítás révén elillan a megtakarítás.

Költségek A nagy hálózatokat kiszolgáló elsı szerverek nagygépes IBM-szerverek voltak, amelyek 10 000 000 dollárba vagy annál is többe kerültek. Amikor az elsı IBM nagygépes szerver klónját az IBM-mel versenyeztettem, volt szerencsém 60 százalékot lealkudni a szörnyeteg árából. Ma viszont egy 400 dolláros, memóriával jól megpakolt, használt 486-os is mőködhet szerverként. Természetesen, ha nagyra törı terveid vannak, a legújabb PC-re van szükséged, amibe annyi memóriát préselsz, amennyi csak belefér. Ha a honlapod igazán beindul, akár 10 000 PC-re is szükséged lehet.

A nyílt forráskód használatáról Ha nyílt forráskódú szoftvert használsz, mindig olvasd el a licencfeltételeket. Több száz PHP-alapú nyílt forráskódú alkalmazást tartalmazó oldal létezik, mindenféle licencekkel. A felhasználási feltételek a „Ezt a valamit a fıiskolán csináltam. Tessék, használd ingyenesen"-tıl a „Szerzıi jog fenntartva. Csak akkor használhatod, ha ..."-ig terjednek; utóbbi esetén lehet, hogy meg kell ırizned az eredeti kódot az eredeti csomagban, teljes dokumentációval és szerzıi jogi figyelmeztetésekkel. Vannak memorialware-ek (meg kell említened, hogy a kódot a fejlesztı halott barátjának vagy rokonának ajánlod), postcardware-ek (egy képeslapot kell a szerzınek küldened), charityware-ek (meg kell becsülnöd a szoftver értékét és jótékony célra kell azt felajánlanod) és mégkikelltalálniware-ek, amikor is te írsz egy kódot, kiadod, és kitalálod a saját licencfeltételeidet. A megszokott normál licenc a GNU General Public License (GPL), amely a www.gnu.org/copyleft/gpl.html oldalon található.

Hibakeresés ?:rdítás során a fordítóprogram számtalan egyszerő hibát észrevesz. A lefordított progra-— ok általában tiszták, és könnyő bennük a hibákat megtalálni. Az értelmezett szkriptekre ;_ó átállás azt eredményezte, hogy bizonyos, a számítógép által észlelhetı hibákat addig -em vesszük észre, amíg a szkript adott részét nem értelmezi a program, ami akár hóna-r-: skA a szkript forgalomba kerülése után is megtörténhet. Az értelmezett szkripteket ne-~éz tesztelni. Egész iparág telepedett a szoftverfejlesztık köré, akik szisztematikusan tesztelik az értelmezett nyelveket, ennek ellenére a szisztematikusan tesztelt szkriptek is megbukhatnak. A PHP3 is szenvedett ettıl a problémától. A „memóriába fordító" szkriptértelmezıkre való átállás egy lépés hátrafelé, az egész szöveg egyszerre történı szintaktikai ellenırzése felé. A PHP4 használat elıtt a teljes szkript szin-takukáját ellenırzi, lefordítja az összes függvényt, és alaposan átnézi a szkript fı részeit. Ha a PHP4-ednek sikerül mőködı HTML-t produkálni, az azt jelenti, hogy a szkriptben nincsenek szintaktikai hibák és az összes függvény megfelelıen került lefordításra, s ez ? okkal jobb ellenırzést jelent, mint ami PHP3-ban lehetséges volt.

A PHP elınyei Egyértelmő, hogy a PHP az egyetlen igazi nyelv, de vannak, akiket csak a tények gyıznek meg, a tények pedig azt mutatják, hogy napjaink weboldalaihoz a PHP a megfelelı szkript nyelv. Tapasztalataim alapján állítom, hogy a PHP-t könnyebb tanítani, mint az olyan keverék nyelveket, mint a Visual Basic vagy az US. Mivel több iskolában tanítanak Visual Basicet, mint PHP-t, rövid távon az informatikai menedzserek számára vonzóbb a Visual Basic.

Értelmezés kontra fordítás Gondolj a számítógépes nyelvekre úgy, mint utasítások listájára. Aztán vegyél egy általad rendszeresen használt utasítást, legyen az ételrecept vagy feljegyzés arra vonatkozóan, hogy hogyan találod meg a barátod új házát. Képzeld el, hogy az utasításokat begépelı ember néhány, számára magától értetıdı utasítást kihagy, vagy néhány szót hibásan gépel be. Az eredmény az lesz, hogy nem tudod az utasításokat követni. Vonatkoztasd ezt a problémát a fordítóprogramokra. Ahogy a programozó befejezi a gépelést, a számítógép megnézi a helyesírást, és ellenırzi, hogy az egyes utasítások ott kezdıdnek-e, ahol az elızı befejezıdött. (Azonban a számítógép nem tudja ellenırizni, hogy borsra vagy borsóra gondoltál, hiszen mindkettı szükséges hozzávaló.) A fordított nyelveknek vannak hátrányai: az egész programot meg kell írnod fordítás elıtt, hiszen minden hiányzó rész fordítási hibát okoz. Az értelmezett szkriptekkel lehet soronként haladni, mert az értelmezı anélkül foglalkozik az adott sorral, hogy ellenırizné a többi megvan-e. Vonatkoztasd a számítógépes értelmezést a hibásan írt névre. Amikor a programozó befejezi az írást, a számítógép semmit nem tesz. A számítógép addig nem ellenırzi az utasításokat, amíg el nem kezded használni azokat. A számítógép addig nem foglalkozik az adott

név helyesírásával, amíg a nevet tartalmazó sor utasításához nem ér. Egy félig kész leves receptjének a közepére érve a gép közli veled, hogy nincs „ırült bors". Az egész folyamatban lévı munkát kidobhatod, és másnap kezdheted elölrıl. A PHP a fordítás és értelmezés majdnem tökéletes keverékét nyújtja. Annyit ellenıriz, amennyit egy jó fordítóprogram ellenırizne, és emellett az értelmezés elınyeit is biztosítja.

Részkódok kontra programozás Fájlokból, függvényekbıl, objektumokból és minden egyéb töredékkódokból is összerakhatsz alkalmazásokat, de ez azért nem olyan, mintha a saját kódodat írnád meg. Ha sosem írtál kódot PostgreSQL adatbázishoz való hozzáféréshez, nem fogsz tudni egy másvalaki által írt PostgreSQL alapú kódot ellenırizni. Rengeteg ingyenes PHP-objektumot és -alkalmazást Ietölthetsz. Ezek azonban akár olyan veszedelmes kódolási csapdákat is rejthetnek, amelyek nehézkessé tehetik a mőködtetést, és programod üzleti célokra alkalmatlanná válhat. Léteznek olyan kódok, amelyek egyáltalán nem használják a PHP4 fontos funkcióit, például a = = = operátort, más kódok nem ellenırzik a bevitt adatok érvényességét, megint mások pedig anélkül használnak adatbázist, hogy az egyes mezıkhöz a megfelelı adattípusokat alkalmaznák. Például vegyük a MySQL-t: MySQL-ben sokan használják táblázatok létrehozására a phpMyAdmint és soha sem veszik észre, hogy a phpMyAdmin alapbeállításként NOT NULL értékre állítja a mezıket. Ezek az emberek közreadják kódjaikat a weben, amiket mások hagyományos SQL-táblázatok létrehozására használnak fel, ez MySQL-ben alapértelmezésben NULL értéket ad a mezıknek. Ha egy ilyen csapdába beleesel, az SQL output oldalain a nulla értékek különös eredményeket okoznak. A saját kódok írásakor eleget tanulhatsz ahhoz, hogy teszteld, ellenırizd és kijavítsd a letöltött kódokat. Ha továbbra is használod a letöltött kódot, tudasd változtatásaidat a szerzıkkel (vagy ajánld nekik ezt a könyvet), hogy kijavíthassák a kódjukat, és a következı 25 000 letöltı mind jobban járjon.

Kimenet-ellenırzés HTML-oldalakat kétféleképpen is programozhatsz PHP-vel. íme az egyik módja annak, hogy PHP-vel hogyan szúrhatod be a dátumot a szöveg egyik sorába:

Today's

date

is

.



Ez a módszer mőködik, és feltételezhetıen gyorsan megvalósítható, hiszen csak egy kis PHP-t szúrsz egy létezı HTML-oldalba. Az ilyen megközelítésben mőködı PHP alapú alkalmazások szerte az egész webrıl letölthetık. Mindazonáltal jellemzıen sok apró változtatást igényelnek ahhoz, hogy honlapodhoz illeszkedjenek, és az adatbázisokhoz csak minimális hasznukat veheted. A következı példa viszont - a PHP-kódba beszúrt kis szöveggel - lehetıvé teszi, hogy mindent kézben tarts, és jobban használható a nagy, adatbázis alapú alkalmazásokra is:

Az AbiWord-dokumentum dekódolásának példája számos lépést mutat meg, amelyek segítenek neked kedvenc XML-dokumentumod dekódolásában. Néhány tag és attribútum nem alakítható webolda- paraméterré, ezért nincs értelme dekódolni ıket. Néhány XML-tag és -paraméter úgy van kialakítva, hogy az érvénytelen adatok bevitelét megakadályozza, így ezekre nincs szükség, ha csak megjelenítésre kódolod ki az adatokat. Próbáld meg a kódot saját XML-fájljaidra alkalmazni. Válassz kis fájlokat, hogy a fájl mérete ne akassza ki a böngészıt. Ahol a kód a tag-eket HTML-megjegyzéssé alakítja, ott világosszürke szöveggé alakíthatod ıket, hogy összefüggésükben lásd a tag-eket. i:

714

. .iDe-Sie^cs aisun -p.iraine étér.tk tor-

Gyors megoldások

Úgy látszik, hogy az AbiWord-dokumentumok feleslegesen összetettek, és túl sok attribútumot használnak ott is, ahol az önálló tagek hasznosabbak lennének. Az attribútumok úgy tőnik, kompatíbilisek lehetnének a stíluslapokkal, de ez már meghaladja e könyv terjedelmét. Én továbbra is folytatom az AbiWord-dokumentumok weboldallá való dekódolását. Ha érdekel a frissített kód, küldj egy üzenetet a honlapomról.

. . .;. K>.

ÍC'Í

ICS

...£

. . . . . . .. #•• . ■ . . . . ,

i . . . . 7" !

, . . . . . ; ' . ■ .............. . 7 6 ♦ - . , , - . - ,v ■ - - ■

-

7b

.". i............... : . ., . 76 , - . : . . . , . . ' .......... v. . 8 ? •;j .■....;. .......... . - ' . » ! ;-.:.. i. . - ............... V - ■ ■ . ; ---------- ..................... 2 5

715 *, r>

Segédlet ■

t

i < -I

t

I

.-

'


= .................................................................................................... 37 > > .............................................................................................. 34,37 > > = ................................................................................................. 37 AND ................................................................................................. 37 new ................................................................................................... 37 OR .................................................................................................... 37 print .................................................................................................. 37 XOR ................................................................................................. 37

Típusok bigint ............................................................................................... 134 bit .................................................................................................... 133 boolean ........................................................................................... 133 box .................................................................................................. 138 char ................................................................................................. 135 character ......................................................................................... 135 character varying............................................................................ 135 cidr ............. .' ................................................................................... 138 circle ............................................................................................... 138 date ................................................................................................. 137 datetime .......................................................................................... 137 decimai ........................................................................................... 134 double precision............................................................................. 135 Enum .............................................................................................. 135 float................................................................................................. 135 inét .................................................................................................. 138 int.................................................................................................... 133 integer ............................................................................................ 134 interval ............................................................................................ 137 line .................................................................................................. 138 longtext .......................................................................................... 135 lseg.................................................................................................. 138 macaddr .......................................................................................... 138 mediumint ...................................................................................... 134 mediumtext .................................................................................... 135 money ............................................................................................. 134 numeric........................................................................................... 134 path ................................................................................................. 138 point ............................................................................................... 138 polygon .......................................................................................... 138 reál .................................................................................................. 135 serial................................................................................................ 134 smallint ........................................................................................... 134 text .................................................................................................. 135 time ................................................................................................. 137 timestamp ....................................................................................... 137 tinyint ............................................................................................. 134 tinytext ........................................................................................... 135 varchar ............................................................................................ 135 year ................................................................................................. 137