A PHP nyelv

Embed Size (px)

Citation preview

A PHP nyelv

Ksztette: Rvsz Gyrgy informatikatanri szakTmavezet: Ills Zoltn ELTE Informatikai Kar Szakmdszertani Csoport

Pcs, 2004. december 22.

2

Tartalomjegyzk1 BEVEZETS......................................................................................................................................................6 1.1 A PHP TRTNETE....................................................................................................................................6 1.2 A PHP ELNYEI........................................................................................................................................7 1.3 A PHP TELEPTSE....................................................................................................................................7 1.4 ELFELTTELEK .........................................................................................................................................9 1.5 LEMEZMELLKLET......................................................................................................................................9 2 ISMERKEDS A PHP-VEL..........................................................................................................................10 2.1 A PHP KD RSA...................................................................................................................................12 2.2 MEGJEGYZSEK A PHP KDBAN................................................................................................................13 3 ADATOK..........................................................................................................................................................15 3.1 VLTOZK..............................................................................................................................................15 3.2 KONSTANSOK...........................................................................................................................................15 3.3 TPUSOK.................................................................................................................................................15 3.3.1 A vltoz tpusnak vizsglata s mdostsa...............................................................................16 3.4 MVELETEK ADATOKKAL..........................................................................................................................16 3.4.1 Kifejezsek....................................................................................................................................17 3.4.2 Opertorok...................................................................................................................................17 3.4.3 Mveleti sorrend...........................................................................................................................19 4 VEZRLSI SZERKEZETEK.....................................................................................................................20 4.1 AZ ELGAZS..........................................................................................................................................20 4.1.1 Az egyg s a ktg elgazs....................................................................................................20 4.1.2 A tbbg elgazs.......................................................................................................................21 4.1.3 A ?: opertor................................................................................................................................23 4.2 A CIKLUS................................................................................................................................................23 4.2.1 A while ciklus...............................................................................................................................23 4.2.2 A do ciklus....................................................................................................................................24 4.2.3 A for ciklus...................................................................................................................................24 4.2.4 A break utasts............................................................................................................................25 4.2.5 A continue utasts.......................................................................................................................26 5 FGGVNYEK...............................................................................................................................................27 5.1 FGGVNYEK LTREHOZSA, AZ RTK SZERINTI PARAMTERTADS...............................................................27 5.2 RTKEK VISSZAADSA.............................................................................................................................28 5.3 CM SZERINTI PARAMTERTADS...............................................................................................................28 5.4 VLTOZ SZM PARAMTEREK.................................................................................................................29 5.5 ELHAGYHAT PARAMTER.........................................................................................................................29 5.6 HATKR................................................................................................................................................30 5.7 STATIKUS VLTOZK.................................................................................................................................31 5.8 MATEMATIKAI FGGVNYEK......................................................................................................................31 5.9 DTUM- S IDFGGVNYEK......................................................................................................................32 5.10 SZTRINGFGGVNYEK.............................................................................................................................33 6 TMBK S OBJEKTUMOK....................................................................................................................37 6.1 TMBK.................................................................................................................................................37 6.1.1 Tmbk ltrehozsa......................................................................................................................37 6.1.2 Asszociatv tmbk.......................................................................................................................38 6.1.3 Tbbdimenzis tmbk.................................................................................................................38 6.1.4 A tmbmutat...............................................................................................................................39 6.1.5 Tmbk bejrsa..........................................................................................................................39 6.1.6 Mveletek tmbkkel....................................................................................................................41 6.1.7 Tmbk rendezse........................................................................................................................42 6.2 OBJEKTUMOK ...........................................................................................................................................43 6.2.1 Osztlyok s objektumok ltrehozsa............................................................................................44

3

6.2.2 Adattagok (tulajdonsgok)............................................................................................................45 6.2.3 Tagfggvnyek (metdusok).........................................................................................................45 6.2.4 Konstruktor...................................................................................................................................46 6.2.5 rkls.........................................................................................................................................47 6.2.6 Sokalaksg..................................................................................................................................48 6.2.7 Objektumfggvnyek.....................................................................................................................49 7 RLAPOK........................................................................................................................................................52 7.1 GLOBLIS S KRNYEZETI VLTOZK..........................................................................................................52 7.2 RLAP LTREHOZSA................................................................................................................................53 7.3 RLAPELEMEK HASZNLATA......................................................................................................................55 7.4 RLAP S PHP KD EGY OLDALON............................................................................................................58 8 FJLOK S KNYVTRAK.......................................................................................................................60 8.1 KNYVTRAK..........................................................................................................................................60 8.1.1 Knyvtrak listzsa....................................................................................................................60 8.1.2 Egyb knyvtrfggvnyek...........................................................................................................61 8.2 FJLOK...................................................................................................................................................61 8.2.1 Fjlok begyazsa........................................................................................................................61 8.2.2 Fjlok listzsa attribtumokkal egytt........................................................................................61 8.2.3 Fjlok ltrehozsa s trlse........................................................................................................62 8.2.4 Fjlok olvassa.............................................................................................................................62 8.2.5 Fjlok rsa..................................................................................................................................63 8.2.6 Fjlok feltltse............................................................................................................................64 9 ADATBZISOK: MYSQL.............................................................................................................................66 9.1 MYSQL ADATTPUSOK.............................................................................................................................66 9.2 KAPCSOLDS A KISZOLGLHOZ...............................................................................................................67 9.3 ADATBZISOK KIVLASZTSA, LISTZSA....................................................................................................67 9.4 ADATBZISOK TBLINAK LISTZSA..........................................................................................................68 9.5 TBLK MEZINEK LISTZSA....................................................................................................................69 9.6 TBLK ADATAINAK MEGJELENTSE...........................................................................................................69 9.7 ADATBZIS LTREHOZSA S TRLSE.........................................................................................................70 9.8 TBLA LTREHOZSA S TRLSE...............................................................................................................70 9.9 ADATOK BESZRSA.................................................................................................................................71 9.10 ADATOK LEKRDEZSE............................................................................................................................71 9.11 ADATOK FRISSTSE................................................................................................................................72 9.12 ADATOK TRLSE...................................................................................................................................73 9.13 PLDA: A HREK MODUL..........................................................................................................................73 10 KPEK............................................................................................................................................................77 10.1 KPEK LISTZSA...................................................................................................................................77 10.2 KPEK LTREHOZSA..............................................................................................................................78 10.3 KPEK VLTOZTATSA............................................................................................................................80 11 SESSION-K.................................................................................................................................................83 11.1 PHP-SZOLGLTATSOK..........................................................................................................................83 11.2 SESSION-FGGVNYEK.............................................................................................................................84 11.3 SESSION INDTSA..................................................................................................................................85 11.4 VLTOZK REGISZTRLSA......................................................................................................................85 11.5 A REGISZTRLT VLTOZK S A SESSION MEGSZNTETSE............................................................................86 11.6 SESSION-FGGVNYEK HASZNLATA..........................................................................................................86 11.7 PLDA: A FRUM MODUL.........................................................................................................................87 12 BIZTONSG..................................................................................................................................................95 12.1 CGI FUTTATHAT LLOMNYKNT TELEPTETT PHP..................................................................................95 12.2 APACHE MODULKNT TELEPTETT PHP......................................................................................................96 12.3 FJLRENDSZER.......................................................................................................................................97 12.4 ADATBZIS...........................................................................................................................................97 12.5 FELHASZNLTL RKEZ ADATOK...........................................................................................................98

4

12.6 HIBAKEZELS.........................................................................................................................................99 12.7 GLOBLISAN ELRHET VLTOZK............................................................................................................99 12.8 A PHP ELREJTSE...............................................................................................................................100 12.9 FRISSTSEK.........................................................................................................................................100 IRODALOMJEGYZK.................................................................................................................................101

5

1 BevezetsA Vilghl kezdetben nem volt tbb egyszer adatnl, a HTML (HyperText Markup Language) els vltozata mg azt sem tette lehetv, hogy kpeket helyezznk el weboldalunkon. Mra azonban hatalmas vltozsokon ment keresztl, rengeteg szolgltatst tartalmaz: kpeket, hangokat, mozgkpeket, s mindezek mellett szrakoztat, tant s kapcsolatot tart. A Web fejldsvel prhuzamosan fejldtek az eszkzk is, az egyszer lernyelvhez valdi programozsi nyelvek csatlakoztak. A statikus weboldalak igen fontos szerepet tltttek be a WWW szolgltatsaiban az Internet hskorban. Ma azonban nagyon sok olyan feladat ltezik, melyeket nem lehet, vagy nem clszer statikus oldallal megoldani. A cgek adataikat tbbnyire adatbzisokban troljk. Ezekbl az adatbzisokbl le lehet ugyan kpezni az adatokat klnbz eljrsokkal statikus oldalakra, azonban ez tbb olyan problmt is felvet, mely az informci kzzttelnek ezen mdjt kizrja a lehetsges megoldsok kzl. Vannak olyan feladatok, melyek ugyancsak szksgess teszik a szerver-oldali programfuttatst, ilyen lehet pldul egy egyszer letlts-szmll az adott oldalon, de lehet pldul egy Internetes portl friss hrek rovata, mely igen gyakran frissl. A dinamikus weboldal egyik vltozata, mely kliens-oldali programok (client-side scripts) segtsgvel kommunikl a felhasznlval. Ma a feladatok igen szles skljt tudjuk a kliens oldalon elvgezni, kezdve a legegyszerbb krdv adatainak ellenrzstl, a kln csatornn lebonyoltott titkostott banki tranzakci kezelsig. A legelterjedtebb kliens-oldali szkript nyelvek a JavaScript s a VBScript. A kliens oldali programozsnak azonban van nhny htultje: a lasssg s a bngszfggsg. A felhasznlk gyors, knnyen tlthat, knnyen kezelhet, stabilan mkd oldalakat szeretnek hasznlni. Nhny ve a hangsly ezrt ismt a szerver-oldali megoldsokra tereldtt. A CGI (Common Gateway Interface) szabvny lehetv teszi ms programok futtatst s a kimenetek szvegbe, hangba vagy videba sszegezve a kliensre juttatst. Szabvnyos felletet biztostva a CGI lehetv teszi a programozk szmra programozsi nyelvek szles spektrumnak hasznlatt. CGI programok dolgozhatjk fel a kliens ltal kitlttt rlapokat, szmllhatjk az oldalt ltogat felhasznlkat, adatokat kezelhetnek adatbzisokban s tbb szz egyb feladatot oldhatnak meg. A szerver-oldali programozshoz sorolhat: a Perl (Practical Extraction and Report Language), a Python, a PHP, az ASP (Active Server Pages), a JSP (Java Server Pages).

1.1 A PHP trtneteA PHP els vltozatt - mely egy makrkszlet volt - Rasmus Lerdorf ksztette 1994ben. Ezeket a segt eszkzket egyttesen a Personal Home Page Tools nvvel illette. Ksbb egy friss elem kerlt a csomagba, a Form Interpreter (rlapfeldolgoz), gy PHP/FI nven vlt ismertebb. A felhasznlk szemszgbl a PHP/FI nagyon hasznos segdeszkz volt, tbb fejleszt is felfigyelt r, gy 1997-re mr szmos programoz dolgozott rajta. Az gy elkszlt PHP3-as mr egy csapat egytt-mkdsbl szletett. A PHP3-as azonban mg elg lass volt ahhoz, hogy mentsgl szolgljon a Perl-hz rt programozknak, mirt nem vltottak. Az 1990-es vek vgn a Web-szerver nyelvek nagy fejldsen mentek t. A Perl-t s az els PHP-t mivel HTML oldalak voltak soronknt rtelmeztk. A fejlesztk ksbb olyan rendszereket vlasztottak, amelyek memriba fordtottak. A nylt forrskd fejlesztseknek ksznheten megjelent PHP4 s a PHP3 kztti risi teljestmnyklnbsg az rtelmezsrl a fordtsra val ttrsnek ksznhet. A PHP4 egy olyan nylt forrskd nyelv az j webfejlesztk szmra, amely folyamatosan vltja fel a Perl-hz hasonl rgebbi nyelveket.

6

Ma a PHP - hivatalosan a PHP: Hypertext Preprocessor elnevezst hasznlja - egy szles krben hasznlt, nylt forrskd, ltalnos cl programozsi nyelv, klnsen j webfejleszts tmogatssal s HTML-be gyazsi kpessgekkel. A szintakszisa a C, Java s Perl nyelvekre pl, knnyen megtanulhat. A nyelv f clja lehetsget teremteni dinamikusan generlt weboldalak gyors ksztsre, de a PHP ennl sokkal tbbre is kpes. A PHP fleg szerver-oldali szkriptek rsra kszlt, azaz brmire kpes, amire ms CGI programok, ilyen funkcik pldul az rlap adatok feldolgozsa, dinamikus tartalom generlsa, vagy stik kldse s fogadsa.

1.2 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 keverknyelveket, mint a Visual Basic vagy az IIS. (MOULDING, 2002, 5. old.) Fejlesztsi sebessg Mivel a PHP lehetsget ad a HTML elemek s a programkdok elklntsre, az alkalmazsok fejlesztsekor lehetsg van elvlasztani a kdolsi, tervezsi, s sszelltsi szakaszt. Ez jelentsen megknnyti a programozk lett azzal, hogy elmozdtja az akadlyokat a hatkony s rugalmas alkalmazsok kialaktsnak tjbl. Nylt forrskd A PHP mint nylt forrskd termk j tmogatssal rendelkezik, radsul a PHP az elterjedtebb opercis rendszerek brmelyikn kpes futni, a legtbb kiszolglprogrammal egyttmkdve. Felvehetjk a kapcsolatot a knnyen elrhet s elktelezett felhasznli kzssggel, ahol szmos nagy tapasztalattal rendelkez embert tallunk. Nagy az esly r, hogy brmilyen problmval is kerljnk szembe, kis keresgls utn vlaszt kapunk r, ha mgsem, egy levelezlistra kldtt zenetre ltalban hamar rkezik a megfelel vlasz. A feldolgozprogram hibinak javtsa nem sokkal felfedezsk utn megtrtnik, s a felmerlt j ignyeket kielgt szolgltatsok is hamar beplnek a nyelvbe. Nem kell vrni a kvetkez hivatalos kiadsra, hogy a fejlesztsek elnyeit lvezzk. Nincs a PHP mkdtetshez egyedileg kivlasztott kiszolgl vagy opercis rendszer. Szabadon vlaszthatunk olyan rendszert, amely kielgti sajt vagy gyfeleink ignyeit, kdunk tovbbra is futtathat lesz, brmi mellett is dntnk. Teljestmny A hatkony Zend Engine-nek (a Zend Engine a PHP modulok mgtt tallhat, a programokat futtat mag elnevezse) ksznheten a PHP4-es a mrsek szerint messze maga mgtt hagyja legtbb versenytrst. Hordozhatsg A PHP-t alapveten gy terveztk, hogy alkalmas legyen szmos opercis rendszeren val hasznlatra, egyttmkdve klnbz kiszolglkkal s adatbzis-kezelkkel. Fejleszthetnk UNIX rendszerre s ttrhetnk NT alapokra minden problma nlkl. A PHP alkalmazsokat kiprblhatjuk Personal Web Serverrel, s ksbb telepthetjk azokat egy UNIX rendszerre, ahol a PHP-t Apache modulknt hasznljuk.

1.3 A PHP teleptseA PHP nem mkdik 16 bites krnyezetben, mint pldul a Windows 3.1, s a PHPhez Web-szerver szksges. Ha nincs Web-szerver teleptve szmtgpnkn, akkor 7

elszr el kell dntennk, hogy milyen szervert fogunk telepteni, vagy van egy egyszer lehetsg: az AppServ teleptse, amely a PHP mellett minden szksges programot tartalmaz. Ez az ingyenes programcsomag Windows s UNIX rendszereken is telepthet, letlthet a http://www.appservnetwork.com cmrl. Jelenlegi verziszma a 2.5.1, s a kvetkez modulokat tartalmazza: Apache Web Server 1.3.31 PHP Script Language 5.0.1 MySQL Database 4.0.20 Zend Optimizer 2.5.3 phpMyAdmin Database Manager 2.6.0-rc1 Perl 5.8.4

Gyakorlatilag minden szksges modult tartalmaz, az Apache-rl pedig sokan gy vlekednek, hogy a legjobb Web-szerver. Ha mgsem az AppServ mellett dntennk, akkor rdemes az albbi Web-szerverek kzl vlasztani: Personal Web Server (friss verzi javasolt) Apache 1.3.x Internet Information Server 5 Omni HTTPd 2.0b1 vagy jabb Oreilly Website Pro Xitami Netscape Enterprise Server, iPlanet

Elszr a vlasztott szervert kell telepteni, s ellenrizni, hogy jl mkdik-e. Szmos adatbzis - Adabas D, InterBase, Solid, dBASE, mSQL, Sybase, Empress, Microsoft SQL, MySQL, Velocis, FilePro, Oracle, UNIX dbm, Informix s PostgreSQL kzvetlenl csatlakoztathat a PHP-hez (mi a MySQL-lel fogunk dolgozni). A MySQL adatbzisrendszer a http://www.mysql.com cmrl tlthet le. Szmos opercis rendszerre elrhet, belertve a UNIX, Windows s OS/2 rendszereket. A MySQL magyar tkrkiszolglja a http://mysql.sote.hu. A PHP teleptprogram ingyenesen letlthet a http://www.php.net cmrl. Magyarorszgon a http://hu.php.net tkrkiszolglt rdemes ltogatni. A PHP webhelye kivl informciforrs PHP programozknak. A http://www.php.net/manual cmen a teljes kziknyv elolvashat, kiegsztve ms programozk ltal rt hasznos megjegyzsekkel. Ezen a cmen olvashat a magyar PHP kziknyv is. A PHP honlaprl a dokumentci is letlthet klnbz formtumokban. A Zend Engine s ms Zend termkek honlapja a http://www.zend.com. Itt hreket, illetve cikkeket olvashatunk a PHP s a Zend vilgbl. Az InstallShield teleptprogrammal nagyon knny letre kelteni a PHP-t, de ez nagyon sok szempontbl korltozott vltozat, pldul a kiterjesztsek automatikus teleptst nem vgzi el. Telept futtatsa utn ktfle telepts kzl lehet vlasztani - a standard telepts jl hasznlhat alapbelltsokat ad, az advanced krdseket tesz fel. A telepts varzslja elg informcit gyjt ahhoz, hogy elvgezhesse a php.ini fjl belltst, s konfigurlja a szervert a PHP szmra. IIS esetn, vagy NT Workstation alatt PWS hasznlatakor az

8

sszes ponton fellelhet script map belltst megmutatja, s kivlaszthat, hogy mely pontokra kerljn be a PHP tmogats. Lehetsg van a PHP-t az eredeti forrsbl fordtani Windows rendszerben is, ha van Microsoft Visual Studio teleptve a szmtgpen. Ha brhol elakadnnk a teleptsben, vagy tovbbi informcikra lenne szksgnk, akkor ltogassunk el a kvetkez cmre: http://php.benscom.com.

1.4 ElfelttelekEz a munka az alapoktl indulva prblja bemutatni a PHP4-es programozsi nyelv azon elemeit, melyek nlklzhetetlenek egy dinamikus weblap ksztsekor. A megrtshez szksges programozsi ismeretek az alapfogalmakon nem mutatnak tl, de ha a C vagy a Perl nyelvekkel mr dolgoztunk korbban, egyes fejezeteknl knnyebben, gyorsabban haladhatunk. A kilencedik fejezet a PHP s a MySQL kapcsolatval foglalkozik, m az adatbziskezels alapjait nem tartalmazza, gy annak megrtse elismeretek nlkl nehzkes. A PHP webes programozsi nyelv, ezrt alapvet ismerettel rendelkezni kell a Vilghlval s a HTML-lel kapcsolatban is.

1.5 LemezmellkletEhhez a munkhoz tartozik egy lemezmellklet, melyen megtallhat az sszes bemutatott PHP-program fejezetenknt kln knyvtrakban. A CD-n tovbb megtallhat a PHP, az Apache, a MySQL, s az AppServ jelenleg legfrissebb vltozata, valamint a teljes PHP dokumentci klnbz formtumokban.

9

2 Ismerkeds a PHP-velA PHP egy szerver-oldali szkript nyelv. A vlaszlap formtumt ler utastsok egy HTML dokumentumba gyazva helyezkednek el. A Web-szerver a meghvott dokumentum URL-jbl ismeri fel, hogy a krst a PHP szervernek kell feldolgoznia. A minta dokumentum HTML utastsai vltoztats nlkl tkerlnek a vlaszlapra, a PHP specifikus elemeket a PHP vgrehajtja, s a generlt vlasz kerl be az eredmnylapra. Ugyan a PHP ler nyelve nem adatbzis orientlt, hanem a C ltalnos programozsi nyelvre pl, mgis tartalmaz adatbzis kapcsoldsi kiegszt modult, amely lehetv teszi, hogy elrhessk, s a vlaszlapon megjelenthessk a legklnbzbb adatbzisokban trolt adatokat is. A PHP rendszer mkdsi struktrja az albbi elemekbl pl fel: Web-szerver PHP-szerver Minta dokumentum Web-szerver Browser A fenti struktra alapjn a PHP krsek feldolgozsa az albbi lpsekben fut le: 1. Az olvasott lapon kiadnak egy hiperlink kapcsoldst egy olyan URL-re, mely URL mgtt PHP hvs rejlik. Egy ilyen cm lehet pldul a kvetkez: AdatbzisPHP-szerver szerver http://babits.pte.hu/php/index.php illetve a hivatkozst ms esetekben ahttp://babits.pte.hu/index.php

formban is megadhatjuk. A hivatkozsokban az URL els rsze jelli ki, hogy mely gpen tallhat a Webszerver s a PHP szerver. Az els mintban a /php/ rsz egy virtulis knyvtr, mely jelzi a Web-szervernek, hogy itt egy PHP dokumentumot kell kezelni, s meg kell majd hvni a PHP szervert. A virtulis tvonal kijellsnek menete Web-szerver specifikus, rendszerint a Web-szerver konfigurcis llomnyt kell mdostani a virtulis tvonal kijellshez. A msodik mintban a nem kellett virtulis knyvtr ahhoz, hogy a Web-szerver tudja, hogy a PHP szervert kel meghvnia. Ebben az esetben ugyanis a dokumentum kiterjesztse utal arra, hogy a dokumentumot a PHP fogja kezelni. A kiterjesztsek s a kezel programok sszerendelse is a Web-szerver konfigurcis llomnyban trtnik. Az URL utols tagja, pldnkban az index.php rsz a sma dokumentumot jelli ki, mely megadja a vlaszlap ellltsnak mdjt. 2. A Web-szerver rzkeli, hogy a meghvott URL a PHP szerverhez kapcsoldik, ezrt meghvja a PHP modult vgrehajtsra. A PHP szerver ktfle mdban is mkdhet: CGI s API mdban. Az els lehetsg esetn minden oldal lekrsekor s feldolgozsakor egy j pldny fut le a PHP feldolgozbl. Mivel a szkript futtatsa utn egy ilyen pldny lell, minden erforrs, amit lefoglalt, megsznik. A npszerbb a msodik forma, amikor a PHP-t modulknt futtatjuk egy tbb processes Web-szerveren. Egy tbb process-es Web-szerver tipikusan rendelkezik egy szl process-el, ami koordinlja a tbbi kapcsold process (a gyermekek) munkjt,

10

amik valjban a weboldalak kiszolglst vgzik. Ha egy krs rkezik egy klienstl, egy ppen szabad gyermekprocess kapja meg a kiszolglsra az utastst. 3. A PHP modul megkapja a vgrehajtsi feladatot a feldolgozand sma dokumentum azonostjval egytt, tolvassa s elemzi a sma dokumentumot. A PHP specifikus utastsokat rtelmezi s vgrehajtja. 4. Ha adatbzis hozzfrsi ignyek is felmerltek a PHP specifikus utastsok kztt, akkor a PHP szerver kapcsolatba lp az adatbzis-kezelvel, s vgrehajtja a kijellt mveletsort. A PHP specifikus utastsok kztt megtallhatok azon elemek is melyekkel lerhat, hogyan jelenjenek meg az eredmnyadatok a vlaszdokumentumban. 5. A generlt vlaszlap a HTML utastsok s a dinamikus elemekbl felplve, tkerl a Web-szerverre, majd onnan eljut az t ignyl bngszhz. A PHP szerver is egy tbbrteg, tbb komponensbl ll rendszer. A rendszer elvi felptsi vzt mutatja be a kvetkez bra:

Web-szerver

SAPI PHP Core PHP szerver Zend Core Extension API Extension (pl. MySQL)

Sma lers

Az SAPI (Szerver Absztrakcis Rteg) a klnbz Web-szerverekhez trtn kapcsoldst oldja meg egy egysges felletet kpezve a felette elhelyezked rtegek szmra. Jelenleg tmogatott felletek: Apache, Roxen, Java (servlet), ISAPI, AOLserver s CGI. A Zend Core modul nyelvi parser szerepet tlt be a rendszerben. Az egyes kiterjesztsek (extension) teszik lehetv a klnbz adatbzis forrsok elrst.

11

2.1 A PHP kd rsaA PHP specifikus utastsok a HTML utastsok kz beillesztve, begyazva foglalnak helyet. A HTML utastsoktl val egyrtelm s knnyen kezelhet sztvlaszts rdekben az egyes PHP specifikus utastsokat keretbe foglaljuk. Az elhatrols az albbi vltozatok valamelyikvel lehetsges: PHP elemek - hagyomnyos - szkript stlus - rvid - ASP stlus

A fenti kezd- ill. zrelemek kzl az utols kett hasznlatt a php.ini fjlban engedlyezni kell a short_open_tag=on ill. a asp_tags=on belltsokkal. ppen emiatt clszer az elst vagy a msodikat hasznlni. A PHP elemek a C nyelvi kifejezsekhez hasonl formtumot ltenek. Egy tagolt rsz tbb elemi PHP kifejezst, utastst is tartalmazhat. Ekkor az egyes PHP utastsokat pontosvesszvel hatroljuk el egymstl: A fenti pldbl is lthat, hogy a tagolsi rsz s a PHP elemi utasts is tbb forrssoron keresztl is folytatdhat, a sorvgjel nem jelent utasts hatrt. Mivel a HTML fjlok egyszer szveges fjlok, brmilyen szvegszerkeszt segtsgvel rhatjuk a PHP kdokat is. A HTML-szerkesztk ltalban viszont nyjtanak valamilyen klnleges tmogatst PHP-szerkesztshez is, ilyenek pldul a kdsznezs, a kifejezsszerkeszt vagy a tesztel. Nzznk is rgtn egy PHP kdot!01:

Az vek sorn hagyomnny vlt, hogy a programozsi nyelvek megismerst e program bemutatsval kezdik. A sorok elejn tallhat szmozs s a kettspont nem a kd rsze, ezek csak a kdhoz tartoz magyarzatok megknnytse miatt kerltek oda. Ez a kd nem tartalmaz HTML tag-eket, mgis mkdkpes. Gpeljk be a kdot s mentsk el a fjlt hello.php nven! Most mr csak annyi dolgunk van, hogy a szerveren elhelyezzk a fjlt. Ha otthoni szmtgpnkn dolgozunk, akkor meg kell keresni azt a knyvtrat, ami a localhost-hoz tartozik, s oda be kell msolni (az AppServ esetben ez a www nev knyvtr), egybknt pedig FTP segtsgvel fel kell tltennk egy msik szmtgpre. Ha minden rendben ment, akkor elrhetjk fjlunkat egy bngsz segtsgvel, s a kvetkez eredmnyt kapjuk:

12

Ha a PHP-t nem sikerlt telepteni a kiszolglra vagy nem a megfelel kiterjesztst hasznltuk, felteheten nem az elz brn lthat kimenetet kapjuk. Ebben az esetben ltalban a PHP program forrskdjt ltjuk viszont. Elemezzk ki a kdot! Az els s a harmadik sorban tallhat nyit- ill. zrelemeken kvl egyetlen egy j dolgot tallunk. A print() parancs kirja a bngszbe a neki tadott adatokat. Az adat jelen esetben egy szveg (a szveget vagy ms nven a karakterlncot mindig egyes vagy ketts idzjelek kz kell tenni), mely az utasts vgrehajtsakor a bngszbe kirdik. A print() igazsg szerint egy fggvny. A fggvnyek olyan parancsok, amelyek valamilyen mveletet vgeznek ltalban a nekik tadott adatokkal. A fggvnyeknek tadott adatokat majdnem mindig zrjelek kz kell tennnk a fggvny neve utn. Ebbl a szempontbl a print() kivteles, mert a zrjelprja elhagyhat. A print() helyett hasznlhat az echo() fggvny is, melyek segtsgvel a HTML tag-eket is kirathatjuk, pldul a print("
"); egyenrtk a
tag HTML kdbeli elhelyezsvel. Fggvnyekrl rszletesen az tdik fejezetben lesz sz. Ksztsk el az elbbi kd HTML tag-eket tartalmaz vltozatt!01: 02: 03: 04: 05: 06: 07: 08: 09: 10: Hello

Egy dokumentumban a HTML elemek kz tetszleges szm PHP kdblokk rhat, s ezek egyttesen alkotnak egy programot. Brmi, amit egy megelz blokkban hatroztunk meg (vltozk, fggvnyek vagy osztlyok), a dokumentumon bell elrhet lesz a ksbbi blokkokban is. PHP blokk nem csak a s tag-ek kztt helyezhet el (br ebben a munkban mindig a dokumentum trzsrszben lesz a kd), hanem hasznlhatjuk a PHP-t pldul dinamikus oldalcm generlsra is, ha a s tag-ek kz helyezzk el a kdot. A kvetkezkben a HTML tag-eket csak a fontos helyeken hagyjuk meg a kd rvidthetsge rdekben.

2.2 Megjegyzsek a PHP kdbanA PHP utastsok kz elhelyezhet megjegyzseknek is tbbfle szintaktikja van:

13

// szoveg : ekkor a megjegyzs kezdettl az aktulis sor vgig terjed rsz lesz a megjegyzs rsz, a kzrefogott szveg nem kerl rtelmezsre a PHP szerver ltal. # szoveg : ugyanolyan rtelmezs, mint az elz formtum. /* szoveg */ : ekkor tbb sorra is kiterjedhet a megjegyzs rsz. A ksbbiekben rendszeresen megjegyzsek tallhatk majd a pldaprogramokban magyarzat cljbl.

14

3 AdatokAz adat a program alapvet alkoteleme. A PHP-ben az adatokat definilhatjuk szvegknt (karakterlnc vagy sztring), egszknt, lebegpontos szmknt, logikai rtkknt, s a tpusok sszetett keverkeknt.

3.1 Vltozk$a="alma";

A $a egy vltoz, mely az alma szveget tartalmazza, rtkt brmikor megvltoztathatjuk. A konstansok rtkt s a vltozk rtelmezsi tartomnyt viszont nem lehet megvltoztatni. A vltozkra a kvetkez felttelek teljeslnek: - A vltozk azonostja mindig a $ (dollr) jellel kezddik, az azonost pedig betket, szmokat, s az _ jelet tartalmazhatja, kiktve, hogy szmmal nem kezddhet. - A felvett rtk szabja meg a vltoz tpust. A vltozk meghatrozott tpusak lehetnek, pldul egsz vagy sztring, a PHP azonban szksg esetn tkonvertlja a vltozt ms tpusv.$s="0";

A $s, amely a 0 (nulla) szveget (karaktert) tartalmazza, automatikusan tkonvertlhat ress vagy hamiss. A vltozk nagysga/hosszsga korltozott, de a sztringek majdnem korltlan hosszak lehetnek (csak a memria korltoz). A hinyz vltozkat a PHP automatikusan ltrehozza:$szam=4; print($szma);

Az elgpelsnek nem hibazenet az eredmnye. A PHP ugyanis ltrehozza a $szma vltozt, a print() fggvny pedig egy res vagy tartalom nlkli vltozt kap, aminek hatsra a bngszben nem jelenik meg semmi. Az isset() fggvny ellenrzi, hogy a vltoz ltezik -e, s logikai rtket szolgltat vissza, mg az unset() fggvny eltvoltja a vltozt. A ksbbi fejezetekben lthatunk majd pldt e kt fggvny hasznlatra.

3.2 Konstansokdefine("a","alma");

A define parancs az els paramterknt megadott nvvel ltrehozza a konstanst, s a msodik paramterknt megadott rtket rendeli hozz. A define parancs brhol hasznlhat, a definilt konstansok pedig globlis hatkrek, azaz mindenhol, gy a fggvnyek belsejben is elrhetk.

3.3 TpusokAz elbbiekben mr eset sz arrl, hogy milyen tpusok lteznek a PHP-ben. Most ezek rszletesebb lersa kvetkezik:

15

Tpus integer double string boolean array object

Lers egsz szm lebegpontos szm (vals szm) szveg vagy karakterlnc logikai (rtke igaz/true vagy hamis/false) tmb objektum

Plda12 9.967 "Hello" true

hatodik fejezet hatodik fejezet

3.3.1 A vltoz tpusnak vizsglata s mdostsaA vltoz tpusnak meghatrozsra a PHP gettype() fggvnyt hasznlhatjuk. Ha a fggvnyhvs zrjelei kz vltozt tesznk, a gettype() egy karakterlnccal tr vissza, amely a vltoz tpust adja meg. A vltoz tpusnak mdostsra a PHP a settype() fggvnyt biztostja. A settype()-ot gy kell hasznlnunk, hogy a megvltoztatand tpus vltozt, valamint a vltoz j tpust a zrjelek kz kell tennnk, vesszvel elvlasztva.01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17:

Azok, akik mr hasznltk a C programozsi nyelvet, nyugodtan alkalmazhatjk e nyelvben megismert tpustalaktst:$proba=(string)$proba;

Ez a sor egyenrtk a settype($proba,"string"); sorral. Fggvnyek formjban lteznek olyan tpuslekrdez parancsok, melyek paramterknt megadva a vltoz nevt, logikai rtkkel trnek vissza, ilyenek pldul: is_array(), is_bool(), is_double(), is_numeric(), is_string(), is_object().

3.4 Mveletek adatokkalA PHP rengeteg kifejezst, opertort, fggvnyt, osztlyt knl, tovbb tbbfle lehetsget nyjt az adatok kezelsre mind az adatbzisok, mind pedig a HTML fel.

16

3.4.1 KifejezsekA PHP-ben minden kifejezs. A $kor=29; utasts hrom kifejezst tartalmaz. Egyszer a $kor vltozt, a 29-et, s magt az egsz utastst. A kifejezs a fggvnyek, rtkek s opertorok (mveletjelek) olyan egyttese, amely rtket hatroz meg. ltalnossgban azt mondhatjuk, hogy ha rtkknt hasznlhatunk valamit, akkor az kifejezs.

3.4.2 OpertorokAz opertor (mveletjel) jel vagy jelsorozat, amelyet ha rtkek sszekapcsolsra hasznlunk, valamilyen mveletet vgezhetnk, amely ltalban j rtket eredmnyez. Az operandus egy rtk, amelyet a mveletjellel kapcsolatban hasznlunk. Egy mveletjelhez ltalban kt operandus tartozik. (ZANDSTRA, 2000, 47. old.) Hozzrendel opertor: = A $kor=29; utasts a baloldali vltozhoz a jobb oldal rtkt rendeli. Egy utastsban tbb hozzrendel opertort is hasznlhatunk: $szam=$kor=29; sszehasonlt opertorok: == != === !== < > = Az sszehasonlt opertorok kt rtket hasonltanak ssze, s hibkhoz vezethetnek a PHP automatikus tpuskonverzija miatt. A hamis logikai rtk s a 0 megklnbztetsre alkalmasak a === vagy a !== opertorok, ugyanis a == ezen rtkeknl nem a vrt eredmnyt adja. Opertor == != === !=== < > = Jelents egyenl rtk nem egyenl rtk egyenl rtk s egyez tpus nem egyenl rtk vagy nem egyez tpus kisebb nagyobb kisebb vagy egyenl nagyobb vagy egyenl Igaz4==4 3!=4 0===0 0!==false 34 4=3

Hamis3==4 4!=4 0===false 0!==0 67 5=8

Aritmetikai opertorok: + - * / % A + sszeadshoz, a - kivonshoz, a * szorzshoz, a / osztshoz hasznlhat, a % pedig az oszts maradkt adja. A maradkos osztst kt lebegpontos szmmal is elvgzi gy, hogy elhagyja a tizedesjegyeket. A maradkos oszts eredmnye mindig egsz. Az aritmetikai mveleteket az opercis rendszer a szmtgp hardvervel vgezteti el, gy ezek pontossga egyrszt a hardvertl fgg, msrszt attl, hogy az opercis rendszer hogyan kezeli a hardvertl kapott eredmnyt. Sztringopertorok: . .= Kt sztring sszefzshez hasznlhat a . opertor, mg egy sztring vghez egy msikat a .= opertorral lehet csatolni.$szin="piros"." "."kk"; $szin.=" lila"; //$szin="piros kk" //$szin="piros kk lila"

17

Nvel/cskkent opertorok: ++ -A ++ s -- opertorok egyarnt rhatk vltozk el s mg. A klnbsg az, hogy ha pldul a $szam vltoz rtke 7, s kiadjuk a print(++$szam); parancsot, akkor a $szam vltoz elbb felveszi a 8 rtket, majd ez megjelenik a bngszben, ha pedig a print($szam++); parancsot adjuk ki, akkor elbb kirdik a 7, s utna nveldik meg a vltoz tartalma eggyel. Ez teljesen hasonlan mkdik a -- opertor esetben, csak a vltoz tartalma eggyel cskkeni fog. Egyb hozzrendel opertorok: += -= *= /= %= Ezek szintn az egyszerbb lerst segtik. Pldul a $szam+=4 utasts egyenrtk a $szam=$szam+4 utastssal, a $szam*=4 utasts pedig a $szam=$szam*4 utastssal. Logikai opertorok: ! && || and xor or A logikai opertorok logikai rtkeken vgeznek mveleteket. A kvetkez tblzat a lehetsges logikai mveleteket mutatja be. Opertor Nv Igaz, ha a bal vagy a jobb operandus igaz a bal vagy a jobb operandus igaz vagy a bal, vagy a jobb operandus igaz, de csak az egyikk a bal s a jobb operandus is igaz a bal s a jobb operandus is igaz az egyetlen operandus hamis Plda Eredmn ytrue true

|| or

vagy vagy kizr vagy s s tagads

true || false true or false

xor

true xor true

false

&& and !

true && false true and false !true

false false false

Arra a krdsre, hogy mirt van ktfle vagy s s logikai mvelet, a mveletek sorrendje adja meg a vlaszt. Binris opertorok: & | ^ ~ > A szmtgpben minden binrisan van trolva, azaz minden egy klnbz hosszsg binris sztring. Ezek kezelsre alkalmasak a binris opertorok. Ha van egy 1-es s egy 2-es szmunk, akkor a nekik megfelel binris alakok a 01 s az 10 (napjainkban 32 biten szoktak trolni, gy pldul az 1-es 31 db 0 utn egy 1-es). A bitenknti s (&) eredmnyben azokon a helyeken lesz 1-es, ahol mindkt operandusban 1-es volt. gy az 1-es s a 2-es bitenknti s-e 0. A bitenknti vagy (|) eredmnyben azokon a helyeken lesz 1-es, ahol legalbb az egyik operandusban 1-es volt, azaz az 1-es s 2-es esetben az eredmny a binris 11 lesz, ami 3at r. A bitenknti xor (^) eredmnyben azokon a helyeken lesz 1-es, ahol a kt operandus kzl az egyikben s csakis az egyikben 1-es volt. Az 1 ^ 2 szintn a 3-at adja. 18

A bitenknti tagads (~) az sszes bitet invertlja, azaz ahol 1-es volt, ott 0 lesz, s fordtva. Mr csak kt opertor maradt htra: a jobbra tols (>>) s a balra tols (=1; utasts hatsra a $szam rtke 1 lesz (a binris 11-et 1-gyel jobbra tolva a binris 01-et kapjuk). Ha pedig a $szam= == != === !== & ^ | && || ?: = += -= *= /= .= %= &= |= ^= ~= = print and xor or ,

19

4 Vezrlsi szerkezetekAz idig bemutatott kdokban az utastsok mindig sorban egyms utn vgrehajtdtak, s a program mindig ugyanazt az eredmnyt adta. Ez a szekvencilis vgrehajts nem biztost tl nagy teret a rugalmassgnak. A bonyolultabb programokban lehetsg van felttelek kirtkelsre, s a program ennek megfelelen vltoztatja viselkedst.

4.1 Az elgazsAz elgazs teszi lehetv, hogy a programunk egy adott ponton egy kifejezs logikai rtknek megfelelen haladjon tovbb. Az elgazsoknak ltalban hrom tpusa szokott megjelenni a programozsi nyelvekben: az egyg (egyirny), a ktg (ktirny), s a tbbg (tbbirny).

4.1.1 Az egyg s a ktg elgazsif (kifejezs) { utasts; } Ha a kifejezs logikai rtke igaz, akkor a zrjelprok ltal meghatrozott blokk vgrehajtdik. A kt zrjel elhagyhat, ha a blokk egyetlen utastsbl l. Az elhagys azonban sokszor rontja az tlthatsgot, valamint ha ksbb ms utastst is felvesznk a blokkba, esetleg megfeledkezhetnk a zrjelekrl.01: 02: 03: 04: 05: 06: 07: 08:

A fenti kdban a $szam vltoz tartalmt vizsgljuk. Ha a vltoz tartalma 2, akkor az if utni blokkban tallhat utasts vgrehajtdik, egybknt nem tesz semmit a program. Jelen esetben a bngszben megjelenik A szm rtke 2 szveg. Fontos megjegyezni, br mr volt rla sz, hogy a kifejezs vizsglatakor a dupla = jelet hasznljuk a szimpla helyett. Ezek sszekeverse slyos hiba! Ha azt rtuk volna, hogy if ($szam=2), akkor ez mindig az igaz logikai rtket szolgltatja, ugyanis ilyenkor a $szam vltoznak rtkl adjuk a 2-t (mivel ez mindig sikeres, igaz logikai rtket adunk az if szmra). A ktg elgazs lehetsget ad arra, hogy a kifejezs hamis logikai rtke esetn is utastsokat hajtsunk vgre. if (kifejezs) { utasts; } else {

20

utasts; } Ilyenkor a kt blokk kzl valamelyik fog vgrehajtdni. A kvetkez pldaprogramban egy szm reciprokt szeretnnk ellltani majd megjelenteni, de figyelembe kell vennnk, hogy a nullnak nincs reciproka.01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14:

4.1.2 A tbbg elgazsTbbg elgazst ltrehozhatunk az elbbi ktg elgazsok egymsba gyazsval, vagy az elseif kulcssz hasznlatval, s ksbb ltni fogjuk, hogy ltezik egy kln utasts is ehhez. Az if-elseif-else szerkezet alakja: if (kifejezs) { utasts; } elseif (kifejezs) { utasts; } else { utasts; } Ha az els kifejezs logikai rtke hamis volt, akkor program az elseif gra ugrik, ahol megvizsglja a msodik kifejezst, ha ez a logikai igaz, akkor vgrehajtja az elseif ltal meghatrozott blokkot, ha a logikai hamis, akkor az else gra ugorva vgrehajtja az else blokkjt. Termszetesen annyi elseif kulcsszt rhatunk ebbe a szerkezetbe, amennyit csak akarunk. A kvetkez egyszer plda az if-elseif-else hasznlatt mutatja be.01: 02: 03: 04: 05: 06:

A switch utasts is egy lehetsges mdja annak, hogy egy kdrszletet egy kifejezs rtktl fggen hajtsunk vgre. Van azonban nhny klnbsg az if s a switch kztt. Az if-et az elseif-el hasznlva tbb kifejezs rtktl tehetjk fggv, mg a switch esetben a program csak egy kifejezst vizsgl meg, s annak rtktl fggen klnbz utastsokat hajt vgre. A kifejezsnek valamilyen tpusnak kell lennie (szm, karakterlnc vagy logikai rtk). switch (kifejezs) { case rtk1: utasts1; break; case rtk2: utasts1; break; default: utasts; } A case alapszavak utn tntetjk fel az egyes rtkeket, s az sszes tbbi lehetsges rtket lefedhetjk a default-tal. A switch gy mkdik, hogy ha egy case utni rtk azonos a kifejezs rtkvel, akkor vgrehajtja az sszes ez utni utastst az gakon. Emiatt hasznljuk a break kulcsszt, amely segtsgvel kiugorhatunk a switch-bl. A kvetkez pldaprogram a switch hasznlatt mutatja be:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:

4.1.3 A ?: opertorA ?: ternlis (hromoperandus) mveletjel egy olyan if utastshoz hasonlt, amely rtket is kpes visszaadni. A visszaadott rtket a vizsglt felttel hatrozza meg: (felttel) ? rtk_ha_a_felttel_igaz : rtk_ha_a_felttel_hamis; Ha a vizsglt felttel igaz, a ? s a : kzti kifejezs rtkt adja, ha hamis, akkor a : utnit. Ehhez kapcsold egyszer plda egy szm abszoltrtkt adja meg:01: 02: 03: 04: 05: 06:

4.2 A ciklusA ciklusok segtsgvel arra is kpesek vagyunk, hogy bizonyos programrszeket tbbszr lefutassunk. ltalban meg szoktunk klnbztetni feltteles s nem feltteles ciklusokat. Nem feltteles ciklus a szmll ciklus, mg a feltteles ciklusokhoz tartozik ez ell- ill. a htultesztel ciklus.

4.2.1 A while ciklusA while ciklus az elltesztel ciklus megfelelje a PHP nyelvben. Az elltesztel ciklus a kifejezs logikai rtkt az ismtlend rsz eltt vizsglja. A while szerkezete nagyon hasonl az if szerkezethez: while (kifejezs) { utasts; } Amg a kifejezs igaz logikai rtk, addig a program folytatja a blokk ismtlst. Ebbl kvetkezik, hogy kell lennie egy olyan utastsnak az ismtlend rszben (vagy maga a kifejezs tartalmazza az utastst), ami egyszer hamiss teszi a kifejezst, klnben vgtelen ciklust kapnnk.01: 02: 03: 04: 05: 06: 07: 08:

Ez az egyszer program 1-tl 10-ig kirja az egsz szmokat a bngszbe. A fontos utasts, amely segtsgvel majd kilpnk a ciklusbl, a 6. sorban tallhat. A kvetkez kd 10-tl kettesvel visszafele 1-ig kirja a szmokat s a ngyzetket (az 1-et nem).01:

4.2.2 A do ciklusA do ciklus hasonl a while ciklushoz, csupn egyetlen lnyegi klnbsg van: a kifejezs vizsglata a blokk utn trtnik, ezrt is hvjk htultesztel ciklusnak. Ebbl kvetkezik, hogy egyszer mindenkppen vgrehajtdnak a blokkban tallhat utstsok, mg ha hamis is kezdetben a kifejezs logikai rtke. do { utasts; } while (kifejezs); Pldk a do ciklus hasznlatra:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 01: 02: 03: 04: 05: 06: 07: 08: 09: 10:

A 14 s a ngyzete megjelenik a bngszben, holott a felttelben a kisebb vagy egyenl, mint 10 szerepel. A do ciklust nem ilyen esetekben hasznljuk, ennek a ciklusnak is megvan az alkalmazsi terlete. A ksbbi fejezetekben ltunk majd erre pldt.

4.2.3 A for ciklusA for ciklust szoktk szmll ciklusnak hvni, m ez a szerkezet a PHP-ben sokkal ltalnosabb, mint pldul a Pascal vagy a Basic nyelvekben. A for a while-hoz kpest rvidebb lerst s biztonsgosabb hasznlatot eredmnyez. A for ciklus ltalnos alakja:

24

for (kifejezs1;kifejezs2;kifejezs3) { utasts; } A for ciklust knnyen while cikluss rhatjuk t, gy az elbbivel egyenrtk while ciklus: kifejezs1; while (kifejezs2) { utasts; kifejezs3; } A kifejezsek kzl brmelyik elhagyhat, gy vgtelen ciklust a legknnyebben az sszes elhagysval csinlhatunk: for (;;) Egy korbbi plda megvalstsa a for ciklus segtsgvel:01: 02: 03: 04: 05: 06: 07: 08:

A 2. sorban elszr kezdrtket adunk a $szam vltoznak (ciklusvltoz), majd megadjuk a ciklusban marads felttelt, vgl megadunk egy utastst, ami ksbb majd a ciklus befejezdst vltja ki. For ciklusok egymsba gyazsa:01: 02: 03: 04: 05: 06: 07: 08: 09: 10:

Ennl a pldnl kt ciklusunk van, kt ciklusvltozval ($i s $j). A futtats utn jl ltszik, hogy az ilyen egymsba gyazott ciklusoknl a kls ciklus ciklusvltozja egy rtknl a bels ciklus ciklusvltozja flveszi az sszes lehetsges rtket.

4.2.4 A break utastsA break utastssal elhagyhat (befejezhet) a while, do, for ciklus. Plda:01:

A 4. sorban meghatrozzuk, hogy ha az adott szm ngyzete nagyobb lenne, mint 50, akkor fejezzk be a ciklust.

4.2.5 A continue utastsA continue utasts segtsgvel a vezrl kifejezsek kirtkelsre knyszerthetjk a while, do, for ciklust (a kvetkez ismtls azonnali elkezdsre knyszertjk a ciklust). Plda:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11:

Mivel a continue a bels ciklusban tallhat, gy arra rvnyes. Amikor a $j vltoz rtke 2, nem hajtdnak vgre a continue utn tallhat print utastsok, hanem a kvetkez ismtlsre ugrunk (azaz a $j 2 rtke sosem jelenik meg a bngszben).

26

5 FggvnyekElfordulhat, hogy egy problma megoldsra clszer a feladatot nllan is rtelmes rszekre bontani, majd ezeket tovbb elemezve jabb, egyre elemibb egysgekbe tagolni, amelyek megoldsa mr korbbrl ismert, azaz ismert programozsi szablyok vagy hozz hasonl algoritmusok segtsgvel megvalsthat. Az is tbbszr elfordul, hogy a feladat tbbszr is felhasznl ilyen elemi rszt. Ha minden esetben ezt le kellene rnunk, akkor a programunk rendkvl terjengss vlna, ezrt kzenfekv megolds lenne, ha az ilyen rszek nevet kaphatnnak, ekkor csak a nevkre kellene hivatkozni. Az nllan rtelmes rszfeladat megoldst vgz algoritmust eljrsnak nevezzk. Sokszor elfordul, hogy az eljrssal egyetlen rtket hatrozunk meg, amelyet clszer lenne a matematikai fggvnyek mintjra kezelni. Ez azt jelenti, hogy olyan specilis eljrsokat kell ltrehoznunk, amelyek a meghvst kveten egyetlen, jl meghatrozott tpussal rendelkez rtket szolgltatnak, olyan mdon, hogy ezt az rtket az eljrs azonostja hordozza. A kznsges eljrsoktl val megklnbztets cljbl az elbbi tulajdonsggal rendelkez, nllan rtelmes algoritmusrszeket nevezzk fggvnynek. Ha a fggvny nevre hivatkozunk, a fggvnyt meghvjuk, azaz a fggvny trzse lefut. A fggvnynek feldolgozs cljbl rtkeket adhatunk t, amikor pedig a fggvny vget r, a hvnak egy rtket ad vissza. Az elz fejezetekben mr lttunk pldkat a fggvnyekre, a fggvnyhvsra. Ilyen volt pldul a print("Hello, World!");. A fggvnyhvsnl a fggvny neve utn zrjelek kztt (a print ebbl a szempontbl kivteles, zrjelei elhagyhatk) a fggvny bemen paramtereit soroljuk fl vesszvel elvlasztva (azokat az adatokat, amiket tadunk a fggvnynek). A fggvnyeknek ltalban van visszatrsi rtke is, melyet a hvnak visszaad, pldul a print() visszatrsi rtke logikai rtk, azaz arrl informl minket, hogy sikeres volt e a fggvny vgrehajtsa.

5.1 Fggvnyek ltrehozsa, az rtk szerinti paramtertadsA fggvnyek ltrehozshoz a function kulcsszt kell hasznlnunk: function fuggvenynev(formlis paramterek) { utasts; } A fuggvenynev azonost szerepet tlt be, gy kt egyforma nev fggvny nem lehet egy PHP programban, valamint bett, szmot, s az _ jelet tartalmazhat, de szmmal nem kezddhet. A formlis paramterek azok a paramterek, melyekkel a fggvny le van rva, a hvs sorn ezek helyre az aktulis paramterek kerlnek. Nzznk egy pldt a paramter nlkli fggvnyre:01: 02: 03: 04: 05: 06: 07:

Nzznk most egy pldt a paramterrel rendelkez fggvnyre:01:

A fenti pldban a fggvnyt meghvtuk konstans rtkkel, s gy, hogy a PHP a vltoz tartalmt helyettestette be.

5.2 rtkek visszaadsaA fggvnyeknek visszatrsi rtke is lehet (az olyan fggvnyt, amelynek nincs visszatrsi rtke, eljrsnak szoktunk nevezni), ehhez a return utastst fogjuk hasznlni. A return befejezi a fggvny futtatst, s az utna rt kifejezst kldi vissza a hvnak. A kvetkez pldaprogram kt szm tlagval tr vissza:01:

5.3 Cm szerinti paramtertadsAz eddigi programjainkban paramtereket csak rtk szerint adtunk t, ami azt jeleni, hogy a paramterek rtkeit felhasznlni tudja csak a fggvny, megvltoztatni nem. Mit tehetnk akkor, ha azt szeretnnk, hogy a bemen paramterek rtkei is megvltozhassanak? Ehhez hasznlnunk kell az & (hivatkoz) opertort. A lenti program feladata, hogy felcserlje a paramterknt megadott kt vltoz tartalmt.01: 02: 03: 04: 05: 06: 07: 08: 09:

Az egyetlen dolog, amit tennnk kellett, hogy a kt formlis paramter el beszrtuk a & jelet (2. sor).

5.4 Vltoz szm paramterekElfordulhat, hogy nem tudjuk hny paramter kerlhet egy fggvnybe. A PHP lehetv teszi, hogy megllaptsuk, hny paramtere van a fggvnynek, s ennek megfelelen hasznljuk. A fggvnyben a paramterek kezelsre a func_num_args(), a func_get_arg(), s a func_get_args() fggvnyeket hasznlhatjuk. Az els megadja a paramterek szmt, a msodik az adott sorszm paramtert (0-tl sorszmozva), a harmadik pedig egy tmbbe rendezi az sszes paramtert. Nzznk erre egy kicsit bonyolultabb pldt:01:

Ebben a pldban mr felhasznltuk a korbban megismert . s .= opertorokat. A $szoveg vltoz kezdetben az res sztringet tartalmazza (4. sor), majd miutn letroltuk a paramterek szmt a $paramszam vltozba (5. sor), hozzfzzk a soron kvetkez paramter tartalmt az elzekhez s kzjk az j sor tag-et (8. sor) egy for ciklus segtsgvel. Ami mg magyarzatra szolgl, hogy a 10. sorban mirt kerlt a red -ei el egy \ jel. Erre azrt van szksg, mert a PHP gy venn, hogy ott kezddik egy sztring vagy ott van vge. A \ jel s utna lert karaktereket vezrlkaraktereknek hvjuk. A $ jelet pldul csak gy rathatjuk ki, hogy \$-t runk a print-be, ellenkez esetben a PHP egy vltozt keresne a kirshoz. Akkor is mkdkpes programot kapunk, ha a tag-ekben a " jeleket egyszeren elhagyjuk.

5.5 Elhagyhat paramterMegtehetjk azt is, hogy egy formlis paramternek rtket adunk a fggvny paramterlistjban, s ekkor a paramter a fggvny hvsnl elhagyhat lesz, a PHP

29

azzal rtkkel fog dolgozni, amit a paramterlistban megadtunk. Ha viszont a hvsnl rtket adunk, akkor lecserldik a listban megadott arra, amivel hvunk. Ezt mutatja be a kvetkez kd:01:

5.6 HatkrAmikor a hatkr kifejezst fggvnyekkel s vltozkkal kapcsolatban hasznljuk, arra gondolunk, hogy a kd mely rszben ltjuk ezeket az elemeket, s mely rszben lehet hasznlni ket. A PHP-ben a hatkr szablyai: A fggvny paramterlistjval bevitt vltozk loklis vltozk, kivve, ha & jel van elttk. A fggvnyen bell definilt vltozk loklis vltozk, kivve, ha a global kulcsszt eljk rtuk a definilskor. A fggvnyen kvl definilt vltozk nem rhetk el a fggvnyen bell, kivve, ha paramterknt vittk be ket a fggvnybe, vagy ha a global utastssal definiltuk ket. A define() utastssal definilt konstansok mindig globlisak, fggetlenl attl, hogy a fggvnyen bell vagy kvl definiltuk ket. A fggvnyek mindig globlisak, gy egy msik fggvny belsejben definilt fggvny mindenhol elrhet.

A global kulcssz hasznlata:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12:

A global alapszt itt arra hasznltuk, hogy a fggvny belsejben definilt vltozt a fggvnyen kvl is elrjk. Ha a fggvnyen kvl definilunk egy vltozt, amit a fggvnyen bell szeretnnk hasznlni, akkor a vltoz definilsakor szintn ki kell tennnk a global kulcsszt.

30

5.7 Statikus vltozkLehet a kdunkban egy olyan fggvny, amelyet tbbszr hasznlunk, s minden hasznlatnl tovbbtania kell egy rtket a kvetkeznek. Ezt meg lehetne oldani egy globlis vltoz segtsgvel, de ennl egyszerbb s logikusabb megolds, ha statikus vltozt hasznlunk. Nzznk egy pldt, amely egyszeren kirja a fggvnyhvsok szmt:01: 02: 03: 04: 05: 06: 07: 08: 09: 10:

Ez egy nagyon egyszer plda a static hasznlatra, nzzk, hogy a static nlkl mit kellett volna tennnk:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11:

A kvetkez hrom rszben a PHP fggvnyei kzl a fontosabbak kerlnek megemltsre egy kis magyarzat mellett. A PHP sszes fggvnynek lersa egyrszt nagyon terjedelmes lenne, msrszt nem is cl, a PHP dokumentci folyamatos bngszse ajnlott.

5.8 Matematikai fggvnyekA kvetkez tblzat a PHP matematikai tvltsainak gyors ttekintst tartalmazza: Eredmny $integer_or_float = $float = $float = $float = $float = $float = Fggvny abs($int_or_float) acos($float) asin($float) atan($float) atan2($float_l, $float_2) cos($float) Lers Abszoltrtkt adja. A szg arkusz koszinuszt adja radinban. A szg arkusz szinuszt adja radinban. A szg arkusz tangenst adja radinban. A kt vltoz arkusz tangenst adja. A radinban meghatrozott szg 31

koszinuszt adja. $float = $float = $float = $float= $value = $value = $value = $value = $string = exp($float) lcg_value() Az e-t a $float hatvnyra emeli. Kombinlt lineris kongruencia genertor. log($float) A $float termszetes logaritmust adja. log10($float) A $float 10-es alap logaritmust adja. max($array) A tmbben lev maximlis rtket adja. max($value_l, $value_2 ... A paramterlistban lev $value_n) maximlis rtket adja. min($array) A tmbben lev minimlis rtket adja. min($value_l, $value_2 ... A paramterlistban lev $value_n) minimlis rtket adja. number_format($float, A tizedesjel s az ezreseket $decimal_places, elvlaszt karakter hasznlatval $decimal_point, megformz egy szmot. $decimal_separator) pi() A pi rtkt adja 13 tizedes pontossggal. pow($floatx, $floaty) A $floatx-et a $floaty-dik hatvnyra emeli. sin($float) A radinban meghatrozott szg szinuszt adja. sqrt($float) A $float ngyzetgykt adja. tan($float) A radinban meghatrozott szg tangenst adja.

$float = $float = $float = $float = $float =

A PHP-ben az egsz s lebegpontos matematikn kvl ltezik a tetszleges pontossg matematika is. Ez egy olyan matematika, ahol mi hatrozhatjuk meg a szksges pontossgot. A szoftver, jelen esetben a BCMath, valamilyen mdon mindig megbirkzik a nagy szmokkal, legfeljebb bizonyos mveletek tovbb tartanak. A dokumentciban a fggvny referencia cmsz alatt megtallhatk ezek a fggvnyek (mindegyik neve bc-vel kezddik). A PHP ezen kvl tmogatja a korltlan hosszsg egszekkel val szmolst is. A GMP, vagy GNU MP egy nylt forrskd matematikai csomag, amely beillesztsvel szintn tetszleges pontossg aritmetikai fggvnyekhez juthatunk, amelyekkel eljeles egsz, racionlis s lebegpontos szmokon lehet mveleteket vgrehajtani. A csomag letlthet a http://www.swox.com/gmp cmrl.

5.9 Dtum- s idfggvnyekA PHP tbb dtum- s idfggvnyt tartalmaz, mint a legjabb cscstechnolgij karra. A lenti tblzat a dtum s id kiszmtshoz szksges fggvnyeket tartalmazza, a tbbi szmtst ezekbl a fggvnyekbl kapott eredmnyekkel, illetve ezen eredmnyek talaktsval lehet elvgezni. Fggvny Lers 32

checkdate() date() getdate() gettimeofday() gmdate() gmmktime() gmstrftime() localtime() microtime() mktime() strftime() time() strtotime()

Ellenrzi, hogy a Gergely-naptr szerinti dtum helyes e. A helyi dtumot s idt formzva adja vissza. A helyi dtumot s idt tmbknt adja vissza. Az aktulis idt tmbknt adja vissza. Ugyanaz, mint a date(), de a helyi id helyett a GMT-t haszanlja A dtumot Unix-idjelzsre konvertlja. A GMT dtumot s idt formzza. A helyi idt tmb elemeiknt adja. A Unix-idjelzst a msodperc trtrszvel adja vissza. A Unix-idjelzst adja vissza egy dtumbl. Ugyanaz, mint a gmstrftime(), csak a helyi idt hasznlja. Unix-idjelzst ad vissza. A szveges dtumot/idt Unix-idjelzsre konvertl.

5.10 SztringfggvnyekA sztringfggvnyekkel dolgozni a PHP-ban egyrszt szrakoztat dolog, msrszt az adatkezelsnek egy hasznos mdja. A legtbb sztringfggvny binris adatokat kezel, a PHP azonban elvgzi a szksges konverzikat. A fontosabb sztringfggvnyek lerst lthatjuk a lenti tblzatban: Eredmny $string = Fggvny $addslashes($string) Lers Visszaper jeleket ad az idzjelekhez, ktszeres idzjelekhez, visszaper jelekhez s az res karakterekhez, gy a sztringet SQLekkel be lehet szrni adatbzisba. Az input sztring binris adatnak hexadecimlis megjelentst adja vissza. Eltvoltja a szvgn ll szkzket, gy a szkzket, \r, \n, \t s chr(13) karaktereket. A szm ASCII karakterkszletbeli megfeleljt adja (az ord() ellenttje). Egy tmbt ad vissza, mely a sztring egyes karaktereinek gyakorisgt tartalmazza. A $mode opcionlis s ellenrzi, hogy mi van szmolva. A sztring CRC32 rtkt szmolja ki. Egy opcionlis kulcs hasznlatval DES eljrssal rejtjelez egy sztringet.

$string = $string = $string = $array =

bin2hex($string) chop($string) chr($integer) count_chars($string, $mode) crc32($string) crypt($string, $key)

$string = $string =

33

Egy vagy tbb sztringet rat ki, hasonl a print()-hez. $array = explode($separator, Tmbt hoz ltre a sztringbl a $separator $string) egyes elfordulsainl sztvgva azt. $array = get_meta_tags A megnevezett fjl meta tag tartalmt adja ($file_name) tmbben vissza. $string = htmlentities($string) A, ', ^, & s a nehezen megjelenthet karaktereket HTML-elemekre konvertlja. $string = htmlspecialchars($string) A , ', ", s & karaktereket HTMLelemekre konvertlja. $string = implode($separator, A tmb elemeket egyestve sztringet hoz $array) ltre. Az explode() ellenttje. $string = levenstein($string_1, A kt sztring kztti Levenstein-tvolsgot $string_2) szmtja ki, ami az egyezsg mrtke. $string = ltrim($string) Levgja a szkzket, \n, \r, \t, \v s \0 karaktereket a sztring elejrl. $string = md5() A sztring MD5-tpus digitlis kivonatt adja vissza. $string = nl2br($string) A sztringben az sszes newline (\n) el HTML sortrst (
) szr be. $integer = ord($string) A karakter ASCII rtkt adja vissza (a karakter karakterkszleten belli ordinlis szmt adja vissza), $boolean = print($string) Egy sztringet rat ki, siker esetn igazat, hiba esetn hamisat ad vissza. $boolean = printf($format, $variables) A $format sztringgel formzott vltozkat rja ki. $array = sscanf($string, $format) Egy tmbt ad vissza, melynek az rtkei a $format hasznlatval kerltek be a sztringbl. $integer = strcasecmp($string_l, Binris-biztos, a kis-s nagybetket nem $string_2) megklnbztet sztring sszehasonulst vgez el. 0-t ad vissza, ha $string_l == $string_2, -1-et, ha $string_l < $string_2, vagy 1-et, ha $string_l > $string_2. $integer = strncasecmp($string_l, A strcasecmp() vltozata, mely a sztringeket a $string_2, $length) $length ltal megadott hosszsgig hasonltja ssze. $integer = strcmp($string_l, A strcasecmp() kis s nagybetket $string_2) megklnbztet vltozata. $string = strip_tags($string, $tags) Eltvoltja a sztringbl a HTML tag-eket a $tags-ben felsoroltak kivtelvel. $string = stripcslashes() Az addcslashes()-sel hozzadott visszaper jeleket tvoltja el. $string = stripslashes() Az addslashes()-sel hozzadott visszaper jeleket tvoltja el. Ha addslashes()-t hasznlunk, majd ezt kveten MySQLben troljuk az adatokat, a MySQL eltvoltja a visszaperjeleket s hasznlatra ksz

echo($string)

34

$integer = $integer = $string =

stristr($search, $string) strlen($string) str_pad($string, $length, $pad, $mode)

adatokat ad vissza. A strstr() kis- s nagybetket megklnbztet vltozata. A sztring hosszt adja vissza.

$integer = $string = $string = $string= $integer = $string = $integer = $string = $string = $string = $string = $string = $string =

$integer = $string =

$string = $string = $string =

A szkzkkel a $length mrtkben jobbra igaztott sztringet adja vissza. Ha az opcionlis $pad sztring meg van adva, akkor azt hasznlja a szkzk helyett. Az opcionlis $mode-dal vlaszthatunk az igaztsok kzl. strpos($string_l, $string_2) A $string_l-el adja vissza a $string_2 pozcijt. strrchr($string, $char) A $string-bl az utols $char utni sztringet adja vissza. str_repeat($string, Olyan sztringet ad vissza, amely a bemeneti $integer) sztringet $integer alkalommal tartalmazza. strrev($string) A sztringet fordtott karaktersorban adja vissza. strrpos($string, $char) A $string-ben lev utols $char pozcijt adja vissza. strspn($string, $char) A $string els rszt adja vissza, amely csak a $char-ban lev karaktereket tartalmazza. strstr($search, $string) A $search-nek a $string-en belli els elfordulsnak pozcijt adja vissza. strtok($string, $separator) A $separator-nl elvlasztja a sztringet s egyszerre egy szakaszt ad vissza. strtolower($string) Kisbetsre konvertlja a sztringet. strtoupper($string) Nagybetsre konvertlja a sztringet. str_replace($find, A $string-ben a $find sszes elfordulst $replace, $string) $replace-re cserli. strtr($string, $from, $to) A sztringben a karaktereket $from-rl $to-ra fordtja. substr($string, $start, A sztring $start-tl kezdd $length $length) hosszsg rszt adja vissza. Ha a $length nincs meghatrozva, akkor a $start-tl sztring vgig halad. substr_count($string, A $string-ben lev $char elfordulsnak $char) szmt adja vissza. substr_replace($string, Egy sztringet ad vissza, amelyben a $start-tl $replace, $start, $length) kezdd szveg a $length hosszsgban a $replace-re van cserlve. Ha a $length nincs megadva, a sztring vgig cserli. trim($string) Levgja a szkzket, \n, \r, \t, \v s \0 karaktereket a sztring elejrl s vgrl. ucfirst($string) A sztring els karaktert nagybetss vltoztatja. Klnsen mondatok formzsnl hasznos. ucwords($string) Minden sz els karaktert nagybetss

35

$string =

vltoztatja. Fejezetcmek formzsnl hasznos (br magyar nyelvben ez nem szoks). wordwrap($string, $length, Newline-okat szr be a sztringbe gy, hogy a $char) szveget a $length-nek megfelel hosszsg sorokra tri. Ha a $length nincs megadva, akkor alapbelltsban soronknt 72 karakter. Ha a $char meg van hatrozva, akkor azt szrja be a newline helyett.

Lthatjuk, hogy a PHP milli lehetsget nyjt szmunkra akr szmokkal, dtumokkal vagy szveggel dolgozunk. Az kvetkez fejezetekben jnhny fggvny alkalmazsa megtallhat lesz majd a pldaprogramokban.

36

6 Tmbk s objektumok6.1 TmbkProgramjaink rugalmassgt a tmbk hasznlata nagymrtkben nveli, de vigyznunk kell, mert nhny csapdt is rejtenek magukban. A PHP-tmbket gy hasznlhatjuk, mintha a memriban trolt mini adatbzisok lennnek, hiszen rengeteg fggvny ll rendelkezsnkre. Legyenek az adatok szveges dokumentumokban, nyomtathat fjlokban, XML fjlokban vagy adatbzisokban, betlthetk tmbbe, s feldolgozhatk anlkl, hogy az eredeti fjlba belenylnnk. A tmb vltozk listja. Tbb vltozt tartalmaz, amelyeket szmok vagy karakterlncok segtsgvel azonosthatunk, gy a klnbz rtkeket egyetlen nvvel trolhatjuk, rendezhetjk s rhetjk el. (ZANDSTRA, 2000, 98. old.)

6.1.1 Tmbk ltrehozsaTmbket sokflekppen ltrehozhatunk: fggvnyek s a tmbazonost segtsgvel is. Az array() listbl hoz ltre tmbt, az explode() hatrolt sztringbl (megtallhat az elz fejezet sztringfggvnyei kztt), s hasznlhatjuk a szgletes zrjelek kztt a tmbazonostt is a tmbelemek rtkeinek meghatrozsra. Az array() fggvny s a [ ] hasznlata: Az array() fggvny akkor hasznos, ha egyszerre tbb rtket szeretnnk egy tmbhz rendelni:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:

A PHP-ben a tmb sokkal rugalmasabb, mint nhny programozsi nyelvben. A tmbknek brmennyi eleme lehet, brmikor hozzadhatunk jakat, s az is megengedett, hogy klnbz tpus adatok kerlhessenek bele. A fenti plda jl illusztrlja, hogy brmilyen tpus rtket adhatunk a tmb elemeinek (sszetett tpust is), majd az indexek (sorszmok) segtsgvel megjelenthetjk a tmb tartalmt (a sorszmozs 0-val kezddik). Egy tmb feltltshez, vagy jabb elemek hozzadshoz ugyangy hasznlhatjuk a szgletes zrjeleket (10. sor). A rugalmassg kedvrt mg a sorszmot sem kell megadni, a PHP tudja, hogy melyik a soron kvetkez (ltezik ugyanis egy n. tmbmutat).

37

6.1.2 Asszociatv tmbkHa a tmbelemeket sorszmozs helyett elnevezzk, asszociatv tmbt kapunk. Tulajdonkppen a PHP-ben minden tmb asszociatv tmb, a szmozott adatok is asszociatv adatokknt viselkednek. Az elnevezs sorn csak egy dologra kell gyelnnk: kt egyforma nevet nem adhatunk, mert ekkor nem tudnnk egyrtelmen azonostani ket, ezrt ezt a nevet kulcsnak hvjuk. Az asszociatv tmbk ltrehozshoz ugyangy hasznlhatjuk az array() fggvnyt s a szgletes zrjeleket is:01:

6.1.3 Tbbdimenzis tmbkEbben a fejezetben mr volt sz arrl, hogy sszetett tpus is lehet egy tmb eleme, gy lehet tmb s objektum is. Ez a lehetsg kifinomultabb adatszerkezeteket biztost szmunkra. A tbbdimenzis tmb azt jelenti, hogy a tmb elemei tmbk. A PHP-tmbk brmennyi dimenzit elfogadnak, s az egyes dimenzik brmennyi elemet tartalmazhatnak. Valjban az a helyzet, hogy elbb futunk ki a memribl, mint elrnnk a PHP korltjait. Persze ms problma is lehet, ha tl sok dimenzival dolgozunk: egy id utn nem fogjuk mr tltni az egszet. Ezrt ersen javasolt, hogy hrom dimenzi fltt ne prblkozzunk, s abban is biztosak lehetnk, hogy kevesebb dimenziszmmal is meg lehet oldani a feladatot. A tbbdimenzis tmbk ltrehozsa:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:

Ha vgiggondoljuk, csak a szerkezeteket kell egymsba gyazni, s el is ll a tbbdimenzis tmb (2. sortl a 6. sorig, 11. sortl a 25. sorig). A 7., 9., 26., s a 28. sor figyelmeztet minket arra, hogy egy tmbelem elrshez tbb indexet/azonostt kell hasznlnunk.

6.1.4 A tmbmutatA tmbmutat csak nhny nyelvben ll rendelkezsre, s a PHP-ben tallhat az egyik legjobb megvalstsa. A tmbmutat segt meghatrozni, hogy hol vagyunk, amikor egy tmbben mozgunk. Tbb fggvny is tmogatja a tmbmutatt, hogy segtse a tmbben val mozgst. A reset() a tmb elejre lltja vissza a tmbmutatt. Ezt akkor clszer hasznlni, amikor egy ismeretlen llapot tmbn kell vgigmenni (azaz nem tudjuk, hogy hol ll benne a mutat). Amikor egy tmbt adunk t egy fggvnynek, az alaprtelmezsben rtkknt trtnik, gy egy msolatot kap a tmbrl, aminek az elejn ll a tmbmutat. Ha viszont hivatkozssal adjuk t, akkor a tmb az eredeti mutatt tartja meg, ami lehet, hogy ismeretlen pozciban van. A mutat aktulis helyzett a current() fggvnnyel krdezhetjk le, a next() a kvetkezre lptet, a prev() az elzre, mg az end() a tmb utols elemre lltja a tmbmutatt. Az each() fggvny megadja az aktulis elem kulcst s rtkt, s tviszi a mutatt a kvetkez adatra. Ennek segtsgvel bejrhatjuk a tmbt felhasznlva egy while ciklust (a bejrs eltt azonban meg kell gyzdni arrl, hogy a tmb elejn van a mutat).

6.1.5 Tmbk bejrsaEgydimenzis tmbk bejrsa A tmbk bejrsa trtnhet az elbb emltett each() fggvny segtsgvel, de a PHP-ben nemrg bevezettek erre egy kln ciklustpust is. A kvetkezkben ezek hasznlata lthat:01: 02: 03: 04: 05: 06: 07: 08:

A ciklus a foreach() (4. sor). Ksbb ltni fogjuk, hogy ezt lehet tbbdimenzis tmbknl is hasznlni. Ennl a pldnl megadtuk a $felhasznalok tmbt paramterknt a ciklusnak, majd az as kulcsszval jelltk, hogy a tmbelemek rtkeit rendre a $ertek vltozba szeretnnk megkapni. Ezutn a ciklusmagban mr csak a $ertek vltoz tartalmt kell kiratni. Van itt mg egy rdekes dolog: A tmbnk elszr hrom elemet tartalmaz (0,1,2 sorszmokkal), ksbb hozzadunk egy jat, aminek a sorszmt 5-re lltunk be. Ez azt jelenti, hogy ez a 6. elem, gy nincs 4. s 5. elem. A PHP nem fog res helyet hagyni, azaz a nem ltez elemekre nem pazarol res helyet (ebbl ltszik, hogy 39

valjban a sorszmozott tmb is asszociatv tmb). Pontosan emiatt ltezik a foreach() s az each() utasts, mivel ezek a tmbmutatt hasznljk fel, gy nem lehet problma a bejrssal, a Kismalac is megjelenik a bngszben (ha for ciklust hasznltunk volna, mint ahogy sok nyelvben ezzel jrjuk be a tmbket, indexproblmk merltek volna fel). Az asszociatv tmbk bejrsa:01:

A 3. sorban a ciklusnl mdostanunk kellett, itt a kulcs alapjn jelentjk meg az rtket. Ebben a pldban a list() fggvny minden egyes rtket kln vltozban ment el (8. sor, a kulcs s az rtk is vltozkba kerlnek), gy megknnyti az eredmnyek feldolgozst. Az each()-et a nem asszociatv tmbkn alkalmazva a kulcsok megfelelnek az elemek sorszmainak. Ha a tmb tbbdimenzis, akkor a $ertek vltoz egy tmb lesz, amit teljesen hasonlan fogunk bejrni. Tbbdimenzis tmbk bejrsa Mindent ismernk mr ahhoz, hogy a tbbdimenzis tmbket be tudjuk jrni:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:

6.1.6 Mveletek tmbkkelA tblzat a gyakran hasznlatos tmbkezel-fggvnyeket foglalja ssze: Eredmny $array = $array = $array = $value = $integer = $integer = $value = $array = Fggvny array_flip($array) array_merge($array_1, $array_2) array_pad($array, $integer, $value) array_pop($array) array_push($array, $value_1, $value_2, $value_n) array_rand($array) array_shift($array) array_slice($array, $index_1, $index_2) Lers tvlt az rtkek s a kulcsok kztt. A kt megadott tmbt egyesti. A tmbt feltlti annyi darab $valuevel, hogy a tmb elemszma $integer legyen. A tmb utols elemt trli, majd az elem rtkvel tr vissza. A tmbhz hozzfzi a megadott rtkeket, s a tmb elemszmval tr vissza. A tmb egy elemt vletlenszeren kivlasztja, majd az indexvel tr vissza. Eltvoltja a tmb els elemt, s annak rtkvel tr vissza. Tmbt hoz ltre az els indextl kezdve a msodikig a megadott tmb elemeinek rtkbl. Ha a msodik indexet nem adjuk meg, akkor a vgig nzi. A tmbben lv elemek szmt adja meg. A $file_name-mel megadott fjl tmbbe olvassa. Egy vltozrl megmondja, hogy tmb e. Tmbt hoz ltre az els indextl kezdve a msodikig a kulcsokbl 41

$integer = $array = $boolean = $array =

count($array) file($file_name) is_array($variable) range($index_1, $index_2)

$array =

shuffle($array)

(kulcstartomny kijellse). A tmb elemeinek vletlen sorrendbe rendezse.

6.1.7 Tmbk rendezseA PHP-tmbket az albbi lehetsgek szerint rendezhetjk fggvnyek segtsgvel:

rtk szerint kulcs szerint abc-sorrendbe szmos termszetes s specilis sorrendbe

A megfelel fggvnyeket tartalmaz tblzat: Fggvny sort($array) asort($array) rsort($array) arsort($array) ksort($array) natsort($array) usort($array) Lers Tmb rendezse rtk szerint. Asszociatv tmb rendezse rtk szerint. Tmb rtk szerinti fordtott sorrendbe rendezse. Asszociatv tmb rtk szerinti fordtott sorrendbe rendezse. Asszociatv tmb kulcs szerinti rendezse. Tmb rtk szerinti termszetes rendezse. Tmb nem termszetes rendezse.

A kvetkez pldaprogramban nhny tmbmvelet s rendezs alkalmazst lthatjuk:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:

6.2 ObjektumokAz objektumok a vltozkhoz hasonlan adatokat trolhatnak, ezeket az adatokat az objektumok adattagjaikban (tulajdonsgaikban) trolhatjuk. Kpzeljnk el egy objektumot, amely egy szemly adatait tartalmazza, az objektum adattagjai ebben az esetben a szemly neve, lakcme s telefonszma lehetnek. Ezzel semmi jat nem mondtunk mg, hiszen erre a feladatra egy asszociatv tmb is tkletesen megfelel. Az objektumok viszont tagfggvnyeket (metdusokat) is tartalmazhatnak. Ezek olyan fggvnyek, amelyek az objektum adataival dolgoznak. Az elbbi pldnl maradva, az objektum tartalmazhat egy megjelenit() metdust, amely a szemly adatait jelenti meg. Az objektum-orientlt (objektumkzpont) programozs (OOP) a termszetes gondolkodst, cselekvst kzelt programozsi md, amely a programozsi nyelvek tervezsnek kvetkezetes fejldse kvetkeztben alakult ki. Az gy ltrejtt nyelvek sokkal strukturltabbak, sokkal modulrisabbak s absztraktabbak, mint egy hagyomnyos programozsi nyelv. Az objektum-orientlt nyelveket hrom fontos dolog jellemez: Egysgbezrs (encapsulation): az adatstruktrkat (adattagokat) s az adott struktrj adatokat kezel fggvnyeket (tagfggvnyeket) kombinljuk, azokat egysgknt kezeljk, s elzrjuk ket a klvilgtl. Az gy kapott egysgeket objektumoknak nevezzk. Az objektumok megfelel trolsi egysge az osztly (class). Pldul, ksztnk egy kr objektumot, amely maga kpes elvgezni mindent, amit egy krrel megtehetnk, akkor ebbe beletartozik a kr adatainak sugr s kzppont - nyilvntartsa, de ki kell tudnia szmtani pldul ms adatokbl a sugarat, vagy ppen kirajzolni a krt. Teht egy csomagot ksztnk, amelybe mindent beletesznk, ami szksges.

43

rkls (inheritance): az adott, ltez osztlyokbl jabb osztlyok szrmaztathatk, az rkls sorn pedig az osztlyok rklik a szl-osztly adatstruktrit s fggvnyeit, ugyanakkor j tulajdonsgokat s metdusokat definilhatnak, vagy jrartelmezhetnek, gy egy osztlyhierarchihoz jutunk. Pldul, a krbl gmbt kszthetnk, hiszen a gmb rendelkezik a kr minden jellemzvel, csak eggyel tbb dimenzija van. Sokalaksg (polymorphism): egy adott metdus azonostja (neve) ugyanaz lehet egy osztlyhierarchin bell, ugyanakkor a hierarchia minden egyes osztlyban a tevkenysget megvalst fggvny az osztlyra nzve specifikus. Pldul, tegyk fel, hogy klnbz alakzataink vannak, hromszgek, ngyzetek s krk. Ekkor a sokalaksg segtsgvel ltalban minden alakzattal kpesek lesznk dolgozni. A terulet() tagfggvny az alakzathoz alkalmazkodva ki tudja majd szmtani annak terlett. jrahasznosthatsg: miutn ksztettnk egy osztlyt, jra s jra felhasznlva tbb objektumot gyrthatunk belle. Az rkls s a sokalaksg segtsgvel olyan eljrsokat kszthetnk, melyeket tbbszr, tbbflekppen is hasznlhatunk, nem kell jra s jra ellenrizni a mkds rszleteit.

Az osztly teht egy ksbb ksztend elem meghatrozsa, a szban forg elem pedig az objektum. Gyakori plda ezek megklnbztetshez a stemnyforma s a stemny. A stemnyforma meghatrozza a sti alakjt, de nmaga nem stemny (mg csak nem is ehet), csak egy eszkz, amellyel stemnyeket kszthetnk. Hasznlatakor biztosak lehetnk abban, hogy a stik egyformk lesznek, s nem fog elkopni, akrmennyi stemnyt is ksztnk. A stemnyformhoz hasonlan az osztllyal is tbb objektumot kszthetnk, gy ha van pldul egy kr osztlyunk, akkor ezzel szmos krt ltrehozhatunk. Az objektum az osztly egy pldnya, vagyis egy objektum nem ms, mint az osztlyban rgztett mkdsi szablyok megtesteslse. Egy adott tpus objektum a new kulcssz utn rt objektumtpus nevnek segtsgvel testesthet meg. Amikor egy objektumpldny ltrejn, sszes tulajdonsga s tagfggvnye elrhetv vlik. (ZANDSTRA, 2000, 120. old.). A PHP4-et nem igazn az objektum-orientlt programozsra terveztk. Ugyan rengeteg dolgot tartalmaz, amirl sz volt idig, mgis vannak olyan rszek, melyek megvalstsa mg nem megfelel vagy hinyzik. A PHP 5-s vltozata teljesen j OOP lehetsgeket tartalmaz, amelyek sokkal inkbb kzelebb viszik a PHP-t az objektumorientlt nyelvekhez.

6.2.1 Osztlyok s objektumok ltrehozsaAhhoz, hogy ltre tudjunk hozni egy objektumot, elszr ltre kell hoznunk egy sablont (ez az osztly), ami megmondja pontosan, hogy az objektum milyen tulajdonsgokkal fog rendelkezni, valamint hogy mit tehetnk majd az objektummal a tulajdonsgait felhasznlva. Az osztly ltrehozshoz a class kulcsszt kell hasznlnunk:class legegyszerubb { }

Ennl egyszerbb osztlyt nem lehet kszteni, gyakorlatilag semmit sem tartalmaz. Most mr van egy legegyszerubb nev osztlyunk, hogyan ksztjk el az osztly pldnyait?

44

$obj1=new legegyszerubb(); $obj2=new legegyszerubb();

A $obj1 s a $obj2 is teht egy pldnya az osztlynak. A pldnyostsnl a new kulcssz utn az osztly nevt (azonostjt) tntettk fel, valamint tettnk utna zrjeleket. gy tnik, mintha az osztly neve is egy fggvny lenne. Erre majd ksbb kapjuk meg a vlaszt a konstruktor rszben. Az objektumok tpusa az object a PHP-ben, gy ha a gettype() fggvnyt hasznljuk a $obj1 vagy a $obj2 vltozkkal, ezt kapjuk.

6.2.2 Adattagok (tulajdonsgok)Az elbbi pldban bemutatott osztlynak pldnyai nem rendelkeztek sem tulajdonsgokkal, sem fggvnyekkel. Hozzunk ltre egy olyan osztlyt, ami majd hozzrendel tulajdonsgokat a pldnyhoz:01:

A szemely osztlyt a 2. sorban definiltuk, mely kt adattagot hatroz meg az objektumok szmra: nev s eletkor. Az adattagok deklarlshoz a var kulcsszt hasznltuk, majd kezdeti rtket rendeltnk hozzjuk, mint ahogy ez ltszik a program 4. s 5. sorban, gy a ltrehozott objektumok adattagjai felveszik ezeket az rtkeket a pldnyostskor. Az objektum adattagjait a -> opertor segtsgvel rhetjk el (8. sor), s ennek segtsgvel rtket is adhatunk nekik (10. s 11. sor).

6.2.3 Tagfggvnyek (metdusok)A metdusok fggvnyek egy osztlyban, amelyek mveleteket hajtanak vgre egy objektumban. Ezeket a fggvnyeket teht az sszes pldnyban elrhetjk s meghvhatjuk. A kvetkez plda a szemely osztlyunkat egy tagfggvnnyel bvti, melynek segtsgvel a szemly neve megjelenthet lesz:01:

A tagfggvnyt a 6. sorban definiltuk, s a 8. sorban a $this-szel a ksbbi pldnyra hivatkoztunk. A $this-> segtsgvel gyakorlatilag az objektumbl elrhetjk az objektum brmely rszt, gy mdosthatjuk az adattagok rtkeit, meghvhatunk metdusokat. Egy objektumnak lehet ugyanolyan nev adattagja, mint tagfggvnye, a zrjelek segtsgvel meg tudjuk klnbztetni ket.

6.2.4 KonstruktorA konstruktor fogalma mr nem teljesen j, hiszen egy emltst mr tettnk rla az osztlyok s objektumok ltrehozsa rszben. Igen, ltrehozhat egy olyan fggvny, aminek ugyanaz a neve, mint az osztlynak, ezt hvjk konstruktornak (constructor). A pldnyostsnl a konstruktort hvjuk meg (ha nem hoztunk ltre az osztlyban, a PHP generl egy reset), azaz ennek a feladata, hogy ltrehozza (construct ~ felpt) a pldnyt. A konstruktornak lehetnek paramterei, nhny nyelvben az is megengedett, hogy tbb konstruktort definiljunk, melyek a bemen paramterek szmban vagy tpusaiban klnbznek. A PHP-ben nem lehet kt egyforma azonostj (nev) fggvnyt definilni, gy nem lehet kt konstruktort sem, viszont a fggvnyek fejezetben megtanultuk, hogyan kezelhetjk a vltoz szm paramtereket. A pldban ezt hasznljuk fel:01:

Az adattagok definilsa a 2. sortl kezddik, ahol belltottuk a megfelel kezdrtkeket, azrt, hogy a konstruktor paramter nlkli hvsnl is mondjon valamit az objektum szmunkra. A konstruktor lersa a 7. sortl kezddik, a paramterek kezelshez felhasznltuk a func_num_args() s a func_get_arg() fggvnyeket. A komolyabb objektum-orientlt nyelvekben az adattagok s tagfggvnyek hozzfrsi jogait is megadhatjuk. Azokhoz az adattagokhoz, amelyeket privtnak definilunk, kvlrl nem frnk hozz (csak az objektumbl). Ilyenkor minden privt adattaghoz kszthetnk publikus (brhonnan hozzfrhet) tagfggvnyeket, amelyek segtsgvel bellthatjuk s lekrdezhetjk az adattagok tartalmt (ltalban a bellt metdusok neve a set szval, mg a lekrdez metdusok neve a get szval kezddik). A PHP-ben nincs ehhez hasonl hozzfrsi jogosultsg, azaz az adattagok s tagfggvnyek brhonnan elrhetk, de clszer rni olyan tagfggvnyeket, amelyek segtsgvel kezelni tudjuk az adattagokat. Az elbbi pldban ezrt rhattunk volna a nev, eletkor s cim adattagokhoz olyan metdusokat, amelyek segtsgvel rtkket bellthatjuk. A konstruktor prja a destruktor (megsemmist) az objektum-orientlt nyelvekben, feladata az objektum megszntetse. A PHP-ben nincs destruktor, gy ha meg akarunk szntetni egy objektumot, meg kell rnunk hozz a kdot (felhasznlva a krnyezeti vltozkat s az unset() fggvnyt).

6.2.5 rklsAz objektumkzpont szemllet egyik nagyon fontos jellemzje, hogy n. osztlyhierarchit pthetnk fel az rkls segtsgvel. Az rkls sorn a gyermekobjektumok rklnek minden tulajdonsgot s metdust szljktl, de definilhatnak jakat is. Nzznk egy egyszer pldt az rklsre:01:

A dolgozo osztlyt a szemely osztly leszrmazottjaknt vezettk be az extends kulcsszval a 14. sorban, majd egy j tulajdonsggal (fizetes) bvtettk a 16. sorban. gy minden szemlynek csak neve van, mg minden dolgoznak fizetse is. A fizets lekrdezshez rtunk egy fizetes() tagfggvnyt is (17. sor). A 24. sorban ltrehoztunk egy dolgozt Istvn nvvel. A dolgozo szrmaztatott osztlynak nem rtunk konstruktort, gy a szl osztly (szemely) konstruktora hvdik meg. Ha valamely fggvny (belertve a konstruktort is) nincs jradefinilva a gyermekosztlyban, akkor a hvskor a szlosztlyban tallhat hvdik meg. Megtehettk volna, hogy j konstruktort, s j nev tagfggvnyt runk.

6.2.6 SokalaksgMost pedig megnzzk, hogy hogyan lehet fellrni a szl tagfggvnyeit, s ezutn mgis elrni, valamint hogy hogyan lehet objektumokbl tmbt kpezni:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:

Ebben a pldban minden osztlyhoz megrtuk az adattagok belltshoz s lekrdezshez szksges metdusokat. A szemely osztlybl kt osztlyt is szrmaztattunk, a munkaltato (27. sor) osztlyt, s az alkalmazott (44. sor) osztlyt. A getnev() metdust jradefiniltuk a szrmaztatott osztlyokban (31, 47. sorok), s definiltunk jakat is (35, 39, 51. sorok). Az alkalmazott osztlyban elksztettnk egy olyan tagfggvnyt (getszemelynev()), amellyel meghvtuk a szl getnev() tagfggvnyt. Az 53. sorban a parent:: gondoskodik arrl, hogy elrjk a szl adott metdust. A parent a szl osztlyt nevezi meg, gy nem kell lerni annak a nevt. A 56. sortl kezdden hrom objektumot hoztunk ltre, s ezeket a $obj tmbbe helyeztk. A tmbt a ksbbiekben bejrtuk, s a tmbelem osztlytpusa szerint hvtuk meg az objektumok tagfggvnyeit. Az objektum osztlynak meghatrozshoz a get_class() fggvnyt hasznltuk.

6.2.7 ObjektumfggvnyekA tblzatban a fontosabb objektumfggvnyeket foglaltuk ssze: Eredmny Fggvny Lers 49

call_user_method(string_1, string_2, , string_n, $object) call_user_method_array(string_1, string_2, , string_n, $array)

$boolean = $string = $array = $array = $array = $array = $string = $boolean = $boolean =

class_exist($string) get_class($object) get_class_methods($string) get_class_vars($string) get_declared_classes() get_object_vars($object) get_parent_class($string) is_subclass_of($object, $string) method_exist($object, $string)

A $object objektum metdusait hvja meg. A sztringek a metdusok nevei. Ha az objektumok egy tmbben vannak ($array-ben), akkor meghvhatjuk mindegyik (a sztringekkel meghatrozott) ugyanazon metdusait. Logikai vlaszt ad arrl, hogy $string nev osztly ltezik e. Megadja a $object osztlyt. Egy tmbbe tlti a $string nev osztly metdusait. Egy tmbbe tlti a $string nev osztly adattagjait. Egy tmbbe tlti a deklarlt osztlyokat. Egy tmbbe tlti a $object objektum adattagjait. A $string nev osztly szlosztlyt adja meg. Logikai vlaszt ad arrl, hogy a $object szlosztlya e a $string nev osztly. Logikai vlaszt ad arra, hogy ltezik e a $object objektumnak $string nev metdusa.

Ezeknek a fggvnyeknek a hasznlatt is egy pldn keresztl mutatjuk be:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:

Az egyetlen magyarzatra szorul sor a 4. sor. A while felttelben egy rtkads szerepel, ami azt jelenti, hogy a ciklus addig ismtel, amg sikeres az rtkads. A readdir() gy addig olvas a knyvtrbl a $fajl vltozba, amg van fjl a knyvtrban. A $fajl vltozrl pedig ksbb eldntjk az is_dir() fggvny segtsgvel (fggvnyparamternek abszolt elrsi tnak kell lennie), hogy knyvtr volt e (7. sor). A msodik megolds:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15:

60

A 6. sorban tallhat filetype() fggvny sztringknt a fjl tpust adja vissza, ami a dir, file vagy link kzl valamelyik lehet. A klnbz tpusok szmt $melyik asszociatv tmbben troljuk (7. sor).

8.1.2 Egyb knyvtrfggvnyekA dirname() fggvnybe a fjl elrsi tjt rva az elrsi t knyvtrrszt kapjuk, mg a basename() a maradkot, a fjlnevet eredmnyezi. A pathinfo() ugyanazt az informcit adja, mint a dirname() s a basename() sszekapcsolva. A realpath() a relatv tvonalat abszolt elrsi tt konvertlja.

8.2 FjlokA kvetkezkben megtudhatjuk, hogy hogyan kell egy ltez PHP fjlt begyazni egy msik PHP fjlba, hogyan lehet fjltulajdonsgokat megjelenteni, hogyan lehet fjlokat ltrehozni, olvasni, rni s trlni, valamint a fjlfeltltsrl is lesz sz.

8.2.1 Fjlok begyazsaAz include() fggvny lehetsget ad arra, hogy fjlt gyazzunk be a PHP dokumentumokba. A fjlban szerepl PHP kd gy hajtdik vgre, mintha a fdokumentum rsze lenne, ami hasznos, ha egy tbboldalas programban kls kdokat szeretnnk begyazni. Msrszrl a tbbszr felhasznland rszeket clszer kln fjlokba elhelyezni, gy azokat brmikor, brmelyik fjlba knnyedn beilleszthetjk. Pl.: include("proba.php");

8.2.2 Fjlok listzsa attribtumokkal egyttEz a lehetsg azt mutatja meg, hogy hogyan fussunk vgig egy knyvtron bell a fjlokon a fjltulajdonsgok kiratsval:01:

61

8.2.3 Fjlok ltrehozsa s trlseHa egy res fjlt szeretnnk ltrehozni, a touch() fggvnyt kell hasznlnunk. A paramterknt megadott fjlnv el az elrsi tvonalat is meg kell adnunk, ha nem az aktulis knyvtrban szeretnnk a fjlt ltrehozni. Ha a fjl mr ltezik, akkor az utols mdosts dtuma mdosul az utasts vgrehajtsi idejre. Pl.: touch("proba.txt"); Ltez fjlt trlni az unlink() fggvnnyel lehet. Az unlink() paramtere a fjl elrsi tja: Pl.: unlink("proba.txt"); A ltrehozs, trls, rs, olvass, mdosts csak akkor lehetsges egy fjlon, ha a megfelel jogosultsgokkal rendelkeznk.

8.2.4 Fjlok olvassaA fjlokat szekvencilisan tudjuk olvasni s rni. A szekvencilis input fjt hromflekppen lehet a PHP-ben olvasni: bjtonknt, karakterenknt, soronknt. A kvetkez plda a fjl megnyitsa utn ezek mindegyikt bemutatja:01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:

A 3. sorban a file_exists() fggvnnyel a fjl ltezst dntjk el. A karakterenknti olvasst a 13. sortl kezdve lthatjuk. A 15. sorban a fjlt megnyitjuk olvassra (r - read) az fopen() fggvnnyel, melynek eredmnye a $f fjlvltoz (a tovbbiakban ezzel dolgozunk). Ezek utn egy karaktert olvasunk a fjlbl az fgetc() fggvnnyel, amg a fjl vgre nem rnk (feof() logikai rtk fggvny, igaz rtket ad, ha a fjl vgre rtnk). A 25. sortl a soronknti olvasst lthatjuk, melyben jdonsg az fgets() fggvny. Jelen esetben ez egy sort vagy 1024 bjtot olvas a fjlbl. Vgl a 43. sorban a