php programozás

149
1 Tanuljunk PHP-ül (Fejlesztés alatt) Fábián Zoltán 2001-2004 v0.8

Upload: hoangque

Post on 30-Dec-2016

261 views

Category:

Documents


10 download

TRANSCRIPT

  • 1

    Tanuljunk PHP-l (Fejleszts alatt)

    Fbin Zoltn

    2001-2004 v0.8

  • 2

    Tartalomjegyzk 1 BEVEZETS.............................................................................................................................................................5

    MIRE J EZ A JEGYZET?.....................................................................................................................................................5 1. 2 A PHP RVID TRTNETE ..........................................................................................................................................5 MI A PHP? .......................................................................................................................................................................6

    2 MILYEN RENDSZEREN HASZNLHAT? ........................................................................................................8 2.1.1 Milyen opercis rendszer? ...........................................................................................................................8 2.1.2 Milyen WEB szervert? ...................................................................................................................................8

    3 A PHP4 TELEPTSE (WIN32 VLTOZAT) ........................................................................................................9 3.1 KNYVTRAK ....................................................................................................................................................9 3.2 TELEPTS ........................................................................................................................................................10

    3.2.1 Apache WEB szerver 1.3.xx vagy 2.0.xx .......................................................................................................10 3.2.2 Internet Information Server 4 vagy 5............................................................................................................10 3.2.3 Personal Web Server 4 vagy jabb (Win98) .................................................................................................11 3.2.4 Szerver nlkli hasznlat: ............................................................................................................................11

    4 ESZKZK A PHP HASZNLATHOZ............................................................................................................12 5 EGY HTML S EGY PHP OLDAL SZERKEZETE ............................................................................................13 6 A PHP SZINTAKTIKJA......................................................................................................................................14 7 VLTOZK, ADATTPUSOK..............................................................................................................................15

    7.1 A VLTOZ NEVE .............................................................................................................................................15 7.2 A VLTOZ RTKE ..........................................................................................................................................15 7.3 A VLTOZK S KIFEJEZSEK TPUSAI ...............................................................................................................15 7.4 ELRE DEFINILT VLTOZK ............................................................................................................................17

    7.4.1 PHP Core A PHP rendszer alapvet vltozinak a listja..........................................................................17 7.4.2 Environment ................................................................................................................................................17 7.4.3 PHP Variables - A PHP vltozk listja.......................................................................................................17

    7.5 KONSTANSOK ...................................................................................................................................................18 8 ALAPVET UTASTSOK ..................................................................................................................................19

    8.1 ECHO ...............................................................................................................................................................19 8.2 FORMZOTT KIRS ..........................................................................................................................................20 8.3 A KIIRATS GYAKORLSA .................................................................................................................................21

    9 OPERTOROK (MVELETEK)..........................................................................................................................22 9.1 STRINGEK KZTTI MVELETEK........................................................................................................................22 9.2 ARITMETIKAI MVELETEK ................................................................................................................................22 9.3 HOZZRENDELS, RTKADS ..........................................................................................................................22 9.4 NVEL/CSKKENT OPERTOROK...................................................................................................................22 9.5 LOGIKAI OPERTOROK ......................................................................................................................................23 9.6 SSZEHASONLT OPERTOROK ........................................................................................................................23 9.7 BITORIENTLT OPERTOROK.............................................................................................................................23 9.8 HIBAKEZEL OPERTOROK ...............................................................................................................................24 9.9 VGREHAJT OPERTOROK...............................................................................................................................24 9.10 GYAKORL FELADATOK....................................................................................................................................24

    10 VEZRLSI SZERKEZETEK ..............................................................................................................................25 10.1 ELGAZSOK ...................................................................................................................................................25 10.2 CIKLUSOK ........................................................................................................................................................27 10.3 ELGAZSOK S CIKLUSOK HASZNLATA HTML KDDAL KEVERVE ..................................................................29 10.4 PHP LAPOK BESZRSA, MAKRO-K HASZNLATA. ..........................................................................................30 10.5 TVOLI FILE-OK HVSA ...................................................................................................................................31 10.6 PLDAPROGRAMOK FELTTELEKKEL, CIKLUSOKKAL ..........................................................................................31

    11 SAJT FGGVNYEK, VLTOZK LETTARTAMA S LTHATSGA...............................................32 11.1 FGGVNYEK ...................................................................................................................................................32 11.2 PARAMTERTADS .........................................................................................................................................32 11.3 FGGVNYEK VISSZATRSI RTKE .................................................................................................................34

  • 3

    11.4 VLTOZK LETTARTALMA S LTHATSGA ..................................................................................................34 11.5 VLTOZK TADSA LAPOK KZTT ................................................................................................................36

    11.5.1 Header utasts.......................................................................................................................................36 11.5.2 GET metdus ..........................................................................................................................................36 11.5.3 POST metdus ........................................................................................................................................37 11.5.4 $_SESSION vltozk ...............................................................................................................................40 Egy session kezel mkdse - plda..........................................................................................................................45 11.5.5 COOKIE-k (stik) ...................................................................................................................................48

    12 KONVERZI ADATTPUSOK KZTT............................................................................................................50 13 TMBK................................................................................................................................................................51 14 SZTRINGEK, SZVEGEK MANIPULCIJA..................................................................................................55 15 FORMOK /RLAPOK INTERAKTV PROGRAMOK RSA.......................................................................59

    15.1.1 nmagukat meghv rlapok...................................................................................................................59 16 FORMOK ADATAINAK FELDOLGOZSA SZERVER- S KLIENS OLDALON.......................................61 17 LEVLKLDS, PLAIN TEXT, HTML LEVL, ATTACHEMENT.................................................................63 18 ADATBZISOK .....................................................................................................................................................65

    18.1 MYSQL ...........................................................................................................................................................66 18.2 POSTGRES SQL ................................................................................................................................................66 18.3 ADATBZIS-KEZELS NATV MDON..................................................................................................................68 18.4 TIPIKUS FELADATOK ADATBZIS-KEZELSNL ...................................................................................................70 18.5 HIBAKEZELS ...................................................................................................................................................73 18.6 ADATBZISKEZELS MSKPPEN ABSZTRAKCIS RTEGEK, ADODB, ODBC ..................................................73

    18.6.1 Az absztrakcis rteg...............................................................................................................................73 18.6.2 ODBC programcsomag...........................................................................................................................73 18.6.3 Az ADODB rtegezs ..............................................................................................................................74 Example 3: Inserting .................................................................................................................................................79 Example 4: Debugging ..............................................................................................................................................79 Example 5: MySQL and Menus..................................................................................................................................80 Example 6: Connecting to 2 Databases At Once.........................................................................................................80 Example 7: Generating Update and Insert SQL .........................................................................................................80 Example 8: Implementing Scrolling with Next and Previous.......................................................................................82 Example 9: Exporting in CSV or Tab-Delimited Format.............................................................................................83 Example 10: Recordset Filters...................................................................................................................................83 Example 11: Smart Transactions ...............................................................................................................................83

    18.7 USING CUSTOM ERROR HANDLERS AND PEAR_ERROR...................................................................................85 18.8 DATA SOURCE NAMES ...................................................................................................................................87 18.9 CACHING OF RECORDSETS ............................................................................................................................87 18.10 PIVOT TABLES .............................................................................................................................................87

    19 CLASS REFERENCE...........................................................................................................................................91 19.1 GLOBAL VARIABLES......................................................................................................................................91

    $ADODB_COUNTRECS...........................................................................................................................................91 $ADODB_CACHE_DIR............................................................................................................................................91 $ADODB_FETCH_MODE........................................................................................................................................91

    19.2 ADOCONNECTION ..........................................................................................................................................93 ADOConnection Fields..............................................................................................................................................93 ADOConnection Main Functions...............................................................................................................................94 ADOConnection Utility Functions ...........................................................................................................................105

    19.3 ADORECORDSET .........................................................................................................................................107 ADORecordSet Fields .............................................................................................................................................107 ADORecordSet Functions........................................................................................................................................107 function rs2html($adorecordset,[$tableheader_attributes], [$col_titles]).................................................................112 Differences between this ADOdb library and Microsoft ADO...................................................................................113

    20 DATABASE DRIVER GUIDE ...........................................................................................................................114 20.1 ID KEZELSE PHP MYSQL ESETN .............................................................................................................115 20.2 SOKIG FUT PROGRAMOK .............................................................................................................................116

  • 4

    21 FILE-OK, KNYVTRAK KEZELSE A SZERVEREN S TVOLI URL-EKEN ......................................117 LTOGATK SZMA:

  • 5

    1 Bevezets

    Mire j ez a jegyzet? A jegyzetnek az a clja, hogy bevezesse az olvast a ma robbansszeren terjed PHP nyelv vilgba, megtantsa az alapvet eljrsokat, fogalmakat s kpess tegye az olvast sajt PHP scriptek rsra. Hasznljuk tovbb a Szily Klmn Mszaki Kzpiskola tdves szmtstechnikai programoz szakn is.

    Nem teljes PHP dokumentci! Nem is lehet az, hiszen mialatt a jegyzetet megrtam legalbb kt j verzi jelent meg a PHP-bl s folyamatosan bvl a PHP-ben hasznlhat szolgltatsok kre. Igyekeztem arra koncentrlni, hogy egy kezd viszonylag gyorsan elsajtthassa a nyelv alapjait, gyorsan tudjon hatsos programokat rni, s ha valamilyen gyakran elfordul problma megoldsra keres vlaszt, akkor azt viszonylag hamar meg tudja oldani. Teljes dokumentcit az Internetrl lehet beszerezni, rszben magyar nyelven az albbi cmekrl, http://www.php.net dokumentci angolul vagy a http://hu.php.net/docs.php oldal magyarul. A php 4.2.3 verzijtl prblkozva rom ezt a jegyzetet.

    A jegyzetben tallhat pldaprogramokat, tleteket, rszben az albbi forrsokbl szemezgettem s ezton ksznetet mondok nekik :

    http://hu.php.net A PHP site magyar oldalai [email protected] Magyar PHP lista

    http://php4.x3.hu, Korss Istvn (KI), [email protected] PHP-s cikksorozata a PC-World-bl, resource-ok PHP s egyb tmkban

    http://phpbuilder.com/columns/ying20000602.php3?page=1 sessionok, Ying Zhang cikke

    http://phpmailer.sourceforge.net Emailklds

    http://php.weblogs.com/ADODB ADODB adatbziskezels

    Molnr Lszl A Postgres SQL teleptse

    Smarty felhasznli kziknyv http://Smarty.php.net

    Smarty template rendszer s a dikjaim is.

    1. 2 A PHP rvid trtnete A PHP trtnete 1994 szre nylik vissza, amikor a munkt keres Rasmus Lerdorf egy Perl CGI szkriptet hasznlt a Web odalt felkeresk regisztrlsra. A ltogatkat naplz kdot "PHP-tools for Personal Home Page"-nek nevezte el. Az els nyilvnos vltozat gy 1995 tjn ltott napvilgot. Ez mg csak nhny egyszerbb feladatra volt hasznlhat, tbbek kztt szmllt, vendgknyvet tartalmazott.

    A PHP fejlesztse a Toronti Egyetemen folytatdott, ahol Rasmus Lerdorf olyan interfszt fejlesztett ki, aminek segtsgvel a HTML kdba gyazott specilis utastsok kzvetlenl rtk el az egyetemi adatbzisokat. A rendszert Rasmus "Form Interpreter"-nek, FI-nek nevezte el. Az FI-ben hasznlt elv mr megegyezett a PHP alapelvvel, miszerint a HTML kdba begyazott utastsokat rtelmezte s

    http://www.php.nethttp://hu.php.net/docs.phphttp://hu.php.netmailto:[email protected]://php4.x3.humailto:[email protected]://phpbuilder.com/columns/ying20000602.php3?page=1http://phpmailer.sourceforge.nethttp://php.weblogs.com/ADODBhttp://Smarty.php.net

  • 6

    hajtotta vgre az FI rtelmezje. Ksbb a PHP s az FI sszehzastsbl szletett meg az els szles krben hasznlt parancsrtelmez a PHP/FI. Ez tartalmazta a PHP s az FI addigi szolgltatsait, st az mSQL adatbzisok elrst is tmogatta. Rasmus eleinte eljtszadozott a gondolattal, hogy a PHP-t kereskedelmi termkk teszi, de olyan komoly mennyisg visszajelzst kapott ms programozktl, klnbz kiegsztseket s hibajavtsokat kldve a PHP-hez, hogy letett ebbli szndkrl. A PHP fejldshez s sokrtsghez nagymrtkben hozzjrult kls programozk szabad s ingyenes rszvtele a rendszer fejlesztsben. A PHP a mai napig is ingyenes termk, s ez valban nagyon j dolog. Az els verzi megjelenstl kezdve a PHP felhasznli tbora tretlenl nvekedett. 1996-ban kzel 15.000 Web oldalon hasznltk a PHP/FI-t, 1997-ben mr tbb mint 50.000 Web oldalon. Ebben az vben kezddtt el a PHP sokkal jobban szervezett tovbbfejlesztse. A PHP/FI-t rtelmezjt szinte az alapoktl kezdve jrartk, temelve a PHP/FI-ben alkalmazott technikkat s kdot, de szmos jat is hozztve. gy alakult ki a PHP 3-as vltozata, ami gyakorlatilag rendelkezett mindazokkal a kpessgekkel, amik a PHP npszersgt megalapoztk. A PHP fejldse azonban nem ll meg. Jelenleg a 4.0.6 vltozatnl tart a fejleszts, de ksznheten a "szabad szoftver" filozfinak nem valszn, hogy itt megreked. A magyar PHP lista az elmlt vben indult, napi 2-3 levllel, egy v alatt napi 30-50 levlre duzzadt a forgalma.

    Mi a PHP? Egy programozsi nyelv. A PHP majdnem ltalnos cl programozsi nyelv, amely mra sokfle terleten alkalmazhat, amit a Weben keresztl meg lehet oldani. Dinamikus oldalak, adatbzis-kezels, akr gyviteli alkalmazsok, levelezs, portlok, grafikai alkalmazsok, file-kezels, tvoli adminisztrci, stb.

    Mieltt a PHP mkdst rszleteznnk, meg kell ismerkedni egy kicsit a Web-en lv alkalmazsok lelkivilgval.

    Amikor a bngszben berjuk egy olyan oldal nevt, s letltjk azt, akkor az Interneten lv WEB szerver kldi el a bngsznknek a kvnt oldalt. Ez az oldal egy HTML oldal, egy ASCII szveg llomny, amely megrkezve a bngsznkre azt a bngsz rtelmezi, s a tartalmt megjelenti. Az ilyen oldalakat statikus oldalaknak hvjuk, mivel a kvetkez s az utna kvetkez krsekkor mindig pontosan ugyanazt az oldalt fogjuk jra meg jra megkapni, hiszen a szerveren ez egy file. Abban az esetben, ha azt szeretnnk, hogy az oldal tartalma vltozzon, azaz dinamikus oldalt szeretnnk, valamilyen mdon az oldalt a szerveren ltre kell hozni, mdostani kell. Ennek rdekben ki kell egszteni a WEB-szervert olyan alkalmazsokkal, amelyek az oldal krsekor futskor lltjk el az oldalt, majd odaadjk a szervernek, amely az eredmnyt tovbbtja a bngsz fel. Ezeket a programokat sszefoglal nven CGI programoknak hvjuk, ami a Common Gateway Interface kifejezs rvidtse. Ezek a programok teht j funkcionalitssal bvtik ki a WEB szervereket. A legfontosabb ebben az, hogy ez ltal a bngszk interaktv mdon tudnak kapcsolatot teremteni a WEB szerverrel, adatokat tudnak bevinni neki, a bevitt informci alapjn vltozik a visszaadott rtk. Az ilyen rendszer mkdse olyan, hogy a bngszben bert informcit megkapja a WEB szerver, tadja a CGI programnak, ami az informci birtokban feldolgozza s visszakldi a WEB szervernek, amely tovbbtja a bngsz fel HTML kd formjban. A CGI programok vagy a szerver opercis rendszern futni kpes programok, amelyeket valamilyen nyelven, pl. C-ben rtak meg s fordtottak le, vagy gynevezett scriptek, amelyek egy rtelmez program kzremkdsvel futnak.

    A PHP programokat egy ilyen rtelmez futtatja a szerveren akkor, ha a bngsz PHP, PHP3, PHP4, vagy hasonl kiterjeszts file-okra hivatkozik. Ekkor a WEB szerver meghvja a PHP rtelmez programot (interpretert), amely rtelmezi a krdses oldalt, majd az eredmnyt Web oldal formjban visszaadja a WEB szervernek, amely tovbbtja a bngsznek.

  • 7

    Teht a PHP program egy WEB szerveren fut script, amelynek az eredmnye egy WEB bngszn keresztl jelenik meg. Ha valaki mr tallkozott HTML oldalakon Javascriptekkel, vagy Vbscriptekkel, akkor lehet fogalma arrl, hogy mirl is van sz, ugyanakkor lnyeges klnbsg van a ktfle megolds kztt. Mg a Javascriptek s a Vbscriptek a bngszn hajtdnak vgre, addig a PHP scriptek a szerveren. Ennek tbb elnye van, pldul sokkal bonyolultabbak lehetnek, el lehet rejteni a tartalmukat a kvncsi tekintetek ell, nincsenek a bngsz kpessgeihez ktve. A PHP script a bngszn soha nem jelenik meg (ha megjelenik, akkor baj J), csak az a HTML vagy egyb kd, amelyet elllt. A bngsz krse nyomn a PHP rtelmez megkapja az oldal helyt, nevt s az esetleges bemen paramtereket

    valami.php valami.php

    Bngsz WEB szerver PHP rtelmez

    A kvnt oldalt betlti az rtelmez, feldolgozza, s az eredmnyt visszakldi

    HTML kd

    HTML kd

    Bngsz WEB szerver PHP rtelmez valami.php

    A PHP rtelmez a fejldse sorn egyszer script futtat programocskbl komoly fejleszteszkz lett.

  • 8

    2 Milyen rendszeren hasznlhat? 2.1.1 Milyen opercis rendszer? Gyakorlatilag ltezik az sszes elterjedt opercis rendszeren, Win32, Linux, Solaris, BSD, hogy csak a legismertebbeket rjk le. Ezeken a rendszereken fut sok-sok WEB szerver segtsgvel lehet futtatni. Gondolva a tanulsra s az ltalban meglv szmtstechnikai krnyezetre a Windows 98, ME, NT, W2000 opercis rendszert ajnljuk.

    Magyarzat: Mirt nem LINUX? Azok rszre, akik most tanuljk a nyelvet nem clszer olyan rendszert hasznlni, amelynek nem ismerik elgg a tulajdonsgait. Az oktatsban elssorban Windowsos rendszereket hasznlnak.

    2.1.2 Milyen WEB szervert? A PHP teleptse eltt mindenkppen szksgnk lesz egy mkd WEB szerverre. Nyilvn most nem az a feladatunk, hogy egy WEB szerver teleptst bemutassuk, de ha a Windows NT-t hasznljuk s a Service Pack 5-t felteleptettk, akkor lesz IIS4-nk. A Windows 2000 alatt eleve a rendszer rsze, Win9x alatt pedig a Personal WEB Servert hasznlhatjuk alaprtelmezetten. Ennek ellenre mi az Apache WEB szervert ajnljuk, annak egyszer teleptse, egyszer belltsa miatt. Megjegyezzk, hogy az Apache belltsa majdnem ugyanaz LINUX alatt s Win32 alatt is, teht ennek a rendszernek a hasznlatakor nagyon kis klnbsgek kellenek a LINUX-os verzira val tllshoz. A ksbbiek sorn bemutatunk egy olyan sszelltst is, amellyel egyszerbb PHP programokat tudunk futtatni WEB szerver nlkl is, Win9x, ME, NT, W2000, XP rendszeren! n Windows 2000 s Apache 1.3.xx valamint Windows XP s Apache 2.0.xx rendszerrel is hasznlom.

    Hol tallok szolgltatt, aki futtat PHP scripteket, esetleg adatbzist? Az utbbi idben tbben is vllalkoznak erre a szolgltatsra. Jelenleg tudomsom szerint a kvetkez szolgltatk hajlandk futtatni ingyen php-t: http://www.f2s.com ingyen PHP, MySQL, PostGres SQL

    http://www.swi.hu pnzes szolgltat

    http://www.f2s.comhttp://www.swi.hu

  • 9

    3 A PHP4 teleptse (Win32 vltozat) A PHP teleptse opercis rendszerenknt s WEB szerverenknt ms s ms. A teleptsrl tovbbi informci a http://hu.php.net s a http://www.php4win.de oldalakon tallhat. A PHP csomagot letltve kapunk egy tmrtett llomnyt, amelyet kibontva az albbi knyvtrstruktrt kapjuk.

    3.1 Knyvtrak browscap: A browscap.ini file-t tartalmazza. Ez a file az egyes bngsztpusok adatait, tulajdonsgait

    tartalmazza.

    dlls: Itt olyan dll-ek vannak, amelyekre a php-nek s nhny kiterjesztsnek van szksge. Ezeket msold be a windows/system (Win9.x) vagy a winnt/system32 (Windows NT, Win2000) knyvtrba. Ha ezek lteznek mr az adott helyen, csak akkor rd fell a rgieket, ha a rendszer nem mkdik.

    extensions: A php kiterjesztseit tartalmaz knyvtr. keys: Az mcrypt-hez kulcsok. Az mcrypt mg nem mkdik. licenses: Tbb licence-et tartalmaz.

    mibs: Az SNMP hasznlata esetn szksges.

    pdf-related:Az itt lv fontok a PDF kiterjeszts hasznlathoz kellenek. Olvasd el az ezzel kapcsolatos licence-t.

    pear: The pear archive captured at the build date.

    readme: Readme file-ok klnbz tmkban

    sapi: Natv server api-kat tartalmaz. Az ajnlott a CGI verzi. Ezen kvl vlaszthatod mg ezeket: - php4-module a win32 Apache szerver sapi-ja, - ISAPI - az IIS4/5 sapi-ja, - NAPI - a netscape enterprise server s a php4 servlet verzija

    tests: A PHP mkdsnek tesztelshez hasznlhat program van itt.

    A PHP rtelmez ltalban a C:\PHP\PHP.EXE program, amelynek manapsg Windows NT/W2000/XP krnyezetben a \WINNT\SYSTEM32\PHP\PHP.EXE helyet ajnljk, de n nem ide teszem. Szerintem az utlagos frisstsek miatt clszer valamelyik meghajt gykerbl nyl knyvtrba tenni, pldul C:\PHP.

    A PHP konfigurlshoz szksg van egy PHP.INI nev file-ra, amelynek a Windows knyvtrba kell kerlnie. Ennek a file-nak a mintja php.ini-dist nven a PHP knyvtrban tallhat teleptskor. A megfelel sorokat trva van egy mkd konfigurcink. A ksbbiek sorn megnzzk, hogy milyen vltoztatsok szksgesek a PHP.INI-ben, a gyorsabb mkds rdekben.

    http://hu.php.nethttp://www.php4win.de

  • 10

    3.2 Telepts Mindenekeltt csomagold ki a PHP-t a C:\PHP knyvtrba, majd msold a php4ts.dll-t a C:\WINDOWS\SYSTEM vagy a C:\WINNT\SYSTEM32 knyvtrba!

    Msold a php.ini-dist file-t a rendszer gykrknyvtrba, ahol a Windows van, majd nevezd t PHP.INI-re. Szerkeszd t a PHP.INI-t, szksg szerint (a ksbbiekben bemutatjuk, hogy mit rdemes tszerkeszteni).

    3.2.1 Apache WEB szerver 1.3.xx vagy 2.0.xx 1. Teleptsd az Apache szervert. Ez a teleptt tartalmaz MSI file vagy az .EXE kiterjeszts file

    esetn az nkicsomagol file futtatst jelenti. 2. lltsd le az Apache Webszervert. 3. Az Apache szerver konfigurcis llomnya pldul az C:\Apache\conf\httpd.conf file.

    Szerkeszd meg ezt a file-t, az albbi mdon:

    Apache modul esetn:

    # Apache modul esetn LoadModule php4_module c:/php/sapi/php4apache.dll AddType application/x-httpd-php .php4

    Msold be a \Winnt\system32 vagy a \windows\system knyvtrba a php4ts.dll file-t

    CGI modul esetn:

    #for the cgi binris esetben ScriptAlias /php4/ "C:/php/" Action application/x-httpd-php4 "/php4/php.exe" AddType application/x-httpd-php4 .php

    Sajnos jelenleg az Apache modul nem fut a 2.0.xx-es verziban.

    4. Keresd meg a DirectoryIndex parancsot a konfigurcis llomnyban s egsztsd ki az albbi mdon

    DirectoryIndex index.html index.php index.php3 index.php4

    5. Indtsd jra az Apache szervert,

    6. rd meg a kedvenc ASCII editorod segtsgvel az albbi tartalm scriptet, mentsd el a szervered gykrknyvtrba, majd hvd meg a bngszben az albbi mdon:

    7. Prbld ki az albbi programocskt a Bngszddel a szervered root knyvtrbl:

    http://localhost/proba.php

    Ennek hatsra lefut a script s kirja a bngszdbe az ppen hasznlt php rendszer rengeteg paramtert.

    3.2.2 Internet Information Server 4 vagy 5 Indtsd el a Microsoft Management Console-t vagy az Internet Services Manager-t, a Control Panelrl. Kattints a Webszerverre s vlaszd a properties-t.

    Ha nem akarsz HTTP Authentication-t hasznlni a PHP-vel, akkor tlpheted ezt a lpst. Az ISAPI Filters (ISAPI szrk) alatt add hozz az j ISAPI szrt. Hasznld a PHP nevet a szr nevnek, majd keresd meg az php4isapi.dll-t, a C:\PHP\sapi\php4isapi.dll tvonalon.

    http://localhost/proba.php

  • 11

    A Home Directory alatt, kattints a Configuration (Konfigurci) gombra. j bejegyzst kell felvenni, az Application Mapping-be (Alkalmazsok Hozzrendelse). Hasznld a C:\php\sapi\php4isapi.dll-t s lltsd Executable-re (Futtathat), .php legyen a kiterjeszts, Method exclusions-nl lltsd be az engine checkbox-ot. lltsd le az IIS-t.

    Indtsd jra. az IIS-t rd meg a kedvenc ASCII editorod segtsgvel az albbi tartalm scriptet, mentsd el a szervered gykrknyvtrba, majd hvd meg a bngszben az albbi mdon:

    localhost/s prbld ki az albbi programocskt a Bngszddel a szervered root knyvtrbl:

    http://localhost/proba.php

    Ennek hatsra lefut a script s kirja a bngszdbe az ppen hasznlt php rendszer rengeteg paramtert.

    3.2.3 Personal Web Server 4 vagy jabb (Win98) Szerkeszd meg a csomagban lv PWS-php4isapi.reg (ISAPI interface) file-t vagy a PWS-php4cgi.reg (CGI interface) file-t, hogy arra knyvtrra mutasson, ahol a php4isapi.dll / php.exe tallhat. Pl.

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\ScriptMap]".php"="C:\\PHP\\php4isapi.dll"

    A PWS Manager-ben jobb egrrel kattintva, a megfelel knyvtrhoz add hozz a PHP support-ot (tmogats), vlaszd a Properties-t (Tulajdonsgok). lltsd be az 'Execute' vgrehajthat tulajdonsgot.

    3.2.4 Szerver nlkli hasznlat: Bontsd ki a C:\PHP knyvtrba a csomagot.

    Az albbi batch file-t ksztsd el, a megfelel tvonalakkal

    C:\php\php.exe %1 >%Temp%\phptemp.htm C:\Progra~1\Intern~1\iexplore %Temp%\phptemp.htm

    A batch file-t paramtere a php file legyen. A msodik sorba az ltalad hasznlt bngsz elrst kell berni rd meg a kedvenc ASCII editorod segtsgvel az albbi tartalm scriptet, mentsd el a szervered gykrknyvtrba, majd hvd meg a bngszben az albbi mdon:

    Hvd meg a megrt batch file-t az albbi mdon:

    Test.bat proba.php

    Ennek hatsra lefut a script s kirja a bngszdbe az ppen hasznlt php rendszer rengeteg paramtert. A CGI verzi stabilabb a Windows rendszerekben, az ISAPI verzik alkalmanknt sszednthetik a rendszert.

    http://localhost/proba.php

  • 12

    4 Eszkzk a PHP hasznlathoz Felmerl a krds, hogy mi kellhet a PHP hasznlathoz a fentieken kvl. A vrakozssal ellenttben nem sok, de azrt itt sszefoglalom a lehetsgeket: Kell egy ASCII szvegszerkeszt, kezdetben j a NOTEPAD.EXE a Windowsbl is. Ha ennl komolyabbra vgysz, akkor vlaszd mondjuk az EditPlus nev editort, amely a http://www.editplus.com cmrl tlthet le. Szmozza az oldalakat, s mg a szintaktikt is sznezi. Ezen kvl sok ms hasonl editor van forgalomban. A nagyok kzl tudnm ajnlani a Macromedia Dreamweaver Ultradev 4 vagy a Dreamweaver MX csomagot is.

    Nem rt, ha van egy j HTML editorod, mert a php oldalak jelents rszben azrt HTML kdbl is llnak. A freeware vagy shareware programok kztt jelents vlasztk van, pl. CoffeCup.

    Kell egy bngsz, ami adott az jabb Windows-okban Internet Explorer 4/5/6. Hasznlhatod a Netscape Navigator-t (www.netscape.com), illetve az Opera legjabb vltozatt is. Taln ez utols a legkisebb s leggyorsabb. Az opera letlthet a www.opera.com -rl. Szksged lesz egy j Help-re. n a http://hu.php.net/docs.php oldalrl a CHM (Windows-os Help file) vltozatot javaslom, de hasznlhatod a HTML verzikat is, s ha gyors Internet kapcsolatod van, akkor a Internetrl is lehet online mdon hasznlni ket.

    Nem rt, ha a HTTP-rl is van egy j Help-ed. A http://www.htmlhelp.com/ -rl letlthet tbbfle formban, kztk Windows-os Help formjban a HTML nyelv szintaktikja.

    Nem ide tartozik, de gyakori, hogy a php scripteket vegytjk Javascriptekkel is. Erre a clra tbb forrs ltezik, de sajnos magyar nyelven s Windows-os Help formjban nem tudok rla: Taln clszer a kvetkezt Web oldalt hasznlni http://weblabor.hu/leiras/javascr/ vagy megnzni az albbi oldalt: http://www.szily.sulinet.hu/jegyzetek

    Letlthet llapot vltozat az ftp://ftp.szily.sulinet.hu/jegyzetek/Javascript/ knyvtrban tallhat. Szksg lehet egy j HTML/ Javascript knyvre, pldul

    Bcz Pter Szsz Pter: A vilghl lehetsgei

    http://www.editplus.comhttp://www.netscape.comhttp://www.opera.comhttp://hu.php.net/docs.phphttp://www.htmlhelp.com/http://weblabor.hu/leiras/javascr/http://www.szily.sulinet.hu/jegyzetekftp://ftp.szily.sulinet.hu/jegyzetek/Javascript/

  • 13

    5 Egy HTML s egy PHP oldal szerkezete Mieltt tovbbmennnk nzzk, mit akarunk programozni? Hogyan is nz ki egy HTML oldal:

    Proba web oldal Hello World!!!

    Na ez nagy durrans volt. A bekezdses rsmdot az ttekinthetsgrt hasznlok, de mint ltjuk ksbb, ez rendkvl fontos! A bngszk a sor vge jelet, a szkzket s a tabultor jeleket kihagyjk, ezrt akr az egszet egy sorba is rhatnnk. A fenti HTML oldalt az albbi php scripttel tudjuk elllttatni:

    Proba web oldal

    Tisztn ltszik, hogy a program szerkezete nagy vonalakban ugyanaz, de azrt vannak klnbsgek. A PHP rtelmez a kd els sorait vltozatlanul tovbbtja a Web szervernek, de amikor a tag jelzi az rtelmeznek a PHP script vgt. Egy oldalon tbbszr is megnyithatjuk a scriptet s bezrhatjuk, azaz keverhetjk a php s a HTML kdot, st ha van mersznk, akkor beiktathatunk javascriptes rszeket is. Az albbi lehetsgeink vannak arra, hogy php scriptet helyezznk el egy oldalon:

    ..... php kd ...

    Ha berjuk a PHP.INI-ben, a short_open_tag= on sort, akkor ez a megolds is lehetsges:

    Ha berjuk a PHP.INI-be az asp_tags = on sort, akkor hasznlhat az albbi szintaktika is:

    Specilis lehetsg. Ha egy vltoz rtkt szeretnnk csak kiiratni s a short_open_tag = on sor be van rva, akkor egy vltoz rtkt gy adhatjuk t a web oldalnak legegyszerbben:

  • 14

    6 A PHP szintaktikja A PHP nyelv szintaktikja nagyon hasonlt a C nyelvre, ezrt sokak szmra nem lesz tlsgosan idegen. A php scriptben lv utastsok mindegyike utn ktelezen ki kell tenni a ; elvlasztjelet. Megjegyzs: Br a dokumentci azt mondja, hogy egy zr tag eltt nem kell kitenni, azrt azt tancsolom, hogy megszoks cljbl mindenhol alkalmazzuk

    A Megjegyzseinket szintn C jelleg szintaktikval ktflekppen tehetjk ki: // Az egysoros kommentek, a sor vgig tarthatnak, mint a C-ben

    # jellel, mint a Unixos shell programoknl /*...................................*/ A tbb soros kommentek

    Amint ltjuk a fentiek alapjn a kirand szveget jelek kz tehetjk, de a jelpros lehet ... is. A tovbbiakban nzzk meg, hogy milyen tpus rtkekkel dolgozhatunk.

  • 15

    7 Vltozk, adattpusok A PHP-ben hasznlhatunk vltozkat is. A vltoz neve eltt mindig $ jel tallhat.

    7.1 A vltoz neve A vltoz neve betvel vagy alhzs jellel kezddik s brmilyen alfanumerikus karakterrel, illetve 127...255 ASCII kd karakterrel folytatdhat. A kis s nagybetk klnbznek!

    7.2 A vltoz rtke Amikor elszr adunk rtket egy vltoznak, akkor jn ltre a vltoz.

    $a = 5; $todo = szveg;

    Ha egy vltoz rtkt azeltt vizsgljuk meg, mieltt rtket adunk neki, az rtke NULL lesz.

    Egy vltoz tpust tbbflekppen lehet meghatrozni. - rtket adunk neki, az rtk alapjn ltrejtt vltoznak a tpusa is egyrtelmv vlik. Belltjuk a tpust a settype (vltoznv, tpus) paranccsal, ahol a tpus az albbiak kzl vlaszthat: "integer", "double", "string", "array", "object"

    - Tpuskonverzit alkalmazunk. Az alkalmazhat tpusok ugyanazok, mint a fenti pldban, hozzvve, hogy az integer lehet int is, a double lehet float s real is.

    $a = (int) $b $c = (string) $d

    A vltozk rtkadsakor hasznlhatunk hasonl trkkket, mint a C-ben:

    $a = $b = 5

    A fenti kifejezst gy kell rtelmezni, mintha az albbiakat rtuk volna le:

    $b = 5; $a = b;

    A ksbbiekben foglalkozunk rszletesen az opertorokkal, amelyek egy vltoz rtkt meghatrozzk. A vltoznak brmilyen mdon rtket adtunk, akkor a tpust is meghatroztuk.

    7.3 A vltozk s kifejezsek tpusai A klnbz programozsi nyelveken megszokott tpusok a PHP-ban is megtallhatk:

    Numerikus tpusok: int, integer - egsz tpus rtke 32768-32767-ig tart

    Float, double, real Lebegpontos String A C-ben hasznlt string fogalomhoz hasonl, ... vagy .... jelek kz rt ASCII

    karaktersorozat. Array Tmb tpus. A tmb elemi tetszlegesen vegyesek lehetnek Egy tmb lehet egy, kt s tbb dimenzis tmb is. A tmb indexelse trtnhet hagyomnyosan 0-tl kezdd indexelssel, vagy lehet gynevezett asszociatv tmbt is ltrehozni, amikor a tmbindex valamifle string, vagy egyb rtk. Ebben a pldban egy dimenzis tmbt hozunk ltre.

    $array = array (1, "hello", 1, "world", "hello");

  • 16

    Az albbi pldban ktdimenzis asszociatv hozunk ltre.

    $fruits = array ( "fruits" => array ("a"=>"orange", "b"=>"banana", "c"=>"apple"), "numbers" => array (1, 2, 3, 4, 5, 6), "holes" => array ("first", 5 => "second", "third") );

    Object - Objektum. A tpus hasonlt a C++ objektumaira, de vannak lnyeges klnbsgek is.

    Egy objektum tpus vltoz ltrehozshoz elszr definilni kell magt az osztlyt a class kulcsszval, hasonlkppen, mint C++ -ban, majd a definci utn a new() opertorral ltre lehet hozni a megfelel vltozt. A class rszt kpezik vltozk s a classhoz tartoz fggvnyek is. A ksbbiekben rszletesen is szlunk az objektumokrl. Az albbiakban egy pldt ltunk.

    boolean Logikai rtkek. Kt rtk elre definilt, a TRUE s a FALSE

    null - Olyan vltozk, amelyeknek nincsen belltott rtkk

    Resource Erforrsok, mint pldul file vagy adatbziskezel mutatja. Valjban ezek a memria egyes helyre mutat pointerek!

    Unknown type - Ismeretlen tpusok

    Vltozk s kifejezsek visszatrsi rtknek tpust le lehet krdezni az albbi fggvnyekkel:

    int empty ($a) Megadja, hogy a vltoz res volt-e vagy nem.

    string gettype ($a) Visszaadja a vltoz tpust. A lehetsges tpusok az albbiak: "integer", "double", "string", "array", "object", "unknown type"

    void settype($var,$type) Belltja egy vltoz tpust. A lehetsges tpusok ($type) lehet: "integer", "double", "string", "array", "object"

    int intval($a,[$alap]) Visszaadja a vltoz rtkt egssz konvertlva a megadott alap szmrendszerben. Az alap default rtke 10.

    int is_array($a) Megadja, hogy a vltoz tmb vagy sem

    int is_bool($a) Megadja, hogy a vltoz logikai tpus vagy sem

    int is_float ($a) int is_double ($a)

    Megadja, hogy a vltoz lebegpontos-e, vagy sem.

  • 17

    int is_real ($a)

    int is_long ($a) int is_integer ($a) int is_int ($a)

    Megadja, hogy a vltoz egsz vagy sem.

    int is_numeric ($a) Megadja, hogy a vltoz numerikus, numerikus szveg vagy sem.

    int is_object ($a) Megadja, hogy a vltoz objektum vagy sem

    int is_resource ($a) Megadja, hogy a vltoz erforrs azonost vagy sem (pl. file handler)

    int is_string ($a) Megadja, hogy a vltoz string vagy sem.

    int isset (vltoz) Megadja, hogy be van-e lltva a vltoz. A visszatrsi rtke hamis, ha nem s Igaz, ha van rtke a vltoznak

    void print_r(kifejezs) Ember szmra olvashat informcit ad egy vltozrl.

    7.4 Elre definilt vltozk A vltozk kztt vannak olyanok, amelyek a rendszerben elre definiltak. Ezeknek a vltozknak a nevt s pillanatnyi rtkt a phpinfo() fggvny segtsgvel lehet kiratni. A vltozkra hivatkozva termszetesen az rtkeket fel tudjuk hasznlni, s azt tudjuk manipullni.

    Ezen vltozknak az rtkt a PHP.INI file-ban lehet belltani, nhny rtk a hasznlt WEB szervertl fgg, tovbbi rtkek pedig a futtat opercis rendszertl fggnek.

    A vltozk msik nagy csoportjai a rendszerben alkalmazott modulok rtkei. Nhny fontosabb vltoz csoport

    7.4.1 PHP Core A PHP rendszer alapvet vltozinak a listja A rendszer belltsait, s alaprtelmezett paramtereit tartalmaz vltozlista.

    7.4.2 Environment Az opercis rendszerrl, a krnyezeti belltsokrl, a WEB szerverrl, a bngszrl, az aktulisan meghvott laprl s a kliensrl minden lnyeges adatot felsorol, belertve az IP cmeket is.

    7.4.3 PHP Variables - A PHP vltozk listja Tovbbi gyakran hasznlt vltozk tmbjei

    a szerver ltal szolgltatott tmb s a

    $_SERVER[PATH]

    A krnyezeti vltozk

    $HTTP_ENV_VARS vagy

    $_ENV[valtnev]

    Formok kezelsnl hasznlhat vltozk listja

    a GET metdussal elkldtt vltozk listja s rtkei

    $_GET[valtnev]

    Post metdussal elkldtt vltozk listja s rtkei

    $_POST[valtnev]

  • 18

    Sessionokben hasznlt vltozk listja s rtkei

    $_SESSION[valtnev] $GLOBALS[valtnev ]

    a szupergloblis vltozk. Brhol elrhetk az rtkei

    $_COOKIE[valtnev]

    A PHP 4.1.0-tl ez a szupergloblis tmb is ltezik

    A HTTP protokollban definilt tovbbi vltozk. Ezek kzl a vltozk kzl nhny megtallhat a krnyezeti vltozk kztt is.

    A szerver IP cme

    Echo $REMOTE_ADDR

    a szerver neve

    $REMOTE_HOST

    a lekrt oldal azonostja

    $HTTP_REFERER

    a szerverhez kapcsold bngsz fajtja, az opercis rendszer fajtja

    $HTTP_USER_AGENT

    a WEB oldalnak tadott paramtersztring (a.php?A=proba)

    $QUERY_STRING

    Az aktulisan futtatott PHP oldal azonostja:

    $_SERVER["PATH_TRANSLATED"]

    A szerveren lv WEB szerver gykrknyvtra

    $_SERVER["DOCUMENT_ROOT"]

    Az albbiakban egy pldt mutatok be a fenti vltozk hasznlatbl:

    A pr sort beszrva egy script elejre ellltja konstans formban az aktulisan fut script elrsi tvonalt, tovbb a WEB szerver dokumentumainak elrsi tvonalt.

    $path=dirname($_SERVER["PATH_TRANSLATED"]); DEFINE("PATH",$path); DEFINE("DOCROOT", $_SERVER["DOCUMENT_ROOT"]);

    7.5 Konstansok A PHP-ben vannak elre definilt konstansok, tovbb mi is definilhatunk a

    define(nev, rtk) parancs segtsgvel. Az elre definilt konstansok kzl nhny:

    _FILE_ az ppen futtatott file neve _LINE_ az ppen fut programsor

    PHP_VERSION a futtatott rendszer verziszma PHP_OS a futtat opercis rendszer

    TRUE, FALSE logikai rtkek

  • 19

    8 Alapvet utastsok Aki a Pascal nyelven nevelkedett megszokta, hogy a definicis s a vgrehajthat utastsoknak kttt sorrendje van. A C nyelv s tbbek kztt a PHP tartalmaz elrsokat az utastsok sorrendjre, de azok nem annyira ktttek, ezrt aztn nagyon knny ttekinthetetlen s rosszul mkd programot rni bennk. Ahhoz, hogy gyorsan tudjunk egy programot rni, ismertetnk nhny utastst.

    8.1 Echo A PHP egyik leggyakrabban hasznlt utastsa az echo. Segtsgvel a bngszbe ki lehet rni a program futsnak eredmnyt. A kirats sorn gondolnunk kell arra, hogy az eredmny egy HTML kd mindig, amit majd a bngsz tovbb rtelmez. Az egyms utn r echo parancsok az eredmnyt egyms utn rjk ki a kimenetre, pozicionls, visszalps a szvegben nem lehetsges. Ha a kirs utn j sorban szeretnnk kezdeni a kirst, akkor a HTML szerint egy tag-et (soremels) vagy kell kirni. Az albbiakban tbb soros kirst alkalmazunk:

    A numerikus eredmnyek kirsra is hasznlhatjuk ezt az utastst, azonban formtumozni nem tudjuk a kimenetet gy.

    Tovbbi problma, hogy mi van akkor, ha numerikus informcit s string-et akarunk egy szvegben kirni. A feladat megoldshoz ugyanazt kell hasznlnunk, mint amikor kt string-et akarunk sszefzve kirni.

    A fenti pldban az echo parancs az sszeads mvelett string-g konvertlta s gy ratta ki. A konverzi teljesen automatikus. Tovbbi rdekes lehetsg, amikor egy string-ben szeretnnk kiratni egy vltoz rtkt:

    Amint ltjuk, a korbbi megfontolsok alapjn a soremelst a HTML szerint kell hasznlnunk. Az albbiakban nhny gyakran hasznlt tag-et runk le. A hasznlhat tag-ek trt egy HTML kdolssal foglalkoz knyvbl, jegyzetbl vagy Internet helyrl meg lehet tudni. A kpernyn val soremelsre a tag szolgl. Vzszintes vonal rsra Paragrafus eleje, vge: .... Vastag bet ....

  • 20

    Dlt bet .... Tblzat ltrehozsraLaz albbi plda egy soros, kt oszlopos tblzatot hoz ltre)

    els oszlop masodik oszlop

    Stb....

    Mivel a fenti TAG-ek sztringek, ezrt clszeren az echo paranccsal kell kiiratnunk ket. Az echo egy nyelvi elem s nem fggvny, azaz valami olyasmi, mintha C-ben egy fggvnymakrt hoznnk ltre. ppen ezrt bonyolultabb kifejezsek kiiratshoz alkalmatlan! Ha az adatokat formzottan szeretnnk kirni, akkor a printf parancsot kell hasznlni

    8.2 Formzott kirs print() Ugyanaz, mint az Echo, csak a szintaktika kiss ms.

    printf() kiirats formzottan sprintf() formzott sztringet ad vissza az albbi szintaktika szerint:

    string sprintf (string formtum [, mixed paramterek...]) A fromtum szerint megadott karaktersorozattal tr vissza. A formtumkarakterek lnyegben a C-ben megszokott formtumkarakterek. A formtumstring tbb direktvt tartalmazhat. A % string vezeti be a direktvkat, majd utna kvetkeznek a formz karakterek. Ezeken kvl minden karakter megjelenik a kimeneten. A kimenet konverzis parancsait a printf() s az sprintf() parancsban ugyangy lehet hasznlni. A konverzis parancssorozat az albbi parancsokat tartalmazza: Opcionlis kitlt karakter. Ezzel lehet a stringet megfelel mretre kitlteni. Default rtke a szkz. Ezen kvl lehet a 0, vagy egyb karakter.

    Igazts karakter. Az eredmny balra vagy jobbra igaztott lesz. A default a jobbraigazts; a karakter igaztja balra.

    Szlessg meghatroz. Megmondja, hogy minimum hny karakter legyen az eredmnyben. A tizedes jegyek szma. Csak a double formtum esetn hatsos. (A szmformtumokat number_format() fggvnnyel tudjuk mg jl kezelni.) A tpusmeghatroz megmondja, hogy milyen tpus adatokat kell kezelnie. Lehetsgek:

    % - a % jel.

    b az argmentum integer, s binris szmknt jelentjk meg

    c az argumentum integer, ASCII kdknt jelentjk meg.

    d az argumentum integer, decimlis szmknt jelentjk meg.

    f - the argumentum double s lebegpontos szmknt jelentjk meg.

    o - az argumentum integer, s oktlis szmknt jelentjk meg.

    s az argumentum string s gy is jelentjk meg.

  • 21

    x - az argumentum integer s hexadecimlis szmknt jelentjk meg (kisbetvel)

    X - az argumentum integer s hexadecimlis szmknt jelentjk meg (nagybetvel)

    $isodate = sprintf ("%04d-%02d-%02d", $ev, $ho, $nap); $money1 = 68.75; $money2 = 54.35; $money = $money1 + $money2; // Az echo $money kimenete "123.1" lesz $formatted = sprintf ("%01.2f", $money); // Az echo $formatted kimenete "123.10" echo $money; echo $formatted;

    8.3 A kiirats gyakorlsa 1. rasd ki PHP programmal egy ltalad ismert tetszleges vers els ngy sort, soronknt! 2. rasd ki egy tetszleges dalszveget egy tblzatba, versszakonknt egy- egy oszlopba! 3. rasd ki egyms utn a 1-tl 20-ig a ngyzetszmokat jobbra igaztval!

  • 22

    9 Opertorok (mveletek) A kvetkezkben megismerjk, hogy milyen mveleteket vgezhetnk a klnbz adattpusokkal.

    9.1 Stringek kztti mveletek Stringek sszefzse: .

    $a = alma.krte ; echo $a; //eredmnye almakrte lesz

    Stringek hozzadsa meglv sztringhez: .=

    $a = meleg; $a .= vz; $echo $a; // eredmny: melegvz

    9.2 Aritmetikai mveletek A numerikus rtkek sszeadsra ugyanolyan opertorokat hasznlunk, mint ms nyelvekben.

    echo $a + $b; //$a s $b sszege echo $a - $b; //$a s $b klnbsge echo $a * $b; //$a s $b szorzata echo $a / $b; //$a s $b hnyadosa (egsz, ha $a s $b egszek s a hnyados egsz) echo $a % $b; //Modulus $a / $b maradka

    9.3 Hozzrendels, rtkads Az opertor az "=". Ez ugyanazt jelenti, mint Pascalban a := vagy C-ben az =. A bal oldal rtke legyen az, ami a jobb oldal. A hozzrendel kifejezsnek az rtke a bal oldalhoz rendelt rtk.

    $a = ($b = 4) + 5; // $a most 9, s $b 4

    9.4 Nvel/cskkent opertorok A PHP tmogatja a C-ben megismert inkrementl s dekrementl opertorokat. Az albbiakban megismerjk azokat, majd pldt ltunk rjuk: Amikor az opertor a vltoz eltt van, akkor a kirtkels sorn elszr nvekszik a vltoz rtke, majd rtkeli ki a rendszer, mg a vltoz mgtti opertor esetn elszr kirtkeli a vltozt a rendszer, majd nveli vagy cskkenti az rtkt!

    Itt egy msik pldaprogram:

  • 23

    echo "Predekrementls"; $a = 5; echo "4-nek kell lennie: " . --$a . "\n"; echo "4-nek kell lennie: " . $a . "\n"; ?>

    9.5 Logikai opertorok A logikai mveletek minden programozsi nyelvben hasonlan nznek ki. Az albbi lehetsgek vannak. A PHP-ben az igaz rtket mindig az 1 s a hamis rtket a 0 hordozza. Ennek a tudsnak a birtokban ugyanakkor nem clszer a 0 s 1 rtkeket numerikusan hasznlni.

    9.6 sszehasonlt opertorok Az sszehasonlt opertorok, mint nevk is sugallja, kt rtk sszehasonltsra szolglnak. Az eredmny igaz, vagy hamis lehet!

    Echo $a == $b; //Egyenl Igaz, ha $a s $b rtke egyenl

    Van egy feltteles opertor is, a "?:" (ternlis) opertor, ami gy mukdik, mint a C-ben s sok ms nyelvben.

    (kif1) ? (kif2) : (kif3);

    A kifejezs kif2-t rtkeli ki, ha kif1 igaznak bizonyul, s kif3-at, ha kif1 hamis.

    9.7 Bitorientlt opertorok A bitorientlt opertorok teszik lehetv, hogy egy egsz rtk bizonyos bitjeit belltsuk, vagy kimaszkoljuk.

  • 24

    // [egsz!]osztst jelent. Mivel a legfels bit az eljelbit, negatv szm // jobbra tolsa fura eredmnyre vezet!) ?>

    9.8 Hibakezel opertorok A PHP egy hibakezel opertort tmogat, az at (kukac) jelet (@). Ha egy PHP kifejezs el rod, a kifejezs ltal esetlegesen generlt hibazenete(ke)t figyelmen kvl hagyja a rendszer.

    Ha a track_errors szolgltats be van kapcsolva, brmilyen a kifejezs ltal generlt hibazenet a $php_errormsg globlis vltozba kerl trolsra. Ez a vltoz minden hiba esetn fellrdik, ezrt ellenrizd minl hamarabb a kifejezst kveten ha hasznlhat informcit szeretnl kapni.

  • 25

    10 Vezrlsi szerkezetek A PHP-ben ugyangy, mint ms programozsi nyelvekben az utastsok vgrehajtsnak sorrendje alapveten fentrl lefel. Ily mdon csak szekvencilis programokat lehet rni, azonban rvid tanuks utn szksgess vlik elgazsokat s ciklusokat tartalmaz programok rsa is. A vezrlsi szerkezetek, mint mindig itt is a C-hez hasonlak. A program a klnbz irnyokba val tovbbhaladst ltalban egy kifejezs hatrozza meg. Ennek a kifejezsnek az rtke logikai alapveten, azonban a PHP hasonlkppen, mint a C nem klnbztet meg kln logikai rtkeket, hanem a 0 s a nem 0 rtkek jelentik azt. Ily mdon, ha egy numerikus kifejezs 0, akkor hamis, s ha nem 0, akkor igaznak tekinthet. Ha egy string kifejezs res, akkor hamis, ha van rtke, akkor igaz. Az olyan vltozk, amelyeket mg azeltt rtkelnk ki, hogy rtket kaptak volna (ez nem helyes), a NULL rtkkel brnak.

    10.1 Elgazsok Az els fontos lehetsg a felttelhez kttt vgrehajts. Ha brmelyik gon tbb utastst akarunk vgrehajtatni, akkor szintn a C szintaktika szerint { ...} jelprost kell hasznlnunk

    If( utasts) ...

    if(kifejezs) utasts;

    if(kifejezs) { utasts1; utasitas2; ..... } If .... else.... Ha a kifejezs igaz, akkor az utasts1 klnben az utsts2 hajtdik vgre. if( kifejezs ) utasts1; else utasts2;

    Ha a kifejezs igaz, akkor az utasts1 g hajtdik vgre, klnben a msik

    if( kifejezs ) { utasts1; utasitas2; ..... }else{ utasts3; utasitas4; ..... }

    If ... elseif ... else ...

    Ha kettnl tbb elgazst szeretnnk, akkor az albbi szintaktikval tudjuk a krdst megoldani:

    if( kifejezs1 ) utasts1; elseif(kifejezs2) utasts2; else utasts3;

    vagy

    if( kifejezs1 ) { utasts1; utasitas2; .....

  • 26

    }elseif( kifejezs2 ){ utasts3; utasitas4; ..... }else { utasts5; utasts6; ...... }

    Switch(kifejezs)

    A fenti esetben az if s az elseif utastsnl lv kifejezsek tetszlegesek lehetnek, s az gy felrt vezrlsi szerkezettel meglehetsen bonyolult elgazsokat lehet ltrehozni. Ezzel szemben ltalnosabb eset, amikor egy vltoz rtktl fggen akarunk tbb fle mveletet is vgrehajtani. Erre a clra alkalmas a C-bl jl ismert switch() fggvny, amely tbb irny elgazst hajt vgre. Az gak meghatrozsakor csak konstansokat hasznlhatunk, s az gra akkor addik t a vezrls, ha a switch fggvnyben lv vltoz rtke pontosan a konstans rtkvel egyezik meg. Amennyiben egy gra radtuk vezrlst, majd vgrehajtottuk az ott definilt utastsokat, a switch szerkezet vgre kell ugranunk a break utasts segtsgvel, mivel klnben rcsorognnk a kvetkez case felttelvizsglatokra. Nzzk a szintaktikjt:

    switch ($i) { case 0: print "i most 0"; break; case 1: print "i most 1"; break; case 2: print "i most 2"; break; default: print "i se nem 0, se nem 1, se nem 2"; }

    A fenti pldban az $i vltoz rtktl fggen lptnk valamelyik irnyba. Ha a vltoz rtke nem vette fel sem a 0, 1 vagy 2 rtkeket, akkor a default utni parancs hajtdik vgre. Gyakori eset, hogy amikor tbb klnbz esemnyt egyetlen vltoz klnbz rtkei alapjn akarsz vgrehajtatni, akkor hasznlod a switch utastst. Elfordulhat, hogy ugyanazt az esemnyt tbb rtk is jellheti, illetve tbb klnbz esemny van. Az albbi pldban a $jelz vltoz 0, 1, 2 rtke esetn az fv1() fggvny fut le, a 3-as rtkre az fv2() fggvny, egyb esetekben az fv3().

    switch ($i) { case 0: case 1: case 2: fv1($jelzo); break; case 3: fv2($jelzo); break; default: fv3($jelzo); }

    A fenti pldban az fv1, fv2, fv3 fggvnyek lehetnek akrmik!

  • 27

    10.2 Ciklusok Mint a C-ben, itt is hasonl ciklusszerkezetek lteznek.

    While (kifejezs)

    Itt a kifejezs a ciklus eltt rtkeldik ki, azaz a ciklus magja nem biztos, hogy vgrehajtdik. While (kifejezs) utasts; While (kifejezs) {

    Utasts1; Utasts2; ...

    } Plda:

    Do ..... While(kifejezs)

    A kifejezs a ciklus vgn rtkeldik ki, azaz a ciklus magja egyszer mindenkppen lefut. Do utasts while(kifejezs);

    Do{ Utasts1; Utasts2; ...

    }while(kifejezs); Plda:

    For(inicializl kifejezs; Benntmarads kifejezse; iterl kifejezs)

    A ciklus elejn egyszer fut le az inicializl kifejezs. ltalban ez egy vltoznak ad egy kezdrtket. Az ilyen vltozt ciklusvltoznak hvjuk.

    A Benntmarads kifejezse mindannyiszor a ciklus magjnak lefutsa eltt rtkeli ki a rendszer. Ha a kifejezs igaz rtket ad vissza, akkor lefut a ciklus magja, ha hamis rtket, akkor a ciklus utni els utastson folytatdik a futs. Ha a kifejezs helyre res rtket runk, akkor vgtelen ciklusba kerlhetnk, hacsak a ciklus belsejbl nem ugrunk ki a break utastssal.

    Az Iterl kifejezs felels azrt, hogy a ciklus valamikor befejezdjn. ltalban a ciklusvltoz rtkt nveljk vagy cskkentjk eggyel. For (init;bentmarads;itercio) utasts;

    For (init;bentmarads;itercio){ Utasts1; Utasts2 ...... }

    Plda:

  • 28

    Foreach ( tmb_kifejezs as $rtk) vagy Foreach ( tmb_kifejezs as $kulcs => $rtk)

    Ez a fajta ciklus a Perl nyelvbl kerlt t a PHP-be. Ezt a ciklust arra hasznlhatjuk, hogy egy ciklussal vgigmenjnk egy tmb minden egyes elemn. Rendkvl jl hasznlhat adatbzis lekrdezsek vagy egyb tmbben visszaadott adatok feldolgozsa sorn. Ktfle Foreach ($tmbvltoz as $ertek) utasts;

    Foreach ($tmbvltoz as $ertek){ Utasts1; Utasts2 ...

    } Plda:

    $tomb = array (1, 2, 3, 17); foreach ($tomb as $ertek) { print "Az aktulis rtke \$tomb-nek: $ertek.\n"; }

    A msodik formban a $kulcs vltoz megkapja a tmb ppen aktulis indext, ezltal egyes esetekben knnyebb a feldolgozsa Foreach($tmbvltoz as $kulcs => $ertek) utasts;

    Foreach ($tmbvltoz as $kulcs => $ertek){ Utasts1; Utasts2 ...

    } Plda:

    * harmadik foreach plda: kulcs s rtk */ $tomb = array ( "egy" => 1, "kett" => 2, "hrom" => 3, "tizenht" => 17 ); foreach ($tomb as $kulcs => $ertek) { print "\$tomb[$kulcs] => $ertek.\n"; }

    break vagy break n

    A break utasts arra szolgl, hogy segtsgvel egy struktrbl az adott helyen ki tudjunk ugrani. Ha utna runk egy szmot, akkor annak alapjn tbb egymsba gyazott struktrbl is ki tud ugrani:

    Pldnak okrt korbban a switch utastsnl mutattunk egy pldt a break hasznlatra, az opcionlis mdra pedig itt van egy plda:

    $i = 0; while ($i++) { switch ($i) { case 5: echo "5 esetn\n";

  • 29

    break 1; /* csak a switch-bl lp ki */ case 10: echo "10 esetn kilps\n"; break 2; /* a switch s a while befejezse */ default: break; } }

    continue vagy continue n

    Br programozsi mdszertanok kerlik a ciklusokbl val kiugrlst s a ciklusmagon belli itercit, azrt minden ltalnos nyelvben benne van a lehetsg, belertve a Pascalt s a C-t is. Ez az utasts akkor hasznlhat, ha a ciklus belsejben mr eldlnek a tovbbi itercira vonatkoz felttelek s nem akarjuk, hogy a ciklus magjnak tbbi rszt feleslegesen futtassuk. Ha a continue n formt hasznljuk, akkor tbb egymsba gyazott struktrt tudunk folytatni. Az albbi pldban 100 db vletlenszmot hozunk ltre a 0..4 egsz tartomnybl s az eloszlsukat vizsgljuk. A continue utastsok hatsra ha megvan az rtk, tovbbi feltteleket nem rtkel ki a program, hanem rgtn iterlja a for ciklust.

  • 30

    10.4 PHP lapok beszrsa, makro-k hasznlata. Gyakran megfogalmazott feladat, hogy egy tbb lapbl ll PHP programban minden PHP oldal elejn fussanak le ugyanazok a belltsok, ugyanazok az inicializl paramterek, illetve ugyanazokat a fggvnyeket s lehetsgeket hasznljuk minden PHP scriptben. Valami olyasmire gondolok itt, mint Pascal-ban a unit fogalma vagy C-ben a header file-ok fogalma.

    Erre a clra kt parancs ll rendelkezsre, amelyeknek a mkdse nem pontosan ugyanaz, de nagyon hasonl. Mind a kt esetben arrl van sz, hogy a PHP script egy adott pontjn behvunk egy file-t, amelynek a kdja futsidben bekerl a PHP scriptbe, a szerver kirtkeli, s annak megfelelen jr el. A file tartalma teht a futs idejre gy vlik a PHP script rszv, mintha eleve abba bertuk volna.

    Mivel a Webszerver kezdi a krdses include file-t feldolgozni, ezrt ilyenkor HTML mdba kerl a szerver, gy a PHP kd feldolgozshoz az include file elejn PHP nyit tag-et kell elhelyezni s a vgn zrtag-et. ()

    Include ()

    Az include hasznlata esetn a megadott file mindannyiszor kirtkeldik, ahnyszor a vezrls az include-ra kerl. Ennek eredmnyeknt, ha egy ciklus belsejben megfelelen helyezzk el a file-t, akkor a ciklus rtktl fggen mindig ms s ms file-t szerkesztnk be, mint az albbi pldban lthatjuk:

    $fileok = array ('elso.php', 'masodik.php', 'harmadik.php'); for ($i = 0; $i < count($fileok); $i++) { include $files[$i]; }

    require()

    A require parancs akkor is beolvassa a clfile-t, ha soha nem hajtdik vgre a krdses sor a f file-ban, s ha ciklusban helyezzk el a krdses sort, akkor is csak egyszer kerl be.

    A fentiek miatt require parancsot csak konstans file-nevekkel szabad hasznlni.

    include_once()

    Az utasts hasonlt az include() utastsra, azzal a klnbsggel, hogy csak egyszer kerl bele a futskor a krdses file. Ez azrt fontos, mert ha az include() utastssal tbbszr is meghvjuk futs kzben ugyanazt a file-t, akkor a benne lv globlis vltozk s fggvnyek tbbszr kerlnek a kdba, ami miatt a futs hibazenettel lell, hiszen ugyanaz az azonost ms s mst jell. Az include_once() segtsgvel ezt a hibaforrst kikszblhetjk.

    require_once()

    Az utasts hasonlan az include_once() utastshoz csak egyszer hvja be a krdses file-t futs kzben, gy a fggvnyek s globlisvltozk jradefinilsa krli problmk kikszblhetk. Egybknt a require() utastssal megegyez a szerepe s mkdse.

  • 31

    10.5 Tvoli file-ok hvsa A fenti kt utasts include s require alkalmas arra, hogy a PHP megfelel konfigurlsa esetn tvoli file-okat is elrjnk, akr msik Web szerveren is. Ehhez az "URL fopen wrapper"-eket kell bekapcsolni, a PHP4.0.3-tl kezdden az allow_url_fopen php.ini belltsval. Ez a lehetsg Windows rendszereken nem mkdik.

    Ennek a tulajdonsgnak persze vannak veszlyei is. Ha egy ilyen tvoli hvs sorn olyan lapot hvunk meg, aminek a tartalmra nincsen hatsunk, akkor az include-olt file tartalma lehet olyan, hogy a mi rendszernkre veszlyeket hordoz. A tvoli helyen megfelelen elksztett lap email-ben elkldheti az azonostkat s egyb olyan adatokat, amelyeket nem szeretnnk nyilvnossgra hozni, ezrt ezzel a lehetsggel vatosan kell bnni.

    10.6 Pldaprogramok felttelekkel, ciklusokkal 1. rj programot, amely kirja az ttel s a httel oszthat szmokat s ezen szmok sszegt! 2. rj egy programot, amely az eraszthotenszi szita vagy ms mdszer segtsgvel kirja a

    prmszmokat 1-tl n-ig! 3. Kszts programot, amely sszefsli $a, $b rendezett tmbk tartalmt, majd az tetszets

    formban kirja a kpernyre! 4. rj programokat, az include s require parancsok segtsgvel, amely teszteli egy rendezsi

    algoritmus sebessgt, mivel ugyanazokat az include-olt tmbket rendezi sorba. Az albbi feladatok a Programozsi ttelek s Adatszerkezetek cm jegyzetembl szrmaznak

    Feladatok: Egy repl indul az egyik kontinensrl a msikra, s repls kzben rendszeresen mri az alatta lv felszn tengerszint feletti magassgt. A mrt rtk nulla ekkor tenger felett repl vagy pozitv ekkor szrazfld felett repl. Ksztsnk olyan programot, amelyik a kvetkezkre kpes:

    Szimullja a mrseket vletlenszeren, figyelve arra, hogy az els s az utols mrs szrazfld felett trtnt. Az eredmnyeket fjlba menti.

    Kirja a kpernyre az albbi krdsekre a vlaszokat: 1. Milyen tvol van egymstl a kt kontinens? 2. Hol vannak a szigetek partjai (eltte tenger, utna szrazfld vagy fordtva)? 3. Hny sziget van a kt kontinens kztt? 4. Hny hegycscsot tallt (A hegycscs az a hely, ami eltt s mgtt kisebb a tengerszint feletti magassg)? 5. t tud-e menni a kt kontinens kztt egy kajakos, ha egyszerre csak egy adott tvolsgot tud evezni, mert ha

    tbbet evez, akkor elpusztul? 6. Mekkora a szigetek tlagos tvolsga? 7. Van-e leszllplya valamelyik szigeten (olyan rsz, amely vzszintes legalbb kt mrs tvolsgig) 8. Hny darab apr sziget van (maximum 3 mrshosszsg)? 9. Szeretnk alfldn lni. Van-e olyan rsz, amely sk vidk, elg nagy s alfld? Keressk meg ezt a helyet! 10. Hol tallhat a leghosszabb sziget kezdpontja?

    - A fenti krdsekre vlaszt ad gyis, hogy vletlen-szl gtolja, vagy segti a replgp tjt - Tltsnk fel adatokkal egy kt-dimenzis tmbt! rjunk programot, amely kirja a legnagyobb elemet

    tartalmaz sor szmt!

  • 32

    11 Sajt fggvnyek, vltozk lettartama s lthatsga Eddig sok sz esett a vltozkrl s esetenknt a fggvnyekrl is, azonban az eddigiek alapjn azt gondoln az ember, hogy csak ilyen egyszer programok rhatk PHP-ben. Az igazsg az, hogy PHP-ben csak a futsi id s a futtat rendszer memrija szab hatrt az alkalmazott program bonyolultsgnak.

    11.1 Fggvnyek A PHP-ban is hasznlhatunk programstruktrkat, programszegmenseket. Mr Pascal-bl vagy C-bl is jl ismerhetjk az alapvet kt eljrstpust, amit Pascalban Procedure illetve Function nvvel illetnk, C-ben pedig tpus nlkli illetve tpusos function-nak mondunk. Mind a kt nyelven a klnbsg az, hogy ad-e vissza a krdses eljrstpus rtket, vagy nem.

    A PHP-ben csakgy, mint a C-ben ktfle eljrstpust hasznlhatunk. A szintaktika a kvetkez: Ez az eljrstpus nem ad vissza rtket. function fggvny_nv(paramterlista) { A fggvny trzse; } Ez az eljrstpus a definiltnak megfelel tpus rtket ad vissza: function fggvny_nv(paramterlista) {

    A fggvny trzse; return rtk;

    } Lthat, hogy a visszatrsi rtk lte vagy nem lte a programoztl fgg, ezrt egyes esetekben clszer a visszatrsi rtk tpust megllaptani ahhoz, hogy van-e egyltaln visszatrsi rtk.

    PHP3-ban a definilt fggvnynek mindig a fggvny hvsa eltti ponton kell lennie, vagyis azokat a fggvnyeket, amelyeket hasznlni akarunk a PHP program elejre kell tennnk. A PHP4ben ez a megszorts megsznt, ugyanakkor clszer magadat ehhez a szokshoz tartani. A PHP nem tmogatja a fggvnyek polimorfizmust, a fggvnyeket nem tudod undefinilni vagy jradefinilni a mr definilt fggvnyeket. Az objektum orientltsg ennek megfelelen nem teljes a PHP-ben.

    A fggvny meghvsa esetn paramtereket adhatunk t a hvott fggvnynek. Ennek rszleteit a kvetkez szakaszban fogjuk trgyalni.

    Rekurzi lehetsges a fggvnyhvsoknl, de termszetesen arra kell vigyzni, hogy a rekurzi vget rjen. Az albbi kis plda az N faktorilis kiszmtst vgzi rekurzv mdon.

    11.2 Paramtertads Egy fggvny definilsakor meg kell hatrozni, hogy milyen paramtereket vegyen t. Ezt a paramterlistval tudjuk megtenni, amelyben az tvev vltozk neveit vesszvel elvlasztva fel kell sorolni.

  • 33

    A hvskor nem kell minden paramtert tadni. Ebben az esetben a krdses paramtereknek a fggvnyen bell nem lesz rtke. Az empty() fggvnnyel lehet megvizsglni, hogy egy paramter kapott-e rtket vagy sem.

    A PHP-ben ktfle paramtertads, ltezik

    rtk szerinti A hv kifejezs rtke behelyettestdik a meghvott fggvny paramterlistjban szerepl vltozba s a fggvnyen bell a paramter hasznlhat. Ez az alaprtelmezs.

    Cm szerinti Ez azt jelenti, hogy a vltoz memriacmt adjuk t a fggvnynek, amely a cm ismeretben tudja azt mdostani s a fggvnybl val visszatrskor a vltozsok megmaradnak. Ez utbbi esetben, ha cm szerint akarunk tvenni rtket egy fggvnnyel, akkor hasznlnunk kell a & opertort.

    Mg akkor is tadhatjuk cm szerint a vltozt, ha a fogad fggvnyt nem ksztettk fel a cm szerinti paramtertvtelre, az tadsnl hasznljuk a & opertort. Ez utbbi nem tlsgosan szp md, mivel egy fggvnyt valsznleg nem azrt hasznlunk rtk szerinti paramter tvtelre, hogy majd mshol mdostsunk a dolgon.

    A fggvnyek paramtereinek tvtele mg egy mdon megtrtnhet. A PHP tmogatja a paramterek kezdrtkadst. Ennek akkor van rtelme, ha a fggvny hvsakor nem adtunk t rtket a fggvnynek. Ilyenkor alaprtelmezett rtket kap az a paramter, amelyet a hv nem adott t. Termszetesen az t nem adott paramtereknek a helye az tadottak utn helyezkedjen el!

    Ha azt szeretnnk, hogy egy fggvny vltoz szm paramtert vegyen t s a fggvnyben meg akarjuk llaptani, hogy ppen most hny paramter van, akkor a kvetkez fggvnyeket hasznlni:

    func_get_args() Egy tmbben visszaadja az tadott paramterek listjt.

    Func_num_arg() Megadja a kapott fggvnyek szmt

  • 34

    func_get_arg(sorszm) Visszaadja a sorszm paramterrel megadott paramtert. Ha a sorszm nagyobb, mint a paramterlista utols elemnek indexe, akkor hibazenet jn (warning). A paramterlista indexe 0-val kezddik.

    Az albbi plda ezeket pldzza.

    11.3 Fggvnyek visszatrsi rtke Egy fggvny tetszleges tpust, mg tmbt, vagy vltozreferencit is vissza tud adni. Tbb rtk visszaadsra a tmbt hasznlhatjuk. Ha nem hasznljuk a return utastst, akkor az utols vgrehajtott kifejezs lesz a visszatrsi rtk.

    11.4 Vltozk lettartalma s lthatsga A PHP-ban nagyon egyszer szablyok vannak a vltozk lthatsgra s lettartamra vonatkozlag.

    lettartam

    A vltoz akkor jn ltre, amikor ltrehozzuk, rtket adunk neki. Egy vltoz megsemmisl, ha az unset(vltoznv) paranccsal felszabadtjuk a vltoz nevt (memriaterlett is), vagy vget r az adott PHP script oldal. Ez all kivtel, ha a vltozkat tadjuk egy msik PHP oldalnak a POST, GET metdussal, a cookie-k vagy sessionok hasznlatval.

    Egy PHP oldal elejn hasznlhatk a HTTP_ s az Environment vltozk, amikrl korbban esett sz. Hasznlhatk azok a vltozk, amelyeket egy msik php oldal, vagy ms HTML oldal kldtt, POST vagy GET metdussal. Hasznlhatk a Cookie-k s a Sessionok segtsgvel tvitt vltozk is.

    Ltezik az gynevezett a $GLOBALS tmb, amelynek tartalma a PHP oldal minden helyrl lthat.

  • 35

    Ltezik-e a vltoz

    Azt, hogy egy vltoz ltezik-e az isset() fggvnnyel krdezhetjk le. Igazat ad vissza, ha a vltoz ltezik, az empty() fggvny pedig igazat ad vissza, ha a vltoz rtke 0, res, vagy nem ltezik!

    Lthatsg

    A PHP oldalon ltrejtt s a klnbz mdokon tvett vltozk globlisak, azaz attl a helytl kezdve lthatk mindenhonnan, azonban ha meghvunk egy fggvnyt, akkor abban a fggvnyben csak azok a vltozk lthatk, amelyeket a fggvnyben hoztunk ltre, vagy paramterknt adtunk t. Ha a fggvnybl kilpnk, akkor ezek a vltozk megsemmislnek kivve, ha nem cm szerinti paramtertads sorn jttek ltre. Azaz ezek a vltozk loklisak lesznek a fggvnyre nzve. Ha egy fggvnybl j fggvnyt hvunk, akkor abban nem lehet ltni a hv fggvny vltozit.

    A fentiek all az egyetlen kivtel, ha a fggvnyben hasznljuk a global parancsot, aminek segtsgvel importlhatjuk a script globlis vltozit a fggvnybe.

    A msik lehetsg az, hogy hasznljuk a $GLOBALS[] asszociatv tmb rtkeit, amelyben minden bejegyzett globlis vltoz megtallhat.

    Ltrehozhatunk statikus vltozkat is, amelyek a Clipperben s ms hasonl nyelveken lteznek. Statikus vltoz egy fggvnyben jhet ltre. Amikor kilpnk a fggvnybl mr nem hasznlhatjuk ennek a vltoznak az rtkt, de ha jra meghvjuk a fggvnyt, nini mg megvan az elz rtke. J ott folytathatjuk, ahol abbahagytuk. Ennek nha van rtelme. Mindenesetre a hasznlathoz a fggvnyben a static kulcsszt kell hasznlni. Az albbi kis szsszenet egy ciklusbl meghvja jra meg jra a Test() fggvnyt s ennek sorn az $a vltoz tartalma folyamatosan n, noha mindig kilpnk a fggvnybl. Na ja, statikusnak deklarltuk! A statikus vltoznak kezdrtket adva, az csak egyszer fut le, amikor elszr meghvjuk a fggvnyt.

    Function Test () { static $a = 0; echo $a; $a++; } for ($i =0; $i< 10;$i++) {

  • 36

    Test(); Echo blablabla }

    11.5 Vltozk tadsa lapok kztt Gyakori krds a PHP-ben programozk kztt, hogyan tudnak rtkeket tadni a PHP lapok kztt, hiszen ha egy lap lefut, akkor eddig gy tudtuk, hogy a lapon keletkezet vltozk is megsznnek. Amikor elszr szembekerltem a problmval, akkor azt hittem, hogy a globlis vltozk oldjk meg a problmt. Sajnos a dolog nem ennyire egyszer, de nem is tlsgosan bonyolult. tadhatunk egyedi vltozkat s egy dimenzis tmbket is. Ngy lehetsgnk van erre.

    11.5.1 Header utasts A Header utastst csak akkor hasznlhatjuk, ha az adott oldalon mg semmifle kpernyre rs nem volt, azaz a keletkez HTML oldalnak mg nem kezdtk rni a BODY rszt. A header segtsgvel brmilyen header TAG-et kirathatunk a HTML oldalra. Az albbi pldban egy teljes header sorozatot runk ki a HTML oldalra

    header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header ("Pragma: no-cache"); // HTTP/1.0 header ("HTTP/1.0 404 Not Found");

    Itt egy hibakezelst runk ki, az URL nem tallhat. Akkor lehet ilyet tenni, ha pldul az Apache szervernk hibazeneteit tirnytjuk a sajt oldalainkra.

    header ("HTTP/1.0 404 Not Found");

    Bngsz tirnytsa. Itt adhatjuk meg az j oldalt. Ez a parancs nem csak a bngszt vgja t az j oldalra, hanem a szervernek is visszakld egy tirnyts sttusz zenetet is.

    header ("Location: http://www.php.net"); /* tirnytja a bngszt a PHP web oldalra */ exit; /* Ha nem megy az tirnyts, akkor az exit parancs biztosan kilp */

    11.5.2 GET metdus A GET metdust gy hasznlhatjuk, hogy meghvunk egy lapot az oldalunkrl egy msik lapot s az URL vgre paramterknt tadjuk a vltozkat, valahogy gy, ahogy a kvetkez pldkban ltjuk: Az els pldban igazbl nem is PHP a megolds, egyszeren a TAG-ben megadjuk, hogy melyik oldalt s menyi id mlva hvja meg az oldal. Ennek a megoldsnak hibja, hogy tulajdonkppen itt egy Javascriptet hasznlunk. A pldban 3 msodpercig vr a betltds utn a bngsz, majd a szerver tdobja az j oldallal s meghvja a lapot a user, pwd s a level vltozkkal.

    A kvetkez pldban hasonlt tesznk, de itt a HTML oldal fejlcben dolgozunk. Felhasznljuk a HTML meta tag-jt. Itt is 3 msodperc mlve hvja be a kvetkez oldalt s az elz oldalrl tadjuk az elz pldban ltott 3 vltoz pillanatnyi rtkt.

  • 37

    fggvnybe irnytom t, ahol a header segtsgvel tirnytom egy msik oldalra, tadva neki a megfelel vltozkat.

    function sorry($msg,$from=1,$glob="") { header("Location: sorryuser.php?from=$from&msg=$msg&glob=$glob"); } if(empty($name)) sorry("Hinyzik a nv adat! Ktelez kitlteni",1); if(empty($loginname)) sorry("Hinyz login nv! Ktelez kitlteni",1); if(empty($email)) sorry("Hiny E-mail cm! Ktelez kitlteni. Itt kapod meg a jelszt!",1);

    A fenti hrom lehetsg kzs hibja az, hogy az tirnytott lapok URL-je megjelenik a bngszben, azaz titkos informcit nem tudunk tadni, tovbb azok a bngszk, amelyek nem trik az tirnytst, nem fognak tovbbmenni.

    11.5.3 POST metdus A POST adattviteli metdust az rlapokkal kapcsolatban hasznlhatjuk legtermszetesebben. Itt egyelre csak annyit mondunk, hogy az rlapok olyan HTML kdok, amelyen keresztl a bngsz eltt l felhasznl berhat adatokat a HTML oldalon, az rlap SUBMIT gombjnak megnyomsra pedig az rlapon definilt mezk tartalmt, mint vltozneveket s vltoz tartalmakat elkldi a cl oldalnak a bngsz. Az rlap fejlcben meg kell adni a cl oldalt (kinek kldjk) s a megfdelel oldal, ha az olyan oldal, amit a szerver meg tud jelenteni betltdik a bngszbe.

    A PHP esetn a mdszer az, hogy az rlap kitltse utn a submit gomb megnyomsval elkldjk az eredmnyeket egy PHP oldalnak, amely betltdskor megkapja az elkldtt vltozkat, esetleg elvgzi azokat a ferladatokat, amelyekre rendeltetett, majd megjelent valami vlaszt. Ennl a mdszernl, az elkldtt rtkek nem lthat mdon kerlnek el a meghvott oldalhoz, teht ezzel a mdszerrel viszonylag knny vltozrtkeket tadni. Vigyzni kell azonban arra, hogy az adatbevitel alapveten string s ha nem gy hasznljuk fel azokat a bevitt stringeket, hogy eltte kiszrjk a ../../etc/ ... stb jelleg adatrokats nem figyelnk arra, hogy az eredmnyeket a lehet legtbb szempont szerint ellenrizzk, akkor a web site-unk feltrhet lehet.

    Az albbi pldban egy olyan HTML oldalt mutatok be, amely egy rlapot tartalmaz, a submit gomb megnyomsnak hatsra az oldal nmagnak (!) kldi el a vltozkat, majd a submit vltoz rtke alapjn egy elgazsra kerl a vgrehajts s az eredmnyt elkldi e-mailben egy megadott cmre. A lapon van egy kis Javascript bett is, amely az aktulis idpont beszrsra szolgl. Az rlapon tallhat olyan mez is, amelynek a tartalma hidden, azaz az rlapon nem jelenik meg.

    Munkalap function Kitolt() { var x=0; for (x=0;x

  • 38

    $mikor= date ('Y.M.d'); // if (!empty($pswd)) // egyszer (primitiv) password ellenrzs $jls = "_".$pswd."_"; // Lehetne biztonsgosabban is, de itt most ez nem szempont else $jls = "__"; // A munkalap elkldshez ki kell tlteni a partnercg nevt is. if(!empty($ceg)) { $jel= (strpos($jls, "xxxx") == 0) | empty($munkavegzo); if(!$jel) { // Itt lltjuk ssze az Email-t az tkldtt vltozk rtkbl. $uze =""; $uze= $uze ."Cg $ceg\n"; $uze= $uze ."Bejelent $bejelento\n"; $uze= $uze ."Bejelents idpontja $mikor\n"; $uze= $uze ."Hibajelensg $hibajelensg\n"; $uze= $uze ."A hiba oka $hibaok\n"; $uze= $uze ."Az elvgzett munka $elvegzett_munka\n"; $uze= $uze ."A munkavgzs alapja\n"; $uze= $uze ."- Garancilis $grancilis\n"; $uze= $uze ."- Rendszergazdai $rendszergazda\n"; $uze= $uze ."- Fizets $fizetos\n"; $uze= $uze ."- Kiszlls $kiszallas\n"; $uze= $uze ."- Mhelyben $muhely\n"; $uze= $uze ."- Rendszergazdai $rendszergazda\n\n"; $uze= $uze ."A szksges munkaid $munkaido\n"; if (!empty($munkadij)) { $uze= $uze ."Szmlzott munkadj $munkadij Ft + 25% FA\n\n"; } if (!empty($alkatreszek)) { $uze= $uze ."Beptett alkatrszek $alkatreszek\n"; $uze= $uze ."Alkatrszek ra $alkatreszar Ft + 25% FA\n\n"; } $uze= $uze ."\n"; $uze= $uze ."Munkavgz $munkavegzo\n"; $uze= $uze ."Dtum $datum\n"; $uze= $uze ."Igazols $igazolas\n\n"; $uze= $uze ."A munkalapot kld gp adatai\n"; $uze= $uze ."A gp IP cme ".$HTTP_ENV_VARS['HTTP_HOST']."\n"; $uze= $uze ."A gp neve ".$HTTP_ENV_VARS['REMOTE_HOST']."\n"; $uze= $uze ."A gpen fut bngsz ".$HTTP_USER_AGENT."\n"; mail("[email protected]","munkalap",$uze); if( Die("Az munkalapot elkldtk!")); } if ($jel) Alert ("Hinyosan tlttte ki a munkalapot"); } Jzsi Cgnek munkalapja A partnercg: EKFT GKFT MUBNT MTAI ABT BA..KI

    mailto:[email protected]

  • 39

    KPIM A bejelent neve: A bejelents idpontja:

  • 40

    Beptett alkatrszek Alkatrszek ra (nett) +25% FA A munkt vgz(k): Munkark Munkadj (netto) +25% FA Dtum: Digitlis alrs: Igazols: Utols mdosts: 2011. mrcius 12.

    11.5.4 $_SESSION vltozk A session vltozk olyan vltozk, amelyek megtartjk rtkeiket mikzben a felhasznl egyik oldalrl tlp a msikra anlkl, hogy a korbban ismertetett mdszerek valamelyikvel direkt t kellene adnunk az rtkeket a lapok kztt. Ez a lehetsg igazi globlis vltozkat enged meg s sokkal sszetettebb WEB-es programok ksztst teszi lehetv. Tbb lapbl ll site fejlesztse gyakorlatilag session vltozk nlkl nem megy. Amikor egy felhasznl belp egy WEB oldalra, akkor egy egyedi azonost keletkezik, az gynevezett session id (SID), amelyet vagy a bngszben trolunk gynevezett cookie (sti) formjban, vagy a szerver oldalon tartunk nyilvn. A sessionok tmogatjk korltlan mennyisg vltoz regisztrlst s a tartalmuk megtartst. Amikor a felhasznl elri a web oldalt, akkor a PHP automatikusan leellenrzi, hogy a megfelel session id vajon mr ltezik-e a szerveren. Ha ltezik a session id, akkor a session-hz tartoz elmentett rtkeket hozzrendeli a lekrt oldalhoz. A session id-t kt mdon lehet aktivizlni.

    1. Vagy a PHP.INI-ben belltjuk a session.auto_start =1 rtket

  • 41

    2. Minden oldal elejn hasznljuk a session_start() fggvnyt, vagy implicit mdon a session_register() fggvnyt. Amikor a ltogat elindt egy PHP-s lekrst, a PHP motor megnzi, hogy a fenti esetekben van-e a krshez hozzrendelve egy session id. Ha van, akkor a korbban elmentett krnyezetet hozzrendeli ehhez a krshez, azaz visszalltja a megfelel vltozkat. Minden regisztrlt vltozt elment a rendszer a krs befejezdsekor. Azok a regisztrlt vltozk, amelyek nem kaptak rtket, azaz nem definiltuk ket, a nem definiltak kz kerlnek. Ezek a vltozk csak akkor kerlnek a definiltak kz ksbb is, ha a user rtket ad neki.

    A track_vars s a register_globals konfigurcis paramterek (PHP.INI-ben) befolysoljk a session vltozk trolsnak s visszalltsnak mdjt.

    Ha a track_vars engedlyezve van s a register_globals tiltva, akkor csak a $HTTP_SESSION_VARS globlis asszociatv tmbt lehet session vltozknak belltani. A visszalltott vltozk is csak ebben a tmbben lesznek elrhetk. (Ebben az esetben egy visszaltott vltoz rtkt az albbi mdon tudjuk elrni:

    Ha a register_globals engedlyezett, akkor minden globlis vltozt session vltoznak tudunk elmenteni, s a session vltozk a kvetkez krs sorn automatikusan globlis vltozkk vlnak.

    Ha a track_vars s a register_globals is engedlyezettek a PHP.INI-ben, akkor mind a kt fenti mdszert hasznlhatjuk, azaz a $HTTP_SESSION_VARS elemei s a globlis vltozk ugyanazokat az rtkeket tartalmazzk majd.

    Hogyan kezelhetjk a session id-ket? Cookie - stikkel

    URL parameterekkel A session modul mind a kt vltozatot tmogatja. A cooki-k az optimlisak, viszont vannak olyan kliensek, akik nem tmogatjk a cooki-k elhelyezst a gpkn biztonsgi okokbl, radsul ilyenkor a bngsz s a szerver kztt vndorolnak adatok is. Ez biztonsgi problmkat vet fel. A msodik mdszer esetn a session id az URL rsze.

    A PHP kpes hajlkonyan kezelni a krdst, ha megfelelen fordtottuk (--enable-trans-sid kapcsolval) Ebben az esetben a relatv URI-k megvltoznak automatikusan s tartalmazni fogjk a session ID-t (=SID). Ms esetben hasznlhatjuk a SID konstanst, amely a session_name=session_ID vagy egy res stringet tartalmaz

    (pl. PHPSESSID=8e1f5ff69434aea7ecab51da33314b53&PHPSESSID=8e1f5ff69434aea7ecab51da33314b53 )

    Az albbi pldban bemutatjuk, hogyan lehet regisztrlni egy vltozt s egy URI-hoz hozzrendelni a session ID-t, felhasznlva a SID-et. Plda 3. Egy user bejelentkezseit szmolja le ez a plda

    Hello visitor, you have seen this page times.

  • 42

    # the is necessary to preserve the session id # in the case that the user has disabled cookies ?> To continue,

  • 43

    // Ez nem csinl semmit function ss_close() { return(true); } //Beolvassa a session file adatait egy vltozba, amit fel lehet dolgozni, function ss_read ($id) { global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id"; if ($fp = @fopen($sess_file, "r")) { $sess_data = fread($fp, filesize($sess_file)); return($sess_data); } else { return(""); } } // Kirja a session adatokat egy file-ba. function ss_write ($id, $sess_data) { global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id"; if ($fp = @fopen($sess_file, "w")) { return(fwrite($fp, $sess_data)); } else { return(false); } } // A session file-t trljk a sessionok trolsra szolgl knyvtrbl function ss_destroy ($id) { global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id"; return(@unlink($sess_file)); } /******************************************************** * Figyelem! Garbage collection rutint kell ide rni! * ********************************************************/ // Itt azt vizsgljuk meg, hogy az utols hozzfrs mikor zajlott le a file-on. function expirity($filename, $now, $maxlifetime) { $last = fileatime ($filename); return ($now - $last >= $maxlifetime); } function ss_gc ($maxlifetime) { global $sess_save_path, $sess_session_name; $aktdir = dirname($PATH_TRANSLATED); $now = time(); chdir($sess_save_path); $d=opendir($sess_save_path); while($filename=readdir($d)){ if ((substr($filename,0,4) == sess_) && (expirity($filename,$now,$maxlifetime) )) unlink($filename); } closedir($d); chdir($aktdir); return true; } session_set_save_handler ("ss_open", "ss_close", "ss_read", "ss_write", "ss_destroy", "ss_gc"); session_start(); ?>

    A korbbiak alapjn rthet lehet a plda. Taln az ss_gc() fggvny kicsit bonyolult. Az aktulis knyvtrt elmentjk, majd belpnk a session adatait trol helyre, ott megnyitva a knyvtrat

  • 44

    vgignzzk a file-ok neveit. A sess_ kezdet filenevek session file-okat takarnak, azoknak megnzzk s a jelenlegi idt s az utols hozzfrsnek idejt kivonva egymsbl megnzzk, hogy lejrt-e az lete.

  • 45

    Egy session kezel mkdse - plda A tovbbiakban megnzzk egy MySQL-es sessionkezel mkdst. A mkdshez szksg van az albbi adatbzis szerkezetre:

    CREATE TABLE sessions ( sesskey char(32) not null, exp int(11) unsigned not null, value text not null, PRIMARY KEY (sesskey) );

  • 46

    $qry = "DELETE FROM sessions WHERE sesskey = '$key'"; $qid = mysql_query($qry, $SESS_DBH); return $qid; } function sess_gc($maxlifetime) { global $SESS_DBH; $qry = "DELETE FROM sessions WHERE exp < " . time(); $qid = mysql_query($qry, $SESS_DBH); return mysql_affected_rows($SESS_DBH); } session_set_save_handler( "ss_open", "ss_close", "ss_read","ss_write","ss_destroy","ss_gc"); ?>

    A fenti kt esetben mindannyiszor hasonl paramterekkel kell meghvni a fggvnyeket: Ss_open(C:\TEMP,PHPSESSID) ezeket adja t a vltozknak

    The is not necessary, if --enable-trans-sid was used to compile PHP.

    A sessionkezelsi rendszer tbb olyan belltst figyelembe vesz, amelyek a PHP.INI-jben tallhatk.

    session.save_handler a session kezeljt lltja be. Default files. session.save_path meghatrozza a session file-ok trolsnak helyt. Ha a default filekezelt hasznlod, akkor a /tmp. Knyvtr lesz az. Windowsos rendszeren clszer a TEMP krnyezeti vltozt megadni, pldul c:\TEMP.

    session.name a session ltal hasznlt cookie nevet hatrozza meg. Default PHPSESSID. session.auto_start meghatrozza, hogy a session automatikusan induljon-e el, ha a PHP krs lefutott. Default 0 (nem indul el). session.cookie_lifetime meghatrozza, hogy a cookie hny msodpercig ljen a bngsz indulsa utn. A 0 azt jelenti, hogy, amg a bngsz fut. Default 0. session.serialize_handler defines the name of the handler which is used to serialize/deserialize data. Currently, a PHP internal format (name php) and WDDX is supported (name wddx). WDDX is only available, if PHP is compiled with WDDX support. Defaults to php. session.gc_probability meghatrozza, hogy a gc (garbage collection) szemtgyjt rutin milyen szzalkkal induljon el. Az elmlt sessionok file-jai a temp knyvtrban ott maradnak s ha egy j PHP krst kap a rendszer, akkor ennek a vltoznak az rtktl fggen statisztikai valsznsggel elindul a rgi session file-ok kitrlse. Ha az rtk kicsi, akkor sok session fle is felgylhet, hiszen ritkn fut le a szemtszeds, ha nagy, akkor gyakran fut az algoritmus, teht lassab lesz a kiszolgls. Default rtk 1, tesz krnyezetben 5 10.

    session.gc_maxlifetime specifies the number of seconds after which data will be seen as 'garbage' and cleaned up.

    session.referer_check determines whether session ids referred to by external sites will be eliminated. If session ids are propagated using the URL method, users not knowing about the impact might publish session ids. This can lead to security problems which this check tries to defeat. Defaults to 0. session.entropy_file gives a path to an external resource (file) which will be used as an additional entropy source in the session id creation process. Examples are /dev/random or /dev/urandom which are available on many Unix systems.

  • 47

    session.entropy_length specifies the number of bytes which will be read from the file specified above. Defaults to 0 (disabled). session.use_cookies specifies whether the module will use cookies to store the session id on the client side. Defaults to 1 (enabled). session.cookie_path specifies path to set in session_cookie. Defaults to /. session.cookie_domain specifies domain to set in session_cookie. Default is none at all. session.cache_limiter specifies cache control method to use for session pages (nocache/private/public). Defaults to nocache. session.cache_expire specifies time-to-live for cached session pages in minutes, this has no effect for nocache limiter. Defaults to 180. A PHP4 sessionkezelje session_start Session adatok inicializlsa session_destroy Session adatok megszntetse

    session_name Session nv lekrdezse, belltsa session_module_name Session kezel modul nevnek lekrdezse/belltsa

    session_save_path Session mentsi knyvtr lekr