php feketekonyv

783
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

Upload: zsolt-magyar

Post on 12-Aug-2015

115 views

Category:

Documents


0 download

TRANSCRIPT

Tartalomjegyzk1. fejezet PHP-bevezet ............................................. 1ttekints ......................................................................... 2Programozsi 1x1 ................................................................... 3 Egy kis trtnelem ............................................................... 3 Hibakeress .......................................................................... 5 A PHP elnyei ......................................................................... 5 rtelmezs kontra fordts ....................................................... 5 Rszkdok kontra programozs .......................................... 6 Kimenet-ellenrzs .................................................................. 6 PHP4 ............................................................................................ 7 j fggvnyek .......................................................................... 7 j nv ...................................................................................... 7 Sebessg .............................................................................. 8 PHP-hibakeres .................................................................... 8 A Windowsos COM .................................................................. 9 Regulris kifejezsek fggvnyei ........................................ 9 PHP s Apache............................................................................ 9 A platformfggetlen Apache ................................................. 9 Modul vagy CGI ................................................................. 10 A PHP Zenje ........................................................................... 11 Szintaktika ......................................................................... 11 Ha, akkor, klnben ........................................................... 12 A megfelel adattpus ......................................................... 14 Szktsd a bejratot, tgtsd a kijratot ............................. 14

Gyors megoldsok

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

Apache-konfigurci ................................................................ 15 Egyedi Apache-fggvnyek ..................................................... 15 apache_lookup_uri() ........................................................... 16 apache_note()........................................................................ 16 ascii2ebcdic() s ebcdic2ascii() ............................................. 17 getallheaders() .................................................................. 17 PHP-konfigurci ...................................................................... 17 dl{) ..................................................................................... 17 extension_loaded() ............................................................ 18 Hibakeress............................................................................... 18 assert() .................................................................................. 18 assert_options() ................................................................ 19 die() ................................................................................... 19 Hibk ..................................................................................... 20 Naplzs .................................................................................... 20 Kimenet-ellenrzs .............................................................. 20

Biztonsg..................................................................................... 21 Regulris kifejezsek ................................................................. 21 ereg() ................................................................................... 21 ereg_replace() ......................................................................... 22 eregi() ...................................................................................... 22 eregij-eplace() ................................................................... 23 split() ................................................................................... 23 splitiQ ................................................................................... 23

2. fejezet: Adatok .............................................................25ttekints ........................................................................ 26Adattpusok ............................................................................ 26 Vltozk .............................................................................. 26 Automatikus ltrehozs ........................................................... 27 Konstansok ............................................................................. 27 Hatkr.................................................................................... 28 Mveletek az adatokkal .......................................................... 28 Kifejezsek .............................................................................. 29 Opertorok ........................................................................... 30 Ellenrzs s szerkezet ..................................................... 37 Fggvnyek ........................................................................ 44 Kategrik s objektumok ................................................ 44 Adatok az adatbzisoknak ................................................. 44 Adatok a HTML-nek ........................................................... 44 Dtum s id .......................................................................... 45 Julianus-dtum ..................................................................... 45 Id ....................................................................................... 45 Naptr ..................................................................................... 46 Matematika ................................................................................ .48 Egsz matematika ................................................................... 48 Lebegpontos matematika .................................................. 49 Tetszleges pontossg matematika ...................................... 49

Gyors megoldsok

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

Adatok ltrehozsa ..................................................................... 51 Sztring-adatok .......................................................................... 51 Egsz s lebegpontos adatok ............................................... 52 Adatok ellenrzse ................................................................ 52 Adatkonvertls .......................................................................... 55 Sztringfggvnyek ...................................................................... 57 rand(), srand() s microtime() ................................................ 62 Dtum s id kiszmtsa .......................................................... 63 Hsvt ..................................................................................... 65

VI

3. fejezet: Tmbk .......................................................... 67ttekints ........................................................................ 68Egyszer tmbk ................................................................... 68 A vilg legegyszerbb tmbje ......................................... 68 A tmbket O-tl szmozzuk ............................................... 69 A tmb elemeit brminek elnevezhetjk ......................... 70 Tmbltrehoz fggvnyek ................................................. 71 Lehetsges problmk ..................................................... 71 Tbbdimenzis tmbk ......................................................... 72 A tmbmutat ........................................................................ 73 Tmbk rendezse ................................................................ 74 Push, Pop, Pad s Mrge ...................................................... 75 Push s Pop ....................................................................... 76 Pad .................................................................................... 76 Mrge..............................................^ ................................. 77

Gyors megoldsok ........................................................ 78Tmbk ltrehozsa listbl az array()-jel ........................ 78 Tmbk ltrehozsa sztringbl az explode()-dal ............. 78 Tmbk ltrehozsa sztringbl az implode()-dal ............. 79 Elemi SQL ...................................................................... 79 select ............................................................................. 80 where ................................................................................. 80 order by ......................................................................... 80 group by............................................................................. 80 SQL ptse ................................................................... 80 Az adatok tartomnynak kijellse a range() segtsgvel 83 Kulcstartomny kijellse a range() s az array_flip() segtsgvel 84 Duplikt tmbrtkek megszntetse az array_flip{) segtsgvel 84 Tmb vletlenszerstse a shuffle() segtsgvel ................85 Bannerek vletlenszerstse az array_rand()-dal ............86 Fjl tmbbe olvassa a file() segtsgvel ........................88 Tmb rendezse rtk szerint a sort() segtsgvel ..............89 Asszociatv tmb rendezse rtk szerint az asort() segtsgvel 90 Tmb rtk szerinti fordtott sorrendbe rendezse az rsort() segtsgvel ...........................................................................90 Asszociatv tmb rtk szerinti fordtott sorrendbe rendezse az arsort() segtsgvel ...........................................................................91 Asszociatv tmb kulcs szerinti rendezse a ksort() segtsgvel 92 Tmb rtk szerinti termszetes rendezse a natsort() segtsgvel 92 Tmb nem termszetes rendezse az usort{) segtsgvel . 95 Fordtott ciklus a tmbelemeken ........................................... 99 Ciklus a tbbdimenzis tmbkn ...................................... 100

VII

4. fejezet: Bankkrtyk ................................................ 103ttekints ...................................................................... 104Kereskedi bankszmla .......... , ........................................ 105

Gyerekek

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

Szmlzsi nv ............................................................... 106 Biztonsg................................................................................... 106 Szerver ...................................................................................... 106 Hash-els................................................................................... 107 Titkosts .............................................................................. 109 Az mcrypt teleptse .......................................................... 109 mcrypt-fggvnyek ........................................................... 109 Elektronikus fizetsi szoftverek .............................................. 117 CyberCash ......................................................................... 117 Payflow ................................................................................... 119 CCVS .................................................................................... 120

Gyors megoldsok ...................................................... 122Adatok hash-else ............................................................ 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 ............................... 127ttekints.......................................................................128Trtnet ................................................................................. 128 MySQL ................................................................................... 129 PostgreSQL ....................................................................... 129 Nhny klnbsg .................................................................... 130 Dtumok ................................................................................. 130 Kis- s nagybetk megklnbztetse.................................. 130 Tranzakcik ............................................................................ 131 Trolt eljrsok .................................................................... 131 Triggerek ................................................................................ 132 Nzetek ............................................................................. 132 Adattpusok .......................................................................... 133 Bitek ....................................................................................... 133 Egsz szmok ....................................................................... 133 Lebegpontos szmok ..................................................... 134 Sztringek ................................................................................ 135 Blobok ............................................................................... 136 Dtum s id .......................................................................... 136 A PostgreSQL klnleges tpusai .......................................... 137 Azonostk beillesztse ......................................................... 138 Platformfggetlensg ............................................................... 140 VIII

Adatbzis nyers adatokbl ................................................ 140 Adatbzisok s tmbk .......................................................... 140 Indexelni vagy nem indexelni ............................................ 140 Kapcsolatok.............................................................................. 141 ODBC ......................................................................................141

Gyors megoldsok

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

Kapcsolds az adatbzishoz .................................................142 Az adatbzisok listzsa..........................................................144 Adatbzistblk megjelentse ............................................................................................................................... 14 6 Tblk mezinek megjelentse ............................................. 148 Tblk adatainak megjelentse ..............................................152 Adatsor beillesztse .................................................................157 Adatbzis ltrehozsa ..........................................................160 Tblk ltrehozsa ....................................................................160 Adatbzisok hasznlata session-khz ...........................161 A kd megtiszttsa ..................................................................169

6. fejezet: Adatbzisok ................................................ 173ttekints ......................................................................174SQL ............................................................................................174 Indexeljnk vagy ne indexeljnk ............................................174 Kapcsolatok - Relcik ...........................................................175 lland kapcsolatok ........................................................... 175 ODBC ...................................................................................... 176 DB2............................................................................................. 178 SAP DB ...................................................................................... 178 Ms adatbzisok .................................................................. 179 Adabas ................................................................................. 179 A filePro olvassa ............................................................... 179 A FronBase olvassa ...........................................................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 Adatbzis-absztrakcis rtegek ........................................ 188 DBA-utastsok ..................................................................... 188 DBM-utastsok ..................................................................... 189 DBX-utastsok ..................................................................... 190 IX

Gyors megoldsok ......................................................192Adatbzis elrse ODBC-vel ............................................... 192 Eredmnyek ........................................................................ 195 Hibk ................................................................................ 199 Mezkkel kapcsolatos informcik ...................................... 199 Tovbbi utastsok ........................................................... 200 j utastsok ........................................................................ 204 Adatbzis elrse DBA-utastsokkal ................................... 205 Adatbzis elrse DBM-utastsokkal................................... 205 Adatbzis elrse DBX-utastasokkal ................................ 206 Ingres II elrse .................................................................... 206 Idztsek kinyerse: t a teljestmnyhez........................... 208

7. fejezet: Krnyezet .................................................... 213ttekints ............................................................ ___ 214Apache ...................................................................................... 214 A PHP konfigurlsa ..........................................................216 Kiterjesztsek ........................................................................216 A php.ini belltsai ............................................................... 217 Idkorlt ................................................................................ 217 Krnyezeti vltozk ............................................................... 218 Biztonsg .................................................................................. 218 HTTP-hitelests ................................................................... 218 CHMOD ............................................................................ 219 PHP ktegelt mdban ......................................................... 219 A PHP temezse ..................................................................... 220 COM ...................................................................................... 221 Knyvtr- s fjlnevek ............................................................. 222 Linux s Unix ................................................................... 222 Windows NT ......................................................................... 223 Macintosh.............................................................................. 223 POSIX ........................................................................................ 223 A programok kommunikcijnak elsegtse .................... 224 Megosztott memria ......................................................... 225 Szemaforok........................................................................... 226 Kls programok ..................................................................... 226 Extra informci ...................................................................... 227 mnoGoSearch-fggvnyek ................................................ 227

Gyors megoldr .......................................................... 229A rgi fjlok eltvoltsa ..................................................... 229 Kls programok vgrehajtsa .............................................. 233 Word-dokumentumok Rtf-formtumba konvertlsa COM segtsgvel ........................................ 236 HTTP hitelests plda ............................................................ 239 Hogyan igaztsuk a kdot a krnyezethez? ..................... 241 Hibanaplzs ................................................................... 241

X

Menekl ltogatk ............................................................... 243 Szkript idtllps ................................................................. 243 Az adatbzis kivlasztsa .................................................... 244 Bngsz-alap kdok .................................................... 245 Utastsok ellenrzse .................................................... 246 Ellenrzs a fejlcek elkldse eltt ............................... 246 A PHP ellenrzse ........................................................... 247 A memria ellenrzse ....................................................... 247 Szokatlan formtumok megjelentse ................................... 248 Kpek biztonsgos megjelentse ......................................... 248

8. fejezet: Fjlok............................................................251ttekints ................................................................. 252Knyvtrak ............................................................................... 252 Apache-nzet ................................................................... 252 PHP-nzet ........................................................................ 252 Nzetek vltsa ................................................................253 Fjltpusok ..............................................................................253 Fjlok megjelentse............................................................. 253 Fjlok ltrehozsa s megvltoztatsa ........................... 253 Fjlok msolsa ................................................................254 Ideiglenes fjlok ............................................................... 254 Fjlok feltltse .....................................................................254 Fjllista-cache ......................................................................255 Engedlyezs/Jogosultsgok ............................................255

Gyors megoldsok ...................................................... 256Knyvtrak listzsa .............................................................256 Kzs kd ..............................................................................256 Az is_dir() megkzelts ...................................................256 A filetype() megkzelts .......................................................257 A get directory_file() megkzelts ..................................258 Formzott fjllista ..............................................................259 Egyb knyvtrfggvnyek ................................................260 Knyvtrak ltrehozsa s trlse ....................................262 Fjlok listzsa az attribtumokkal egytt ............................263 ltalnos kd ....................................................................263 A get_directory_file() kiterjesztse ........................................263 Formzott fjllista ..............................................................265 Tovbbi attribtumok .............................................................266 Lemezterlet-kimutats ........................................................... 267 ltalnos kd .................................................................... 267 A get_directory_file() kiterjesztse ..................................267 res lemezterlet ............................................................. 268 Fjllista s elfoglalt lemezterlet ...................................... 270 A knyvtrak ltal elfoglalt lemezterlet kiratsa .......... 272 A legnagyobb knyvtrak ltal elfoglalt lemezterlet kiratsa 273

XI

A legnagyobb fjlok ltal elfoglalt lemezterlet kiratsa . . . 274 Kpfjlok attribtumainak kiratsa ....................................... 275 Kpinformcik kigyjtse .................................................... 276 Kpinformcik megjelentse .............................................. 277 Brmilyen tpus adat megjelentse ............................... 278 ltalnos kd .................................................................... 278 Szvegfjl megjelentse ...................................................... 279 HTML-fjl megjelentse .................................................... 280 Brmilyen tpus fjl megjelentse ............................... 281 res fjlok ltrehozsa ....................................................... 283 Fjlok feltltse .................................................................... 284 CRC-szmols fjlokra ............................................................ 286

9. fejezet: rlapok ........................................................ 289ttekints ................................................................ 290Alternatv navigci................................................................. 290 HTML vagy tisztn PHP?......................................................... 291 A minimlis HTML ............................................................... 292 Bell s Whistle ......................................................................... 293 rlapkrdsek....................................................................... 295 sszetett mveletek ................................................................ 298 JavaScript ........................................................................... 299 A csinos grdlmenk eltvoltsa ..................................... 299 Mezk rvnyestse a szerveren ....................................... 299 Hossz rlapok ................................................................... 300 A hossz rlapok feldarabolsa ........................................... 300 Az informci oldalrl oldalra val tovbbtsa ............... 301 Hasznlhat hossz rlapok tervezse ........................... 303 Fjlok feltltse ....................................................................... 304

Gyors megoldsok...................................................... 307rlap ltrehozsa..................................................................... 307 rlapok ltrehozsa fggvnyekkel ................................. 307 Hossz lista ltrehozsa rlapon bell .......................... 309 Oszlopok igaztsa ................................................................... 311 Egy vlasz a sok kzl ...................................................... 314 Egy vlasz a sok kzl rdigombokkal ............................... 317 Tbb vlasz a sok kzl .......................................................... 318 Vlaszok megrzse s hibk kiemelse ........................ 323

10. fejezet: Fggvnyek .............................................. 327ttekints . ................................................................ 328A vilg legrvidebb fggvnye ............................................329 rtkek visszaadsa ...........................................................329 rtkek bevitele ........................................................................332 Tetszleges rtkek .................................................................333 XII

Vltoz szm beviteli mezk ................................................ 334 Hatskr .................................................................................... 336 Statikus vltozk .................................................................. 339 Rekurzi .................................................................................... 341 Vltozban elnevezett fggvnyek ................................... 341 Sorrend...................................................................................... 342

Gyors megoldsok .......................................................343Fggvny ltrehozsa .......................................................... 343 Globlis vltoz deklarlsa................................................... 344 Statikus vltoz deklarlsa .............................................. 345 Fggvny trolsa vltozban .......................................... 346 Alaprtelmezett fggvnyparamterek hasznlata .............. 347 A fggvny ltezsnek ellenrzse ..................................... 348 A call_user_func() hasznlata ................................................. 349 A create_function{) hasznlata .......................................... 350 A func_get_arg() s a func_num_args() hasznlata ............ 351 Afunc_get_args() hasznlata ............................................ 352 Shutdown-fggvny beiktatsa .............................................. 353

11. fejezet: Kpek ......................................................... 355ttekints .................................................................356GIF ...........................................................................................356 PNG.............................................................................................356 JPEG .......................................................................................... 357 PDF .............................................................................................358 ClibPDF .............................................................................358 FDF ....................................................................................363 PDFIib ....................................................................................366 Flash s Shockwave ........................................................... 366 A fjl ....................................................................................... 367 Kpkocka ........................................................................... 367 Szn ....................................................................................368 Objektumok ............................................................................368 Szveg ................................................................................ 371 Bittrkpek s szimblumok .............................................371 Mveletek .............................................................................. 372 Gombok ............................................................................. 373 Kpadatbzisok ..................................................................... 374 MySQL ................................................................................... 374 Egyb SQL-adatbzisok ................................................... 375 Hyperwave ........................................................................ 375 A kpi modul teleptse ........................................................... 375 Kpek megjelentse ............................................................. 375 Mindig hasznld az Alt-ot az image tag-ben ......................... 376 Hasznld a mretinformcit az image tag-ben ................... 377 Vzlatkpek ltrehozsa........................................................ 377 ____ ^ XIII

Kpek ltrehozsa ................................................................... 377 Kpek vltoztatsa .................................................................. 381 Sznek vltoztatsa .............................................................. 381 tmretezs s jbli mintavtelezs ............................. 382 Kls programok ...................................................................... 383 A megfelel formtum kivlasztsa ....................................... 383

Gyors megoldsok ......................... , ........................ 384Kpek listzsa ........................................................................ 384 Kpinformcik gy jtse ....................................................... 384 Kpinformci kiratsa ............................................................. 385 Szveg ltrehozsa PDF-dokumentumban ClibPDF-fel . . . 391 Szveg ltrehozsa PDF-dokumentumban PDFIib-bel . . . . 392 Szveg ltrehozsa GIF-, JPEG- vagy PNG-kpekben . . . . 394 Diagram ltrehozsa GIF-, JPEG- vagy PNG-kpekben . . . 395

12. fejezet: Nemzetkzi belltsok ............................ 399ttekints ...................................................................... 400Nyelv vagy orszg szlelse ................................................... 401 Nyelv vagy orszg szlelse a bngszbl ................... 401 Nyelv vagy orszg szlelse az Apache-csal ....................... 402 A legjobb megolds a PHP .............................................. 402 Nyelvi kvetelmnyek ......................................................... 404 Alkalmazsspecifikus vagy honlapspecifikus bellts . . . 404 GNU-recode ......................................................................... 405 GNU-gettext ........................................................................... 406 Helyesrs.................................................................................. 406 Szegyeztets .................................................................. 407 Aspell ................................................................................. 409 Pspell ................................................................................ 409 Tbb-bjtos karakterek ...................................................... 412

Gyors megoldsok ................................................... 414Orszginformci ltrehozsa ................................................ 414 Orszginformci trolsa ................................................. 416 Orszginformci visszakeresse ......................................... 419 Session-k hasznlata az orszginformcikra ................... 422 zenet keresse ms nyelvben a GNU-gettext-tel ........... 423 Szveg keresse ms nyelvekben SQL-lel ........................... 425 A karaktertpusok ellenrzse ................................................ 428 Kifejezsek s helynevek egyeztetse levenshtein()-nel . . 431

13. fejezet: Internet ....................................................... 433ttekints...................................................................... 434URL ............................................................................................ 434 Sma vagy protokoll ............................................................. 435 Hst .................................................................................. 435 XIV

VElrsi t ............................................................................... 435 Oldal ...................................................................................... 436 Tredk.................................................................................. 436 Lekrdezs ............................................................................ 436 Klnleges karakterek........................................................... 437 Base64 kdols szveges sztringek .............................. 437 Ms szerverek bngszse ..................................................... 438 Csatolfggvnyek .................................................................. 439 SNMP .................................................................................... 442 Curl............................................................................................. 445 FTP ............................................................................................. 445

Gyors megoldsok ....................................................... 447Base64 kdols ........................................................................ 447 A web bngszse PHP-val .....................................................448 Linkek ellenrzse ....................................................................451 FTP-fggvnyek hasznlata ....................................................453 Curl hasznlata ....................................................................460 Curl-opcik ..........................................................................461

14. fejezet: LDAP .......................................................... 467ttekints ................................................................. 468Telepts .....................................................................................469 Terminolgia ..............................................................................469 DN - megklnbztetett nevek ..........................................469 RDN - relatv megklnbztetett nevek ...............................470 Szintek ................................................................................471 Elemek ...................................................................................471 Attribtumok ...........................................................................471 Objektum ...........................................................................472 DIT ......................................................................................... 472 Sma ................................................................................. 472 LDIF ....................................................................................... 473 Szerverjellemzk ................................................................... 473 Klds ................................................................................ 473 Msols ............................................................................. 473 Biztonsg ........................................................................... 474 LDAP-fggvnyek ..................................................................... 474

Gyors megoldsok ....................................................... 478LDAP Windows NT alatti teleptse ........................................ 478 PHP-kiterjeszts ................................................................. 478 OpenLDAP-szerver ............................................................... 478 A szerver tesztelse .......................................................... 480 Csatlakozs az LDAP-hez ................................................... 481 Orszgkdok hozzadsa .................................................... 484 Csatlakozs ....................................................................... 485 Orszgkdok megszerzse ................................................... 485 XV \

Orszgkdok formzsa ....................................................... 485 Az els orszgkd hozzadsa ............................................ 486 Tovbbi orszgkdok hozzadsa ........................................ 487 Felhasznl hozzadsa ..................................................... 488 Kzbls szintek hozzadsa ............................................... 489 A vgs szint hozzadsa..................................................... 489 Hibakezels .......................................................................... 490 Az sszes elem listzsa ......................................................... 492 Az egy szinten lev sszes elem listzsa .......................... 493 Az sszes szint sszes elemnek listzsa ......................... 496 Az elemek rtelmezse a listzson bell ............................ 498

15. fejezet: Posta .......................................................... 501ttekints ...................................................................... 502IMAP ........................................................................................... 502 Postaldafggvnyek ....................................................... 503 Levelezsi fggvnyek ..................................................... 504 Kiemelfggvnyek ............................................................... 506 Sztringkonvertl fggvnyek ........................................... 506 Egyb fggvnyek ................................................................. 512 Levlfejrszek ...................................................................... 514 Minimlis fejrszek ........................................................... 514 Tovbbi fejrszek .............................................................. 515 MIM .......................................................................................... 515 MIME-Version ........................................................................ 516 Content-Type .................................................................... 516 Content-Transfer-Encoding .............................................. 516 Content-ID ........................................................................ 516 Content-Description .............................................................. 517 Content-Disposition ............................................................... 517 Mkdsi zemmdok............................................................. 517 Offline .................................................................................... 517 Online .................................................................................... 518 Kapcsolat nlkl ............................................................... 519 tmeneti ................................................................................ 519

Gyors megoldsok

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

A PHP levelez fggvnyeinek teleptse ............................. 520 Windows NT .......................................................................... 520 Unix ................................................................................... 520 Levl kldse ............................................................................ 521 Egy levl kldse ............................................................. 521 A From fejrsz elkldse ................................................ 523 Tbb fejrsz kldse ............................................................. 524 Egy zenet kldse tbb cmzettnek .................................... 525 Levl kldse csatolt llomnnyal .................................... 527 Tesztadatok kivlasztsa ...................................................... 528

XVI

Fjlinformcik gyjtse .................................................... 528 MIME-f ej rszek ltrehozsa .............................................. 530 MIME-zenetrszek ltrehozsa ........................................ 531 Nem MIME-fejrszek ltrehozsa ..................................... 532 A levl elkldse .................................................................... 533 Levelezsi cmek ellenrzse ............................................. 533

16. fejezet: Hlzatok ................................................... 537ttekints __ .......................................................... . 538A hibakeres ..................... , ................................................. 538 DNS- s MX-rekordok ............................................................... 538 Host-nevek ................................................................................. 539 IP-cmek .................................................................................. 539 ip2long() .............................................................................. 540 Iong2ip{) .............................................................................. 541 Protokollnevek s -szmok ..................................................... 541 Szolgltats nevek s port-szmok ....................................... 541 getservbyname() .................................................................... 541 getservbyport() .................................................................. 542 Csatolk ..................................................................................... 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 Trkp .................................................................................... 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 Tmrts ................................................................................... 552 bzip2 ..................................................................................... 552 gzip ........................................................................................ 554

Gyors megoldsok...................................................... 555DNS-rekordok vizsglata ......................................................... 555 MX-rekordok megszerzse ............................................... 556 A host-nv megszerzse ...................................................... 557 A host-nv megszerzse cm alapjn ................................... 558 A host-cm megszerzse nv alapjn ................................... 558 Host-cmek listzsa nv alapjn ......................................... 560 Protokoll szm ok felsorolsa ............................................. 561 Adatok besorolsa WDDX-szel .......................................... 562 wddx_serialize_value() ..................................................... 562 wddx_deserialize() ............................................................ 563 serialize() .......................................................................... 563 wddx_serialize_vars{) ....................................................... 564 wddx_deserialize() vltozkkal ........................................ 564 wddx_packet start() ......................................................... 565 wddx_add_vars() ................................................................... 565 wddx_packet_end() ............................................................... 565 Adatok tmrtse zlib hasznlatval .................................... 566 Sajt napl rsa ................................................................. 568

17. fejezet: Objektumok ............................................... 569ttekints ...................................................................... 570Osztlyok .................................................................................. 570 new........................................................................................ 571 Mint egy vltoz ............................................................... 571 stdCIass ............................................................................ 572 Tulajdonsgok ....................................................................... 574 var .................................................................................... 574 Konstruktr............................................................................ 575 $this ................................................................................... 575 Mdszerek ........................................................................... 576 Megsemmist ....................................................................... 577 Osztlyok kiterjesztse ...................................................... 579 Fggvnyek hozzadsa ...................................................... 579 Konstruktrk a kiterjesztett osztlyokban ........................... 579 Fggvnyek cserje ......................................................... 580 Fggvnyek trlse............................................................... 581 Tbbszrs kiterjesztsek..................................................... 582 :: ............................................................................................ 582 parent .................................................................................... 583 Szoftverterjeszts s dokumentci ...................................... 583 Tbbszrs adatelemek s llapot ....................................... 583 XVIII

Tbbszrs kimenet

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

Gyors megoldsok

. . .

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

Objektumok mentse sessinkben s a __ sleepQ hasznlata 585 Objektumfggvnyek hasznlata ...................................... 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 testreszabsa objektumokkal ................................... 594 Hrcsoportok olvassa ............................................................ 598

18. fejezet: Keress ..................................................... 605ttekints ..................................................................... 606Keresprogramok felkutatsa ................................................ 606 LDAP ................................................................................ 607

Z39.50 ........................................................................................... 607YAZ ............................................................................................ 607 A YAZ teleptse ................................................................... 608 Adatforrsok ......................................................................... 608 Tesztels............................................................................... 609 RPN .................................................................................. 610 Keress YAZ-val....................................................................... 610 Nem tmogatott keress ...................................................... 610 YAZ-fggvnyek ................................................................610 Adatbzis alap keressek ................................................615 Adatok megrzse eredeti formjukban ............................... 615 Rugalmas adatok ............................................................. 616 Rugalmas keressek ............................................................ 617 Az adatok oztlyozsa ......................................................617 Cskkenteni, de meghagyni .............................................617 Szabad szvegasszocicik hasznlata ..........................618 Kszts nagy trgymutatt .....................................................618

Gyors mecsnldsok

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

Keress egy szerveren ....................................................... 620 search() .............................................................................620 array_display() .................................................................. 622 Dl-Ausztrliai llami Knyvtr ........................................ 623 Bell Labs ................................................................................624 Keress tbb szerveren .................................................... 626 XIX

Adatforrs ............................................................................. 626 Keressi paramterek .......................................................... 626 search() ............................................................................ 626 array_display() ................................................................. 630 A keress tesztelse ............................................................ 630 Az eredmnyek..................................................................... 630 Keress a google.com-on ................................................. 631 Az rlap ............................................................................ 631 A nyers eredmnyek............................................................. 633 Eredmnyek szerkesztse ................................................... 633 Eredmnyek megjelentse .................................................. 634 Adatok indexelse ................................................................... 635

19. fejezet: Session-k ................................................639ttekints ............................................ , ........................640A honlap tulajdonosnak haszna ..................................... 641 A ltogat elnyei ............................................................... 641 Sessionazonost .................................................................... 641

Cookie-k....................................................................................... 641HTTPS .............................................................................. 642 Cookie-k vagy URL-ek ..................................................... 643 Adatok vagy adatbzisok........................................................ 643 PHP-szolgltatsok ............................................................ 644 php.ini ................................................................................... 644 PHP session-fggvnyek ..................................................... 646 Vsrli szolgltatsok ...................................................... 653

Gyors megoldsok

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

Session indtsa cookie-kkal s fjlokkal ............................. 655 Session indtsa MySQL hasznlatval ................................ 659 Az aktulis felhasznlk megjelentse ........................... 668 A session_end() hasznlata ................................................... 670 Fjlok ................................................................................. 670 Adatbzisok ..................................................................... 670

20. fejezet: XML ............................................................ 675ttekints ..................................................................... 676Mi az XML? ................................................................................ 676 Mirt csodlatos az XML? ..................................................... 676 Mit csinl az XML? .......................................................... 677 Mit nem csinl az XML? ................................................... 677 AZ XML nem helyettesti a HTML-t .................................. 678 Adatok .................................................................................. 678 Kls elemek .................................................................... 680 Nem rtelmezett elemek ....................................................... 680 Komplex DTD-k rsa .......................................................681 XX

Szerkezet ............................................................................... 681 Nevek ..................................................................................... 681 Attribtumok ........................................................................ 681 CDATA ............................................................................... 682 DTD .................................................................................... 682 Nvmezk .............................................................................. 683 Xlink s XPointer ................................................................... 684 XML-fggvnyek .................................................................. 684 Telepts ................................................................................. 684 Fggvnyek ....................................................................... 684 XSLT ........................................................................................... 691 HTML, DHTML vagy XSLT? ............................................. 691 Az XSLT teleptse ................................................................ 692 XSLT-fggvnyek .............................................................. 692 WDDX ......................................................................................... 695 DOM ....................................................................................... 696 A DOM XML teleptse ..................................................... 696 DOM XML-fggvnyek ..................................................... 697

Gyors megoldsok ................................................... 703Az XML-fjlok megjelentse ................................................... 703 Az XML-adatok megjelentse ................................................. 704 XML-adatok rtelmezse ......................................................... 707 XML nyit- s zrtag-ek sszeillesztse ............................. 711

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

XXI

1. fejezetPHP-bevezetGyors megoldsok Apache-konfigurci Egyedi Apache-fggvnyek apache_lookup_uri() apache_note() ascii2ebcdic() s ebcdic2ascii() getallheaders() PHP-konfigurci oldal: 15 15 16 16 17 17 17 17 18 18 18 19 19 20 20 20 21 21 21 22 22 23 23 23

dl() extensionjoaded()Hibakeress assert() assert_options() die() Hibk Naplzs Kimenet-ellenrzs Biztonsg Regulris kifejezsek ereg() ereg_replace() eregi() eregi_replace() split() spliti()

7. re/ezer

Hi-tr-Devezeto

ttekintsdvzlnk a PHP vilgban! Ha jelenleg valamely ms szkript nyelven programozol, akkor itt az ideje, hogy lvezd a vilg legjobb webes szkript nyelvnek elnyeit. Mg ha a szkript nyelvektl oly tvol es programnyelvet hasznlsz is, mint az Assembler vagy a C, munkd gy felgyorsul majd, mint Kirk kapit ny, amikor bringjrl tszllt az Enterprise rhajra. Jmagam azrt kezdtem PHP-t hasznlni, mert Periben rni nha rettenten unalmas volt, a Visual Basic pedig csak egy platformon elrhet. A PHP mindkt problmn segt. A 20. szzad vgn a Visual Bas ic volt a vilg legnpszerbb programnyelve, akr a fogorvosok is rhattak vele fogszati alkalmazsokat. A Visual Basic a Basic nyelvhez ktdik, de a Basic csald sszes tagja klnbzik valamiben, s mg a Visual Basicnek is szmos inkompatbi lis vltozata ltezik. A PHP-nek csak kt vltozata terjedt el: a PHP3 s a PHP4. A PHP4 vilgszerte gyors temben vltja fel a PHP3-at. A webszervereken kvl fut segdprogramok rsra a Perl alkalmasabb, mint a PHP, jllehet lehetsg van a PHP kibvtsre s ezen segdprogramok nagy rsznek helyettestsre. Ha egy ideig hasznlod a PHP-t, egyszerbbnek fogod tallni a PHP kiterjesztst, mint a Perire val visszatrst. Korbban Assemblerben s Cobolban programoztam nagygpes szervereken. Az Assemb ler-hv k a gyors vgrehajts rdekben mindent Assemblerben akartak megrni, a Cobol-hvk pedig a gyors programozs miatt szerettek volna mindent Cobolban megcsinlni. Akkoriban a szmtgpek annyival lassabbak s drgbbak voltak, hogy a mveletek vgrehajt snak sebessge mg knyes tmnak szmtott: egy jelents processzorfejleszts hsz programoz ves fizetsbe kerlt. Most viszont a processzor sebessgnek nagymrtk nvelse annyiba kerl, mintha egy htre brelnnk egy programozt. A gyors programvgrehajts gy nem tma tbb. A PHP3 el g lass volt ahhoz, hogy mentsgl szolgljon a Perihez rt programozknak, mirt nem vltottak. A nagy teljestmny elrshez azonban mr nincs szksg a Perire. A C az egyetlen a programozshoz szksges msik nyelv, s a C is csupn a PHP-hez val opercis rendszerek s fordtprogramok megrshoz kell. Ha rtesz a PHP megrshoz hasznlt ANSI C-hez, akkor a PHP forrskdjval j vltozatokat hozhatsz ltre, vagy fej lesztheted a jelenlegit. A hozzm hasonl 99,75% , aki nem ismeri a C-t, sokrtbb teheti a PHP -t klnfle kdok, fggvnyek s objektumok sszegyjtsvel. Szmtalan honlapon elre megrt alkal mazsok s komponensek gyjtemnyeit talljuk, amelyek sajt clra felhasznlhatk. A Freshmeat (freashmeat.net) s a Sourceforge (sourceforge.net) j kiindulsi pont lehet mindehhez. Ha mondjuk PHP-alap e-mail-klienst vagy -szolgltatst szeretnl ltrehozni, keress r a Freshmeaten a php email" kifejezsre. A knyv rsa idejn ez a keress 56 tal latot eredmnyezett, amelyek kztt szerepeltek alkalmazsok, objektumok s fejleszts alatt ll kdok bta-verzii is.

ttekints

Programozsi 1x1Ha egyenesen a HTML-szerkesztsbl csppensz bele a PHP-programozs vilgba, hasznos lehet megismerned a szkript nyelveket s fejldsk trtnett. Ha esetleg programoztl mr ms nyelveken, akkor mind a GML-rl, mind a nylt forrskdrl szl informci segthet a PHP mkdsnek megrtsben.

Egy kis trtnelemCharles Babbage 1833-ban rz- s nkerekekbl kezdett szmtgpet pteni. Ez akkoriban, amikor Assemblerben kezdtem programozni, egy kicsit primitvnek tnt szmomra, mostanban viszont a modern programnyelvek s az Assembler kzti klnbsg tnik akkornak, mint a rz s a modern szmtgpek szilikonchipje kzti klnbsg. Mintegy 30 programnyelvben dolgoztam, s rtam is egyprat, de j nhnyszor belefutottam az egyes cgek ltal kifejlesztett sajt tulajdon programnyelvek, illetve az egyetlen programoz ltal rt nyelvek okozta megszortsokba. A nylt forrskd szoftverfejleszts lnyegben megszntette ezeket a korltoz tnyezket. Ha egyetlen ember fejleszt egy nyelvet, szorosan ellenrzse alatt tarthatja azt, s kpes a szmtstechniknak j irnyokat adni. Az IBM-nl 1969-ben dr. Charles Goldfarb vezette azt a kutatcsoportot, amely a Generalized Markup Language-t (GML), majd ksbb a Standard Generalized Markup Language-t (SGML) kifejlesztette. Az SGML a Hypertext Markup Language (HTML) se. Elmondhatjuk, hogy Dr. Goldfarb j irnyba terelte a szmtstechnikt. A nagy vllalatoknl kifejlesztett sajt tulajdon programnyelvek ezzel ellenttes irnyba haladnak. Az IBM kt olyan termkvel is dolgoztam, amelyek ugyanazt a piacot cloztk meg, de mind a kettt korltozta, hogy nem voltak kompatbilisek az IBM sszes termkvel. Az IBM szakemberei sajt rdekeiknek megfelelen hasznltk a fejlesztsi projekteket, ami aztn mindkt termk vgt jelentette. Nylt forrskd fejleszts esetn nincsen .ehetsg az egyni rdekek eltrbe helyezsre, hiszen ez a fejlesztsi mdszer lehetv :sszi, hogy a programozk versenyeztessk sajt tleteiket, a felhasznlk pedig eldntik, nogy nekik melyik vltozat felel meg. Vgeredmnyben a kevsb hasznos termk beolvad ms termkekbe, vagy httrbe szorul, hiszen helyette a fejlesztk a npszerbb termkek :ovbbfejlesztsvel vagy teljesen j tletek kidolgozsval foglalkoznak.

A nylt forrskd megjelense1992-ben Linus Torvalds a Linux megrsval eltrbe helyezte a nylt forrskd szoftvereket. A Linux egy olcs PC-n is futtathat ingyenes opercis rendszer. Emberek ezrei tltik szabadidejket a Linux fejlesztsvel, hogy emberek millii ingyenesen hasznlhassk. 1994-ben Rasmus Lerdorf kifejlesztette a PHP/FI-t, ami a nylt forrskd fejlesztseknek ksznheten PHP4-gy fejldtt. A PHP4 egy olyan nylt forrskd nyelv az j webfejlesztk szmra, amely folyamatosan vltja fel a Perihez hasonl rgebbi nyelveket.

Fordts s fejlesztsA kezdeti programnyelveket papron fordtottk le, s binris formban gpeltk be. Ksbb megjelentek az automatikus fordtprogramok, amelyek az ember ltal

1. fejezet

PHP-bevezet

rtelmezhet nyelvet a szmtgp szmra megfelel binris nyelvre fordtjk. A fordts cskkentette a feldolgozsi idt, de hosszadalmas kslekedst okozott a programozknak. A szkript nyelvek az egyszeri fordtst olyan rtelmezsi folyamattal helyettestik, amely minden egyes alkalommal lezajlik, amikor a szmtgp a szkriptet beolvassa. A programozs ezltal felgyorsult, de a szkriptek lassabbak lettek. Az 1980-as vek elejn a szkript nyelveket fejlesztk fordtprogramokkal ksrleteztek. Bizonyos szkriptrtelmezk voltakppen a memriba fordtottk a szkriptet, gy a szkript gyakran hasznlt rszeit csak egyszer kellett fordtani, s sokkal gyorsabban futottak. Nhny szkriptfejleszt tovbbment, a lefordtott memriatrkpeket lemezre mentette, gy a kvetkez futtatsok gyorsabbak lettek. A 1990-es vek vgn a webszerver nyelvek hasonl fejldsen mentek keresztl. A Perit s az els PHP-t - mivel HTML-oldalak voltak - soronknt rtelmeztk. A fejlesztk ksbb olyan rendszereket vlasztottak, amelyek a memriba fordtottak. A PHP3 s a PHP4 kztti risi teljestmnyklnbsg az rtelmezsrl a fordtsra val ttrsnek ksznhet. Mind az Apache, mind a PHP szmra lteznek mr klnbz cache-mechanizmusok, amelyek elmentik a lefordtott memriatrkpeket a kvetkez futtatsok szmra. Attl fggen, hogy a szknpted hogyan mkdik, a webszervered jcskn felgyorsulhat a cache-szoftver hasznlattl, de le is lassulhat, mert a ptllagos szoftverrfordts rvn elillan a megtakarts.

KltsgekA nagy hlzatokat kiszolgl els szerverek nagygpes IBM-szerverek voltak, amelyek 10 000 000 dollrba vagy annl is tbbe kerltek. Amikor az els IBM nagygpes szerver klnjt az IBM-mel versenyeztettem, volt szerencsm 60 szzalkot lealkudni a szrnyeteg rbl. Ma viszont egy 400 dollros, memrival jl megpakolt, hasznlt 486-os is mkdhet szerverknt. Termszetesen, ha nagyra tr terveid vannak, a legjabb PC-re van szksged, amibe annyi memrit prselsz, amennyi csak belefr. Ha a honlapod igazn beindul, akr 10 000 PC-re is szksged lehet.

A nylt forrskd hasznlatrlHa nylt forrskd szoftvert hasznlsz, mindig olvasd el a licencfeltteleket. Tbb szz PHP-alap nylt forrskd alkalmazst tartalmaz oldal ltezik, mindenfle licencekkel. A felhasznlsi felttelek a Ezt a valamit a fiskoln csinltam. Tessk, hasznld ingyenesen"-tl a Szerzi jog fenntartva. Csak akkor hasznlhatod, ha ..."-ig terjednek; utbbi esetn lehet, hogy meg kell rizned az eredeti kdot az eredeti csomagban, teljes dokumentcival s szerzi jogi figyelmeztetsekkel. Vannak memorialware-ek (meg kell emltened, hogy a kdot a fejleszt halott bartjnak vagy rokonnak ajnlod), postcardware-ek (egy kpeslapot kell a szerznek kldened), charityware-ek (meg kell becslnd a szoftver rtkt s jtkony clra kell azt felajnlanod) s mgkikelltallniware-ek, amikor is te rsz egy kdot, kiadod, s kitallod a sajt licencfeltteleidet. A megszokott norml licenc a GNU General Public License (GPL), amely a www.gnu.org/copyleft/gpl.html oldalon tallhat.

Hibakeress?:rd ts sorn a fordtprogram szmtalan egyszer hibt szrevesz. A lefordtott progra - ok ltalban tisztk, s knny bennk a hibkat megtallni. Az rtelmezett szkriptekre ;_ tlls azt eredmnyezte, hogy bizonyos, a szmtgp ltal szlelhet hibkat addig -em vesszk szre, amg a szkript adott rszt nem rtelmezi a program, ami akr hna -r-: skA a szkript forgalomba kerlse utn is megtrtnhet. Az rtelmezett szkripteket n e-~z tesztelni. Egsz iparg telepedett a szoftverfejlesztk kr, akik szisztematikusan tesz telik az rtelmezett nyelveket, ennek ellenre a szisztematikusan tesztelt szkriptek is megbukhatnak. A PHP3 is szenvedett ettl a problmtl. A memriba fordt" szkriptrtelmezkre val tlls egy lps htrafel, az egsz szveg egyszerre trtn szintaktikai ellenrzse fel. A PHP4 hasznlat eltt a teljes szkript szin-takukjt ellenrzi, lefordtja az sszes fggvnyt, s alaposan tnzi a szkript f rszeit. Ha a PHP4-ednek sikerl mkd HTML -t produklni, az azt jelenti, hogy a szkriptben nincsenek szintaktikai hibk s az sszes fggvny megfelelen kerlt lefordtsra, s ez ? okkal jobb ellenrzst jelent, mint ami PHP3 -ban lehetsges volt.

A PHP elnyeiEgyrtelm, hogy a PHP az egyetlen igazi nyelv, de vannak, akiket csak a tnyek gyznek meg, a tnyek pedig azt mutatjk, hogy napjaink weboldalaihoz a PHP a megfelel szkript nyelv. Tapasztalataim alapjn lltom, hogy a PHP-t knnyebb tantani, mint az olyan keverk nyelveket, mint a Visual Basic vagy az US. Mivel tbb iskolban tantanak Visual Basicet, mint PHP-t, rvid tvon az informatikai menedzserek szmra vonzbb a Visual Basic.

rtelmezs kontra fordtsGondolj a szmtgpes nyelvekre gy, mint utastsok listjra. Aztn vegyl egy ltalad rendszeresen hasznlt utastst, legyen az telrecept vagy feljegyzs arra vonatkozan, hogy hogyan tallod meg a bartod j hzt. Kpzeld el, hogy az utastsokat begpel ember n hny, szmra magtl rtetd utastst kihagy, vagy nhny szt hibsan gpel be. Az eredmny az lesz, hogy nem tudod az utastsokat kvetni. Vonatkoztasd ezt a problmt a fordtprogramokra. Ahogy a programoz befejezi a gpelst, a szmtgp megnzi a helye srst, s ellenrzi, hogy az egyes utastsok ott kezddnek -e, ahol az elz befejezdtt. (Azonban a szmtgp nem tudja ellenrizni, hogy borsra vagy borsra gondoltl, hiszen mindkett szksges hozzval.) A fordtott nyelveknek vannak htr nyai: az egsz programot meg kell rnod fordts eltt, hiszen minden hinyz rsz fordtsi hibt okoz. Az rtelmezett szkriptekkel lehet soron knt haladni, mert az rtelmez anlkl foglalkozik az adott sorral, hogy ellenrizn a tb bi megvan-e. Vonatkoztasd a szmtgpes rtelmezst a hibsan rt nvre. Amikor a programoz befeje zi az rst, a szmtgp semmit nem tesz. A szmtgp addig nem ellenrzi az utastso kat, amg el nem kezded hasznlni azokat. A szmtgp addig nem foglalkozik az adott

nv helyesrsval, amg a nevet tartalmaz sor utastshoz nem r. Egy flig ksz leves receptjnek a kzepre rve a gp kzli veled, hogy nincs rlt bors". Az egsz folyamatban lv munkt kidobhatod, s msnap kezdheted ellr l. A PHP a ford ts s rtelmezs majdnem tkletes keverkt nyjtja. Annyit ellenriz, amennyit egy j fordtprogram ellenrizne, s emellett az rtelmezs elnyeit is biztostja.

Rszkdok kontra programozsFjlokbl, fggvnyekbl, objektumokbl s minden egyb tredkkdokbl is sszerakhatsz alkalmazsokat, de ez azrt nem olyan, mintha a sajt kdodat rnd meg. Ha sosem rtl kdot PostgreSQL adatbzishoz val hozzfrshez, nem fogsz tudni egy msvalaki l tal rt PostgreSQL alap kdot ellen rizni. Rengeteg ingyenes PHP -objektumot s -alkalmazst Ietlthetsz. Ezek azonban akr olyan veszedelmes kdolsi csapdkat is rejthetnek, amelyek nehzkess tehetik a mkdtetst, s programod zleti clokra alkalmatlann vl hat. Lteznek olyan kdok, amelyek egyltaln nem hasznljk a PHP4 fontos funkciit, pldul a = = = opertort, ms kdok nem ellenrzik a bevitt adatok rvnyessgt, megint m sok pedig anlkl hasznlnak adatbzist, hogy az egyes mezkhz a megfelel adattpuso kat alkalmaznk. Pldul vegyk a MySQL-t: MySQL-ben sokan hasznljk tblzatok ltrehozsra a phpMyAdmint s soha sem veszik szre, hogy a phpMyAdmin alapbellts knt NOT NULL rtkre lltja a mezket. Ezek az emberek kzreadjk kdjaikat a weben, amiket msok hagyomnyos SQL-tblzatok ltrehozsra hasznlnak fel, ez MySQL-ben alaprtelmezsben NULL rtket ad a mezknek. Ha egy ilyen csapdba bele esel, az SQL output oldalain a nulla rtkek klns eredmnyeket okoznak. A sajt kdok rsakor eleget tanulhatsz a hhoz, hogy teszteld, ellenrizd s kijavtsd a le tlttt kdokat. Ha tovbbra is hasznlod a letlttt kdot, tudasd vltoztatsaidat a szerzkkel (vagy ajnld nekik ezt a knyvet), hogy kijavthassk a kdjukat, s a kvetkez 25 000 letlt mind jobban jrjon.

Kimenet-ellenrzsHTML-oldalakat ktflekppen is programozhatsz PHP-vel. me az egyik mdja annak, hogy PHP-vel hogyan szrhatod be a dtumot a szveg egyik sorba:Today's date is .

Ez a mdszer mkdik, s felttelezheten gyorsan megvalsthat, hiszen csak egy kis PHP-t szrsz egy ltez HTML -oldalba. Az ilyen megkzeltsben mkd PHP alap al kalmazsok szerte az egsz webrl letlthetk. Mindazonltal jellemzen sok apr vltoz tatst ignyelnek ahhoz, hogy honlapodhoz illeszkedjenek, s az adatbzisokhoz csak mini mlis hasznukat veheted. A kvetkez plda viszont - a PHP-kdba beszrt kis szveggel - lehetv teszi, hogy mindent kzben tarts, s jobban hasznlhat a nagy, adatbzis alap alkalmazsokra is: = sszehasonlt opertorok Hamis 8 ==8 8 !=4 0===0 0 !== fals 46 4 =6 8 ==4 8 !=8 0 === fals 0!==0 88 8=8

Egyenl ertek Nem egyenl rtk Egyenl rtk s egyez tpus Nem egyenl rtk vagy nem egyez tpus Kisebb Nagyobb Kisebb vagy egyenl Nagyobb vagy egyenl

Nhny nyelvben a => ugyangy mkdik, mint a > = , de a PHP -ban nem. Nincs sem > = =, sem < = = opertor, de a !-t mshol is hasznlhatod, nem csak a fenti pldban. A ! hasznlatrl a kvetkez rszben tovbbi pldkat tallsz.

Aritmetikai opertorok -* / %Tudnak a PHP-opertorok sszeadni? Hogyne tudnnak. A + sszeadshoz, a - kivonshoz, a * szorzshoz, a / pedig osztshoz hasznlhat, a % pedig az oszts maradkt adja. Ezek az opertorok mind lebegpontos szmot adnak eredmnyl, ha az input lebegpontos, s lebegpontoss konvertljk az egszeket, ha az eredmny nem egsz.

2. fejezet

Adatok

A matematikai mveleteket az opercis rendszer vgzi, amely ehhez a szmtgped hardver rszt hasznlja, gy ezen mveletek pontossga a hardvertl s attl fgg, hogy az opercis rendszered hogyan kezeli a hardver eredmnyeit. A kvetkez rszekben lert GMP (egy nylt forrskd matematikai csomag) matematikai fggvnyekkel korltlan pontossg egsz-matematikai mveletek vgezhetek, ha a GMP teleptve van. Ha egy lebegpontos szmbl egsz szmot szeretnl, a floorQ a lebegpontos szm egsz rszt adja, a ceil() pedig felfel kerektve ad egszt eredmnyl.

Sztringopertorok:. .=Kt sztringet a pont (.) hasznlatval fzhetsz ssze, a pont s az egyenlsgjel kombinlsval pedig egy sztring vghez csatolhatsz egy msikat: . = . A kvetkez ktsoros kd els sora a $x vltoznak az "open source" rtket adja az "open" sztring, egy szkz s egy "source" sztring sszefzsvel. A msodik sor azutn a "software"-t ennek a vgre teszi, gy a $x vgs rtke az "open source software": $x = "open" . " " . "source"; $x . = " software";

Dokumentumbejegyzs: >, s a balra tols < >= 1;, akkor a $b 2 lesz. A kvetkez jobbra tols eredmnye 1, a kvetkez 0, s utna mr vgig nulla. Ismt a $b = 4;-val kezdve, egy helyi rtk balra tols ($b 1;.

34

ttekints

Vgrehajts-opertor:A billentyzet bal fels sarkban magnyosan lldogl a ritkn hasznlt visszaposztrf, a \ A visszaposztrf fontos akar lenni, de a PHP-t leszmtva mindenki sszekeveri szegnyt az idzjellel. A PHP viszont gy kezeli, mint a system() -fggvnyt, s mindent, ami visszaposztrfok kztt van, az opercis rendszernek kld vgrehajtsra. Brmit is kld vissza az opercis rendszer, az egy sztringbe kerl, amit feldolgozhatsz vagy megjelent hetsz. Jllehet a visszaposztrf hasonlatos a system()- s az exec()-fggvnyekhez, a visszaposztrf az egyetlen, ami az outputot szmodra teljesen megfelelen adja vissza. A p lda a Unix/Linusos Is parancsot hasznlja a fjlnevek s helyk ksbbi megjelents vagy esetleg elemzs cljbl trtn $list -be val listzsra. Jobban jrnl, ha a pldban bemutatott egyszer fjlnvlistt az egyik PHP -fjlfggvny hasznlatval kapnd meg, de elfordulhat, hogy olyan paranccsal tallkozol, amelynek nincsen a PHP -ban pontos vagy egyszeren hasznlhat megfelelje:$1i S t = ' 1S ' ;

Hivatkozsok: &=&A hivatkozsok a vltozk neveinek aliasai. Ha a $x-et 5-re lltod, a $x egy olyan nv, amely az 5, egszmezben trolt rtkre mutat, s a PHP lehetv teszi, hogy ms nevek kel is ugyanerre az egszmezre mutassunk. A $f =& $x; -vel bellthatod, hogy a $f ugyanerre az egszmez re mutasson. Az 5 -t tartalmaz egszmez vltozatlan marad, s a $x ugyangy erre az egszmezre mutat. Csak annyi trtnt, hogy a PHP szimblumtbl zatban egy jabb nv mutat ugyanarra az egszmezre. Ha a $f -hez 3-at hozzadsz, az egszmez 8 -ra vltozik, s a $x hasznlatakor a $x is 8-at ad eredmnyl. Nem hasznlhatsz hivatkozst egy msik hivatkozs megvltoztatsra, gy az eddigi pl dnknl maradva, a $f- et j mezre irnytva a $x nem fog arra az j mezre mutatni. Ha van egy Sb-nek nevezett m ez, s a $f =& $b;, hasznlatval $f ugyanarra a mezre mutat, mint a Sb, csak a Sf-et vltoztatod. A $x tovbbra is ugyanarra a mezre mutat. Ugyanez vonatkozik a hivatkozsok feloldsra is: ha feloldod $f-et, unset($f), eltvoltod $f-et, de a $x-et s az 5-t tartalmaz mezt rintetlenl hagyod. A kvetkez plda els sora nem mkdik. A msodik sor nem ms, mint a hibazenet ele je, ha mgis kiprblod a kdot. A kd megprbl hivatkozst adni egy rtknek, de a PHP nem tudja, hogyan tegye ezt. A PH P csak olyan mezkhz tud hivatkozst adni, amelyeket rendes hozzrendel paranccsal hoztunk ltre: $a =& 5; Parse error: parse error, expecting 'T_NEW' or 'T_STRING'

Vannak nyelvek, amelyekben a mez k rszeihez, illetve egytteshez is rendelhetsz hivatkozst, de a PHP-ban nem. Mikor kiprbltam a $b =& $a[15];, a PHP szintaktikai hibt jelzett, s amikor a $a =& $b . $c;-vel kiprbltam az egyttes hivatkozst, azt a PHP csak az els, a $b mezhz hozta ltre. A fggvnyekben a paramternevekhez az egyszer and karaktert, az &-et adva a paramterrel hivatkozhatsz egy, a fggvnyen kvli mezre. Ez sokkal jobb, mint ha a kls

35

2. fejezet Adatok

mezt bemsolnd. A kvetkez pldban a plus_one() fggvny fogad egy vltozt, hozzad egyet, majd megjelenti a vltozt. Mivel a plda elejn a $x 11-re van belltva, a fggvny 12-t eredmnyez, s az els print utasts a 12-t jelenti meg. Azonban a msodik print utasts a 11-et, az eredeti, vltozatlan $x-et jelenti meg.$x = 11

function plus_one($value) return(++$value); print(plus_one($x)); print($x);

Most szrj csak egyetlen karaktert a pldba, az St-et a $value el. gy mr a msodik print-utasts is a 12-t jelenti meg a 11 helyett, hiszen a $x ltal mutatott mez msolata helyett az &$value most mr ugyanarra a mezre val hivatkozs, mint amire a $x mutat:$x = 11

function plus_one(&$value) return(+ + $value) ; print(plus_one($x)); print($x);

A &C hasznlatval a fggvnyek eredmnyeknt kapott hivatkozsokra is ltrehozhatsz aliasokat. Ha az elz kd $a = &plus_one($x); lenne, a $a egy a fggvny eredmnyeknt kapott rtkre vonatkoz alias, ezltal a $x vltozra vonatkoz hivatkozs lenne. A hivatkozsok nem csak vltozkra, hanem objektumokra is vonatkozhatnak. Egyb hivatkozsok a fggvnyekben a global utastssal, az objektummdban pedig $this-szel hozhatk ltre. A fggvnyeket a 10., az objektumokat a 17. fejezetben trgyalom. A kvetkez plda a find_variable()-fggvnyt mutatja be, amely rtk helyett hivatkozst ad eredmnyl, hiszen a fggvny definilsakor & karakter van a fggvny neve eltt. Ha a find_variable() egy bels mezre vonatkoz hivatkozst eredmnyezne, a mez eltnne, amikor a fggvny vget r, gy a find_variable() kls mezket ignyel. Ezeket a kls mezket vagy a paramternevek el rt &-el vagy a global utastssal biztosthatod. Ha mr egyszer vannak bemen hivatkozsaid, s a fggvnyt gy definiltad, hogy eredmnyl hivatkozsokat adjon, akkor tetszleges feldolgozssal vlaszthatod ki az eredmnyl add hivatkozst. Ebben a rvid pldban a find_variable() egyszeren az inputot adja vissza. Hogy tesztmezt hozzunk ltre, a $b-t 5-re lltjuk, majd beadjuk a find_variable() fggvnybe, amely eredmnyl egy a $b-re vonatkoz hivatkozst ad. A =&-el a $a-t a find_variable() eredmnyre hivatkoztatjuk, s mivel az eredmny a $b-re vonatkoz hivatkozs, a $a most ugyanarra a mezre hivatkozik, mint a $b. Ha ezutn $a-t megvltoztatjuk (a pldban eggyel nveljk), a $b ugyanarra a megnvelt mezre mutat s az utols sor a "a: 6, b:6"-ot jelenti meg:function &find_variable(&$parameter)

return($parameter);

36

ttekints

$b = 5; $a -Se f ind_variable ( $b) ; $a + +; print("a: " . $a . ", . $b) ;

bcilins b: "

Mveleti sorrendA kvetkez lista az opertorokat a mveletek prioritsa alapjn lltja sorba, a legmagasabb prioritsval kezdve. Az ugyanolyan priorits opertorok jobbrl balra haladva hajtdnak vgre. Zrjelekkel (), megvltoztathatod a mveletek vgrehajtsi sorrendjt:new

! h -\ (int) (double) (string) (array) (object)/ /o

< > = == i= = = = ! = = &

I

)

:

=+= print AND XOR OR

.= *= /= .= %= & = i = - = ~= =

Ellenrzs s szerkezetEbben a rszben azokrl az utastsokrl lesz sz, amelyekkel ellenrizheted a szkripted vgrehajtdst, gy megmutatom az if(), else s elseif() dntsi utastsokat, majd egy alternatv szintaktika is szba kerl. A switch()-utastssal, amely hasonl a ms nyelvek select utastshoz, nagyszeren ki lehet vltani az if()-utastsok hossz sort. A whileQ-s for()-utastsokkal adott felttelek mellett mkd ciklusokat pthetsz a kdba, hasonlan a ms nyelvek while()- s for()-parancsaihoz. Az include()- s requireQ-utastsokkal ms fjlokbl szrmaz kdokat gyazhatsz a szkriptedbe, s mind a kett ugyangy mkdik, mint a C-beli megfelelje. Van pr csapda,

. rejezei

AaatoK

amire figyelned kell, ha PHP-ban hasznlod ezeket, ezrt az j require_once() s include_once() utastsok segtenek azon a gyakori problmn, ha egy fjl - akaratod ellenre - tbbszr gyazdik be.

if()Az if() PHP-beli hasznlata hasonl annak ms nyelvekbeni hasznlathoz. Ez a rsz be-mutatja a if() hasznlatnak trkkjeit, s ismertetek nhny elkerlend csapdt is. A kvetkez rvidke plda a $a rtkt teszteli, s ha az nagyobb, mint 0, akkor kirja, hogy "ok":if($a > 0) { print( " o k " ) ; }

A PHP a 0-t hamisnak rtkeli, minden 0-nl nagyobbat vagy 0-nl kisebbet pedig igaznak. Vannak nyelvek, amely a negatv szmokat hamisnak rtkelik, gy knnyen csapdba kerlsz, ha ms rendszerekbl szrmaz adatokat dolgozol fel. Mivel a PHP a karakteradatatokat automatikusan egszre konvertlja, a 0-t is hamisnak tekinti, hiszen az a 0 hosszsg sztring. Ha azt rod, hogy if($a == fals), mind a 0, mind a "" hamisat adna eredmnyl, gy az if($a = = = false)-t kell hasznlnod, miknt azt az Opertorok" rszben megbeszltk. A PHP a mezket egyenesen logikai rtkekk konvertlja, gy az if($a != 0) helyett elegend az if($a), s a $a-t a PHP fogja az if() szmra igazra vagy hamisra konvertlni. Az if utastsokat az if(I$a) formban is megadhatod, amely akkor ad eredmnyt, ha a $a hamis. Mivel ezek a vltozatok mind nem szndkolt eredmnyhez vezethetnek, javaslom az rtkek s tpusok sszehasonltsnak formlis hasznlatt, azaz az if($a = = = true) s if($a = = = fals) formkat. Az if tbb felttelt is vizsglhat, ha a feltteleket az and-del kapcsolod ssze. Mivel a felttelek balrl jobbra kerlnek kirtkelsre, mieltt az rtket vizsglod, ellenrizheted, hogy az adott vltoz ltezik-e. A kvetkez plda az isset()-nl megll, ha a $a nincs meghatrozva, gy nem fog a hinyz $a-ra vonatkoz hibazenet megjelenni. Ezzel a rvid kddal opcionlis vltozk megltt ellenrizheted (pldul egy rlapmezt): if(isset($a) and $a > 0) { print ("ok") ,-

elseAz else-utastst nagyszeren lehet brmilyen rtk esetn hasznlni, s pontosan gy mkdik, mint brmely msik nyelvben. Az if () utn hasznlhat, ahogy a kvetkez plda is mutatja:if($a == $b) ( print("equal");

38

ttekints

else print("not equal");

elseifQAz elseif()-utastssal az if()-utasts klnbz feltteleire lehet ugrani, s hasonl a ms nyelvekben hasznlt elseif()- s else if()-parancsokhoz:if( $ a -" h ot " )

print("Turn on air-conditioner"); elseif($a = = "warm") print("Enjoy the weather"); else print("Turn on heater");

switch ()Az elseif()-utasts pldjban a tbb vlasztsi lehetsget a switch()-utastssal is meg lehet jelenteni. A switch() hasznlatval knnyebb a tbb lehetsges rtk s mvelet kezelse, me az elz plda switch()-utastssal megvalstva:switch($a) case "hot": print("Turn on air-conditioner"); break; case "warm": print{"Enjoy the weather"); break; default: print("Turn on heater");

A switch()-utastssal vltozt vagy kifejezst hasonlthatsz ssze, jelen esetben a $a-t, elszr az els case utasts utn ll kifejezssel, "hot", s egyezsg esetn a case utasts utni kd vgrehajtsa trtnik meg. Ha nincs egyezsg, a switch() a kvetkez case-re ugrik s ismt sszehasonlt. A default:-utasts egyenrtk az if()-fel hasznlt else-utastssal - ha az sszes case-uta-sts sikertelen, akkor ennek vgrehajtsa valsul meg. A default:-utasts nem ktelez, miknt az else sem ktelez az if () utn. Miutn a switch() befejezi a case-utastsban tallt kdot, folytatja a teljes rsz lefuttatst, hacsak nincsen break-utasts, amelynek hatsra kiugrik a switchQ futtatsbl. (Bizonyos

. re/ezer

Adatok

nyelvek a break megfelel je nlkl is kiugranak a switch() -bl, gy a kvetkez plda egyenrtk megfelelje nem mindenhol hasznlhat.) Az elz pldnl maradva elfor dulhat, hogy azt akarod, hogy "hot" esetn a lgkondicionl is bekapcsoljon, s az id jrsnak rvend zenet is megjelenjen. Csak annyi vltoztatst kell tenned, hogy a "hot" case utn kihagyod a break-et:switch($a) { case "hot": print{"Turn case "warm": print{"Enjoy break; de fault: print("Turn

on the

air-conditioner"); weather") ;

on

heater");

Elfordul, hogy amikor azt szeretnd elrni, hogy klnbz rtkek esetn is ugyanaz a mvelet trtnjk meg, s sok nyelvben elegend az rtkek egyetlen case utastsban val megjelentse. A PHP-ban minden egyes rtkhez kln case-utasts szksges, amellyel jobban nyomon kvethet az egyes rtkek dokumentlsa (akr minden sorba megjegy zs beszrsval). A kvetkez pldban a programoz kedveli a hsget, gy kikapcsolva hagyja a lgkondicionlt:switch{$a) { case "hot": case "warm": print("Enjoy break; default: print("Turn

the

weather");

on

heater");

whileQHa egy tmbt vagy egy fjlt, vagy egy adatbzis egy sort olvasod be, j hasznt veszed a while()-nak a program futsnak szablyozsra. A while() egyetlen PHP-beli vetlytrsa a for(), de jmagam inkbb a while()-t hasznlom, mert az a legtbb fggvny s szerkezet esetn jobban megfelel, mint az if(), A nyelvek a while() k lnbz vltozataival lehetv teszik a felttelek ciklus eltti vagy utni tesztelst, gy a ciklussal legalbb egyszer lefuttathatod a kdot. A PHP -ban ez a do while()-utastssal rhet el. A kvetkez plda egy ltalnos while() -ciklust mutat be, amely egyszer sem fog lefutni, hiszen a $a mr egyenl a $b -vel. A plda msodik rsze a do whle()-vltozatot mutatja, amely legalbb egyszer lefut a $a==$b egyenlsg tesztel se eltt. Az els rs z egyetlen sort sem nyomtat, mg a msodik pontosan egyet:$a = $b = while($a != $b) 5;

print("This will never print");

40

ttekints

do { print("This will print at least once"); } while($a ! = $b);

A while()-ciklus, ahogy azt a kvetkez pldban lthatjuk, a Iist()- s each()-utastsokkal kombinlva kivlan hasznlhat a tmbkn belli lpkedshez. A plda ltrehoz egy rvid tmbt, a tmbmutatt a tmb elejre lltja, majd a whileQ hasznlatval keresztllpked a tmbn. Az each()-utasts egyszerre egy tmbelemet, a tmb vgn pedig hamis rtket eredmnyez. A list()-utasts tveszi az each()-tl az adatokat, a tmbelem szmt az els' mezbe, a $k-ba, a tmbelem rtkt pedig a msodik mezbe, a $v-be helyezi:$white_crystalline_substance[] = "C12H22O11"; $white crystalline_substance[] = "C8H10N4O2.H20"; $white_crystalline_substance[] = "NaCl"; reset($white_crystalline_substance); print("Warning, the most abused and addictive substances are:"); while(list($k, $v) = each($white_crystalline_substance)) { print $v) ; }

Megjegyzend, hogy nem szksges a tmbelemek ltrehozsakor indexrtket megadni, a PHP az res szgletes zrjelet ltva automatikusan a kvetkez res indexszmot hasznlja fel. A tmbk tovbbi rszleteit a 3. fejezetben tallod. Az adott pldban a while() hromszor fut t a kdon, minden egyes elemnl egyszer, s amikor az each() hamis eredmnyt ad, akkor ll meg: Warning, the most abused and addictive substances are:C12H22O11 C8H10N4O2.H20 NaCl

for