You are on page 1of 195

Budapesti Mszaki s Gazdasgtudomnyi Egyetem

Villamosmrnki s Informatikai Kar


Automatizlsi s Alkalmazott Informatikai Tanszk

Egyszeren Web

Ksztette: Konzulens:
Kromesch Sndor (polgri szolglatos) Dr. Charaf Hassan

2003.
HTML (Hyper Text Markup Language) ........................................................................................................................ 7
A HTML dokumentumokrl ...................................................................................................................................... 7
Nhny szban a HTML alapvet szablyairl ......................................................................................................... 7
A HTML dokumentum elvi felptse ....................................................................................................................... 8
A HTML dokumentum fejlce................................................................................................................................... 8
A HTML dokumentum szvegtestnek felptse ..................................................................................................... 9
A HTML dokumentum cmszintjeinek felptse .................................................................................................... 10
Bekezdsek a HTML dokumentumban.................................................................................................................... 10
Kereszthivatkozsok HTML dokumentumok kztt ............................................................................................... 11
Karakterformtumok a HTML dokumentumban ..................................................................................................... 12
Kpek elhelyezse a HTML dokumentumban ......................................................................................................... 13
Klnbz listafomtumok a HTML dokumentumban ........................................................................................... 15
A HTML formtum tblzatai ................................................................................................................................. 17
A HTML dokumentumablak felosztsa ................................................................................................................... 20
Krdvek a HTML dokumentumban ...................................................................................................................... 21
A HTML dokumentum egyb elemei ...................................................................................................................... 23
A JavaScript hasznlata a HTML dokumentumban................................................................................................. 23
A HTML specilis karakterei................................................................................................................................... 24
Karaktertblk.......................................................................................................................................................... 27
Cascading Style Sheets (CSS)...................................................................................................................................... 27
Bevezets ................................................................................................................................................................. 27
A stluslap csatolsa ............................................................................................................................................. 28
Csportosts.......................................................................................................................................................... 28
rklds ............................................................................................................................................................. 29
A class szelektor................................................................................................................................................... 29
Megjegyzend, hogy szelektoronknt (HTML elemenknt) csak egy osztly definilhat! ............................... 30
Az ID szelektor .................................................................................................................................................... 30
sszekapcsolt szelektorok ................................................................................................................................... 30
Megjegyzsek....................................................................................................................................................... 30
Ltszlagos osztlyok s elemek.............................................................................................................................. 30
Ltszlagos osztlyok az lkapcsokban ............................................................................................................. 31
Tipografikai ltszlagos elemek........................................................................................................................... 31
A 'first-line' ltszlagos elem ............................................................................................................................... 32
A 'first-letter' ltszlagos elem ............................................................................................................................. 32
Ltszlagos elemek a szelektorokban .................................................................................................................. 33
Ltszlagos elemek tbbszrzse....................................................................................................................... 33
Rangsor .................................................................................................................................................................... 33
'important'............................................................................................................................................................. 34
A rangsor fellltsa ............................................................................................................................................. 34
Formzsmodell ....................................................................................................................................................... 35
Blokkszint elemek.............................................................................................................................................. 36
Fggleges formzs............................................................................................................................................ 38
Vzszintes formzs ............................................................................................................................................. 39
Listaelemek .......................................................................................................................................................... 39
Lebeg elemek ..................................................................................................................................................... 40
Soron belli elemek.............................................................................................................................................. 41
Helyettestett elemek............................................................................................................................................ 41
Sorok magassga.................................................................................................................................................. 42
A Vszon.............................................................................................................................................................. 42
CSS tulajdonsgok ................................................................................................................................................... 43
A tulajdonsg-rtk prok jellsi rendszere ....................................................................................................... 43
Font tulajdonsgok ............................................................................................................................................... 43
Szn- s httrtulajdonsgok ................................................................................................................................ 48
Szveg tulajdonsgok........................................................................................................................................... 51
Doboz-tulajdonsgok ........................................................................................................................................... 54
Osztlyoz tulajdonsgok .................................................................................................................................... 61
Egysgek .................................................................................................................................................................. 64
Hosszsg egysgek............................................................................................................................................. 64
Szzalkos egysgek ............................................................................................................................................ 65
Sznjellsek ........................................................................................................................................................ 65
URL...................................................................................................................................................................... 66
sszhang .................................................................................................................................................................. 66
Elre-kompatbilis elemzs ................................................................................................................................... 66
JavaScript..................................................................................................................................................................... 69
Mi is az a JavaScript?............................................................................................................................................... 69
JavaScript s a bngszk........................................................................................................................................ 69
JavaScript begyazsa a HTML dokumentumba ..................................................................................................... 70
Legfontosabb esemnyek ......................................................................................................................................... 71
Hasznljuk amit tudunk, 2. plda ............................................................................................................................. 71
Link a Script-re ........................................................................................................................................................ 71
Csoportostsunk, avagy a fggvnyek...................................................................................................................... 72
Objektumok, dokumentumok................................................................................................................................... 73
Ha hibztunk ............................................................................................................................................................ 74
Esemnyek ............................................................................................................................................................... 74
Vltoz kpek .......................................................................................................................................................... 75
Eltlttt kpek ........................................................................................................................................................ 76
Idztsek ................................................................................................................................................................. 76
Status sor.................................................................................................................................................................. 77
SWITCH hasznlat .................................................................................................................................................. 78
Ellenrzsek............................................................................................................................................................. 80
"res szveg"........................................................................................................................................................... 81
Az XML ....................................................................................................................................................................... 82
Bevezets ................................................................................................................................................................. 82
Az els XML dokumentumunk ltrehozsa............................................................................................................. 83
XML alkalmazsok .................................................................................................................................................. 84
Az XML adatfolyam felptse (XML fjl-ok)........................................................................................................ 86
Elemek (Elements) ............................................................................................................................................... 86
Megjegyzs .......................................................................................................................................................... 86
Tulajdonsgok (attributes) ................................................................................................................................... 86
Egyed hivatkozsok (entity references) ............................................................................................................... 87
Feldolgozsi utastsok (processing intructions).................................................................................................. 87
A CDATA szakaszok........................................................................................................................................... 87
Nvterek............................................................................................................................................................... 87
Az XML adatfolyam rvnyessgnek ellenrzse ................................................................................................. 89
Elem tpus deklarci (Element Type Declaration) ............................................................................................. 90
A tulajdonsglista (attributum lista) deklarcija................................................................................................. 90
Egyed deklarci (Entity declaration).................................................................................................................. 91
A VKONYV XML adatfolyam nyelvtani szablyai ............................................................................................ 92
Az XML adatfolyam megjelentse ......................................................................................................................... 92
A CSS................................................................................................................................................................... 93
Az XSL ................................................................................................................................................................ 93
Egy XML adatfolyam elemzse (Parse)................................................................................................................... 94
Egy DOM elemz mkdse ............................................................................................................................... 95
Egy SAX elemz mkdse................................................................................................................................. 96
ASP (Active Server Pages). ...................................................................................................................................... 97
Egy kis alapozs....................................................................................................................................................... 97
Mozgsba lendl a kd......................................................................................................................................... 98
ASP a lthatron....................................................................................................................................................... 98
Az ASP kdok begyazsa....................................................................................................................................... 99
Az ASP objektummodell........................................................................................................................................ 101
Egy HTTP vlasz a Response objektum ............................................................................................................. 102
A vlaszpuffer ........................................................................................................................................................ 102
HTTP fejlcek kldse........................................................................................................................................... 102
Tartalom s karakterkszlet.................................................................................................................................... 103
HTTP sttusz s tirnyts.................................................................................................................................... 104
Ha sokig tart az oldal ellltsa........................................................................................................................... 104
Gyorsttrak a cache.......................................................................................................................................... 105
HTTP krs a Request objektum......................................................................................................................... 105
Adatfeltlts a POST HTTP paranccsal................................................................................................................. 106
A HTTP tartalom kiolvassa.................................................................................................................................. 107
Cookie .................................................................................................................................................................... 108
Az IIS napljnnak rsa ........................................................................................................................................ 109
Felhasznlazonosts nvvel s jelszval ............................................................................................................. 109
A Request kollekcik ............................................................................................................................................. 110
Az ASP alkalmazs s munkamenet ...................................................................................................................... 111
Az ASP munkamenet ............................................................................................................................................. 111
A Session objektum ............................................................................................................................................... 112
A global.asa fjl ..................................................................................................................................................... 113
Az ASP alkalmazs ................................................................................................................................................ 114
Az alkalmazs vdelme...................................................................................................................................... 115
Az Application objektum ....................................................................................................................................... 115
A global.asa fjl mgegyszer ................................................................................................................................. 116
Objektumok s tpusknyvtrak............................................................................................................................. 117
A Server objektum ................................................................................................................................................. 118
Naplzs az esemnynaplba................................................................................................................................. 119
Specilis karakterek a HTML kdban.................................................................................................................... 120
rvztr tkrfrgp .......................................................................................................................................... 120
Tovbbi META elemek.......................................................................................................................................... 121
Kdtblk............................................................................................................................................................... 121
Az UTF-8 kdols.................................................................................................................................................. 122
Lokalizls ............................................................................................................................................................. 122
Hibakezels az ASP oldalban................................................................................................................................. 123
VBScipt rviden......................................................................................................................................................... 127
Adatpusok ............................................................................................................................................................. 127
Konstans definils ................................................................................................................................................ 127
VBScript opertorok: ............................................................................................................................................. 127
VBScript vltozk:................................................................................................................................................. 128
Vltoz deklarls:............................................................................................................................................. 128
Elgazsok ............................................................................................................................................................. 129
Ciklusok: ................................................................................................................................................................ 129
Elltesztel cilus amg igaz:............................................................................................................................... 129
Htultesztel ciklus amg igaz: .......................................................................................................................... 130
Elltesztel ciklus amg igaz nem lesz:.............................................................................................................. 130
Htultesztel ciklus amg igaz nem lesz: ........................................................................................................... 130
Kilps ciklusbl EXIT DO segtsgvel: ........................................................................................................... 130
FOR ciklus: ........................................................................................................................................................ 130
CGI............................................................................................................................................................................. 131
Perl ............................................................................................................................................................................. 134
Perl 5 nyelv rvid sszefoglalsa ........................................................................................................................... 134
Induls.................................................................................................................................................................... 135
Adatstruktrk........................................................................................................................................................ 135
Krnyezet............................................................................................................................................................... 136
Skalrok ................................................................................................................................................................. 136
Tmbk .................................................................................................................................................................. 137
Szintaxis ... utastsok ............................................................................................................................................ 137
Egyszer utasts................................................................................................................................................ 138
sszetett utasts ................................................................................................................................................ 138
Opertorok s precedencijuk ................................................................................................................................ 139
cmopertor ........................................................................................................................................................ 140
ismtls .............................................................................................................................................................. 140
konkatenc ....................................................................................................................................................... 140
file tesztels........................................................................................................................................................ 140
szveg sszehasonlts ....................................................................................................................................... 140
szm sszehasonlts.......................................................................................................................................... 140
I/O ...................................................................................................................................................................... 140
A szvegekhez mg jrul egypr "idzjel" opertor ........................................................................................ 140
Mintailleszts ......................................................................................................................................................... 141
Hasznlat............................................................................................................................................................ 141
Mdostk .......................................................................................................................................................... 141
Regular Expressions, regulris kifejezsek ........................................................................................................ 141
Az alapok ........................................................................................................................................................... 141
Karaktersorozatok .............................................................................................................................................. 142
Specilis karakterek ........................................................................................................................................... 142
Csoportosts...................................................................................................................................................... 143
Opertorok tlapolsa ............................................................................................................................................ 143
definilatlan........................................................................................................................................................ 144
TRUE ................................................................................................................................................................. 144
FALSE ............................................................................................................................................................... 144
Beptett fggvnyek ............................................................................................................................................. 144
nhny fggvny... ............................................................................................................................................. 144
Elre definilt vltozk .......................................................................................................................................... 147
Alprogramok rsa.................................................................................................................................................. 149
Alprogramok deklarlsa: .................................................................................................................................. 149
Alprogram hvsa:.............................................................................................................................................. 149
Nvtelen alprogram ltrehozsa:........................................................................................................................ 149
Nvtelen alprogramok definilt krnyezete ....................................................................................................... 149
Beptett fggvnyek tlapolsa......................................................................................................................... 150
Modulok................................................................................................................................................................. 150
package .............................................................................................................................................................. 150
Szimblumtbla ................................................................................................................................................. 150
Konstruktor, destruktor ...................................................................................................................................... 150
Bonyolultabb struktrk......................................................................................................................................... 151
Referenck ltrehozsa....................................................................................................................................... 151
Referencik hasznlata....................................................................................................................................... 151
Szimblikus hivatkozsok.................................................................................................................................. 152
OOP ....................................................................................................................................................................... 153
Amit a Perl objektumokrl tudni kell:................................................................................................................ 153
Objektum............................................................................................................................................................ 153
Osztly ............................................................................................................................................................... 153
Metdus.............................................................................................................................................................. 154
Destruktor .......................................................................................................................................................... 155
PHP ............................................................................................................................................................................ 155
A PHP rvid trtnete ............................................................................................................................................ 155
Alapok.................................................................................................................................................................... 156
Vltozk PHP-ban.................................................................................................................................................. 157
Tmbk a PHP-ban ............................................................................................................................................ 158
Vltozk hatskre................................................................................................................................................. 161
Konstansok............................................................................................................................................................. 163
Kommentek............................................................................................................................................................ 163
Opertorok ............................................................................................................................................................. 163
Opertorok precedencija................................................................................................................................... 163
Aritmetikai opertorok ....................................................................................................................................... 164
Hozzrendel opertorok ................................................................................................................................... 164
Bitorientlt opertorok ....................................................................................................................................... 165
sszehasonlt opertorok ................................................................................................................................. 165
Hibakezel opertorok ....................................................................................................................................... 166
Nvel/cskkent opertorok ............................................................................................................................ 167
Logikai opertorok ............................................................................................................................................. 167
String opertorok................................................................................................................................................ 167
Vezrlsi szerkezetek ............................................................................................................................................. 168
if ......................................................................................................................................................................... 168
else ..................................................................................................................................................................... 168
elseif................................................................................................................................................................... 168
Vezrlsi szerkezetek alternatv szintaxisa ........................................................................................................ 169
while................................................................................................................................................................... 169
do..while............................................................................................................................................................. 170
for....................................................................................................................................................................... 171
foreach................................................................................................................................................................ 172
break................................................................................................................................................................... 172
continue.............................................................................................................................................................. 173
switch ................................................................................................................................................................. 173
declare ................................................................................................................................................................ 175
Tick-ek ............................................................................................................................................................... 175
return .................................................................................................................................................................. 176
require().............................................................................................................................................................. 176
include() ............................................................................................................................................................. 176
require_once() .................................................................................................................................................... 178
include_once().................................................................................................................................................... 178
Fggvnyek............................................................................................................................................................ 179
Felhasznl ltal definilt fggvnyek............................................................................................................... 179
Fggvnyargumentumok.................................................................................................................................... 179
Referencia szerinti argumentumfeltlts............................................................................................................ 179
Argumentumok kezdrtkei ............................................................................................................................. 180
Vltoz hosszsg argumentumlista ................................................................................................................ 180
Visszatrsi rtkek............................................................................................................................................ 180
Fggvnyvltozk.............................................................................................................................................. 181
Fejezet. Osztlyok, objektumok ............................................................................................................................. 181
class.................................................................................................................................................................... 181
extends ............................................................................................................................................................... 183
Konstruktor ........................................................................................................................................................ 184
:: ......................................................................................................................................................................... 185
parent.................................................................................................................................................................. 186
Objektumok szerializcija, objektumok session-kben.................................................................................... 187
A specilis __sleep s __wakeup metdusok..................................................................................................... 188
Referencik a konstruktorban............................................................................................................................. 188
Referencik ............................................................................................................................................................ 189
Mik a referencik ............................................................................................................................................... 189
Mit lehet referencikkal tenni ............................................................................................................................ 189
Mit nem lehet referencikkal tenni..................................................................................................................... 190
Referenciaknti paramtertads........................................................................................................................ 190
Refencia visszatrsi-rtk................................................................................................................................. 191
Referencik megszntetse ................................................................................................................................ 191
A PHP ltal hasznlt referencik........................................................................................................................ 191
global referencik............................................................................................................................................... 191
$this.................................................................................................................................................................... 192
Hibakezels ............................................................................................................................................................ 192
Adatbzis kezels (MySQL fggvnyek)............................................................................................................... 194
HTML (Hyper Text Markup Language)

A HTML dokumentumokrl
A HTML dokumentum-formtumot tekinthetjk az n. hyper-text egyik megvalstsi
formjnak is. A HTML dokumentum egy olyan szvegfjl, amely a szvegen kvl tartalmaz
n. "HTML-tag"-eket - formzutastsokat -, valamint megjelentend objektumokra trtn
hivatkozsokat is. Ezek a HTML formzutastsok (ms szval: parancsok, elemek)
befolysoljk a dokumentum megjelentst, kapcsolatait. Ezeket az utastsokat a
bngszprogram rtelmezi s vgrehajtja. Ezen okbl a formzutasts mindig megelzi azt a
rszt a dokumentumnak, amelyre vonatkozik. A dokumentumksztshez hasznlhat HTML
utastsok kre llandan bvl, a nyelv fejldik. A szabvnyosts csak lassan kveti a fejldst.
Ezrt nem minden bngszprogram tudja a HTML utastsok mindegyikt rtelmezni. Egy
bngsz, ha szmra rtelmetlen utastssal tallkozik, akkor kihagyja, gy nem okoznak
problmt az jabb kelet - mg szabvnyostatlan - utastsok a rgebbi kiads WWW-
bngszknek sem. Sajnos a fentiek miatt ugyanazt a dokumentumot kt klnbz program nem
biztos, hogy azonos formban fogja megjelenteni. Ms oka is van ennek. A WWW-n
kalandoznl kicsi a valsznsge annak, hogy rendelkezsre ll ugyanaz a bettpus, mint a
WWW-oldalt fejlesztnek. Vagy kpek esetn semmi garancia nincs arra, hogy minden
bngszprogram ugyanazon felbontsban s sznszmmal tudja megjelenteni a kpet. s gy
tovbb ... A HTML-ben mgis az a nagyszer, hogy nagymrtkben megkzelti a
platformfggetlensget. Egy HTML dokumentum - ha nem is azonos mdon - mindenki szmra
megtekinthet.

Nhny szban a HTML alapvet szablyairl


A HTML dokumentum norml szvegfjl. Brmely szvegszerkesztvel ltrehozhat, ill.
mdosthat, amely nem hasznl klnleges fjlformtumot, vagy ha ltezik TEXT formtum
mentsi lehetsg benne. A HTML utastsokat a szvegben < s > jelek kz kell zrni. Egy-egy
utasts - HTML parancs, HTML elem - hatst ltalban a zr utastsprja sznteti meg, amely
megegyezik a nyit utastssal, csak a / jel vezeti be (termszetesen a < s a > jelek kztt). Az
utastsok nagy rsze opcionlis elemeket is tartalmazhat, melyek csak a nyitutastsban
szerepelhetnek, a zrban nem. Az opcik rtkadsnl az idzjel nem mindig ktelez, csak
ajnlott. A HTML utasts kulcsszavaiban nem klnbztetjk meg kisbetket s nagybetket.
A HTML dokumentum elvi felptse
Minden HTML formtum szvegfjl a <HTML> utastssal kezddik s a </HTML>
zrutastssal vgzdik. Ezen elemek kz kell zrni a teljes dokumentumot -
formzutastsokkal s hivatkozsokkal egytt.
A HTML dokumentumot kt rszre lehet bontani a fejlcre s dokumentumtrzsre. (Egy
harmadik rsz lehet a keretek defincija.)
A dokumentumot a fejlcelemek vezetik be, melyek kezdett a <HEAD> utasts jelzi. A
fejlcelemek kztt szoks a dokumentumcmet megadni, mely cmet a <TITLE> s a
</TITLE> utastsok kz kell zrni. A fejlcet a </HEAD> utasts zrja. Ezt a rszt a
dokumentumnak ltalban az ablak cmsorban jelentik meg a bngszprogramok.
A dokumentumtrzs - amit voltakppen a WEB bngsz meg fog jelenteni - a fjl <BODY> s
</BODY> utastsok kztti rsze. Ezen elemek kztt kell elhelyezni mindent: a szveget,
hivatkozsokat, kpeket, stb. (A keretek s a JavaScript kdok kivtelvel!)

Plda (egy tipikus HTML dokumentum felptse):


<HTML>
<HEAD>
<TITLE>A dokumentum neve</TITLE>
Fejlc elemek ...
</HEAD>
<BODY>A tulajdonkppeni dokumentumtrzs kvetkezik ..
<H1>Ez itt egy alcm</H1>
<P>Ez itt egy norml bekezds </p>
<!-- HTML comment ez nem jelenik meg a dokumentumban -->
</BODY>
</HTML>

A HTML dokumentum fejlce


A dokumentumot a fejlcelemek vezetik be, melyek kezdett a <HEAD>, vgt a </HEAD>
utasts jelzi. A fejlcelemek kztt legfontosabb a dokumentumcm, mely cmet a <TITLE> s
a </TITLE> utastsok kz kell zrni. Ezt a rszt a dokumentumnak ltalban az ablak
cmsorban jelenti meg a legtbb bngszprogram. A <BASE
HREF="protokoll://gpnv/elrsi_t"> utastsban szerepl URL hatrozza meg a
bziscmet, melybl a relatv cmeket rtelmezni kell. Az intelligens kiszolglk korban nem
ktelez megadni.
Az <LINK> utastsban szerepl opcik jelzik dokumentum kapcsolatait ms
dokumentumokkal, stluslappal, cmszalaggal, stb.
Az <META NAME="mez" CONTENT="rtk"> utasts jelezheti a keresrendszerek
szmra a dokumentum-adatbzisba kerl adatokat, pl. a dokumentum alkotjt, a ltrehoz
programot, rvid tartalmat, stb.
A fejlcelemekre jellemz, hogy a bngszablakban nem jelennek meg! Ezrt a World Wide
Weben szerepl dokumentumok fejlcnek csak nagyon kis hnyada tartalmaz a cmen kvl
egyb informcikat. (HTML fejlc rszletesebb lerst lsd. ASP trgyalsn bell)
Plda (HTML dokumentum fejlc):
<HTML>
<HEAD>
<TITLE>HTML lers - 3. lap</TITLE>
<META NAME="Author" CONTENT="Almsi Pl">
<LINK REL="stylesheet" HREF="pelda.css"><!ez egy stylesheet hozzrendels lsd.
CSS-rsz -->
</HEAD>
<BODY> ... dokumentumtrzs ...
</BODY>
</HTML>

A HTML dokumentum szvegtestnek felptse


Minden HTML formtum szvegfjl a <BODY> s a </BODY> utastsokkal kzrezrt
rszben tartalmazza a megjelentend rszt. (A dokumentum-kereteket kivve!)
Ezen elemek kztt kell elhelyezni mindent: a szveget, hivatkozsokat, kpeket, stb.
A <BODY BACKGROUND="fjlnv.kit" BGCOLOR="sznkd" TEXT="sznkd"
LINK="sznkd" VLINK="sznkd" ALINK="sznkd"> utastsban a dokumentumtrzsre
vonatkoz fenti elrsok is szerepelhetnek opciknt.
A BACKGROUND="elrsi_t/fjlnv.kit" opcival a dokumentum htterl szolgl fjlt
jellhetjk ki.
Httrsznt a BGCOLOR="sznkd" opcival kiegsztett utastssal definilhatunk.
(Amennyiben httrmintul szolgl fjlt - lsd fent - is megadunk, akkor a httrszn csak
nagyon ritkn fog eltnni a dokumentumban, pl. a keretek szeglyben.)
A dokumentumban a szveg sznt a TEXT="sznkd" opcival jellhetjk ki.
A LINK="sznkd" opci a hivatkozsok megjelensi sznt hatrozza meg. A
VLINK="sznkd" pedig, a mr bejrt hivatkozsokat jell sznt hatrozza meg.
Termszetesen egyszerre tbb opci is szerepelhet - teht nem ktelez egyik sem - a <BODY>
utastsban.

Plda
<BODY
BACKGROUND="pelda.gif"
BGCOLOR="#FF3333"
TEXT="#000099"
LINK="#993399"
VLINK="#009999">
<P> A szemlltets kedvrt az albbi szveg szles szegllyel hatrolt! <P>
<TABLE BORDER=12>
<TH><TD><H1><A HREF="#pelda">Ez itt egy hivatkozs,</A> kattints r!
</H1></TH></TD>
</TABLE>
<P> <IMG SRC="k1.gif" ALT="Grgetsv"> <P>
<A NAME="pelda"> Ide mutat a hivatkozs!</A>
</BODY>
A HTML dokumentum cmszintjeinek felptse
A HTML formtum szvegfjlban definilhatunk cmeket, ill. alcmeket hat szint mlysgig. A
legfels szint cmet a <H1 ALIGN="hely"> s a </H1> utastsprral kell kzrezrni. A
msodik szintet a <H2 ALIGN="hely"> s a </H2> utastsok hatroljk, s gy tovbb a
hatodik szintig.
Minden szint ms-ms betformtumban jelenik meg a dokumentumban, a bngszprogram
belltstl fggen. A cmek igaztst szablyozza az ALIGN opci, melynek lehetsges
rtkei: left, center, right. Amennyiben tl hossz a cm, de egy sorosnak kell maradnia, akkor a
NOWRAP opci megakadlyozza a cm betrdelst tbb sorba.
Tulajdonsga, hogy nem szkrollozdik a dokumentum tbbi rszvel ellenttben.
A cmek csak a szemll szmra keltik a tagoltsg rzett, a valsgban nem tagoljk fizikailag
szakaszokra a dokumentumot. Ezt a tagolst a <DIV CLASS="osztly" ALIGN="hely">,
</DIV> utastsokkal lehet meghatrozni, ahol a CLASS opci sorolja a megfelel SGML
osztlyba a szakaszt, az ALIGN pedig a szakasz igaztsi formtumt rja el. Az automatikus
trdelst itt is megakadlyozza a NOWRAP opci, ez esetben a szakasz trdelst a <P> vagy a
<BR> utastsokkal lehet szablyozni.

Plda a cmszintekre:
<H1 ALIGN="left">Legfels szint cmsor</H1>
<H2 ALIGN="center">Msodik szint alcmsor</H2>
<H3 ALIGN="right">Harmaik szint alcmsor</H3>
<H4 NOW RAP>Negyedik szint alcmsor</H4>
<H5>tdik szint alcmsor</H5>
<H6>Hatodik szint alcmsor</H6>
<DIV ALIGN="center"> Ez egy szakasz, melyben a szveg elvileg azonos mdon - kzpre igaztva -
kezelend. </DIV>

Bekezdsek a HTML dokumentumban


Minden dokumentum, gy a HTML formtum dokumentum is, alapveten bekezdsekre
tagoldik.
A HTML fjlban a bekezdsek kezdett a <P> utasts jelzi a bngszprogram szmra a vgt
</P>.A legtbb bngszprogram kt bekezds kztt egy res sort szr be megjelentskor!
A bekezds elem hordozhat magban a bekezds stlust meghatroz opcikat. A bekezds
igaztst a <P ALIGN="hely"> formj utastssal szablyozhatjuk. Az automatikus trdelst a
NOWRAP opci tiltja meg a bngszprogram szmra. Amennyiben trdelhetetlen szkzt
ignyel a szveg, akkor az egyszer szkz helyett alkalmazzuk a &nbsp; klnleges karaktert.
Amennyiben egy bekezdsen bell mindenkppen j sort szeretnnk kezdeni, akkor a <BR>
utastst kell hasznlni. (Nincs zrprja!)
Plda bekezdsekre:
<P>Ez alaprtelmezett (balra igaztott) bekezds.</p>
<P ALIGN=left>Ez balra igaztott bekezds.</p>
<P ALIGN=center>Ez kzpre igaztott bekezds.</p>
<P ALIGN=right>Ez jobbra igaztott bekezds.</p>
<P ALIGN=justify>Ez sorkizrt bekezds lenne.</p>
<P>
Itt egy sortrs elem tallhat,
<BR>
melynek hatsra j sorban folyatdik a szveg,
s nem maradt&nbsp;ki&nbsp;res&nbsp;sor.</p>

Kereszthivatkozsok HTML dokumentumok kztt


A HTML formtum lnyegt az egymsra s egyms tartalmra val hivatkozsok jelentik
(vagyis a hypertext lehetsg). A dokumentum brmely rszhez hivatkozst (linket)
helyezhetnk el, amelyet aktivizlva, a hivatkozottal sszefggsben lv szveghez jutunk el. A
hivatkoz utastsok megjelensi formja sokfle lehet, a clobjektumtl fggen:
A legegyszerbb esetben a hivatkozs az adott fjl egy tvolabbi rszre mozdtja a
bngszablakot. A hivatkozs kezdett a <A HREF="#jelz"> utastsnak a dokumentumban
val elhelyezse jelzi. A hivatkozst a </A> utasts zrja le. Ez az elempr kzrezrhat
szvegrszt, kpet, stb. A kzrezrt rszt a bngszprogram a dokumentum tbbi rsztl
eltren jelenti meg (pl. alhzssal, kerettel, ...), az egrkurzorral fl rve a mutat alakja
megvltozik. Azt a rszt (praktikusan: knyvjelzt), ahov a hivatkozs mutat a <A
NAME="jelz"> s a </A> utastsok kell, hogy hatroljk.
A legtbb esetben a egy hivatkozs egy msik fjlra/dokumentumra mutat. A hivatkozs kezdett
ekkor a <A HREF="protokoll://elrsi_t/fjlnv.kit"> utasts jelzi, a hivatkozst ekkor is a
</A> utastselem zrja le. Mind a protokoll, mind az elrsi t elhagyhat, amennyiben azonos
URL-en van a kiindulsi dokumentum s a hivatkozott. A hivatkozott fjlnak e pldban nincs
kln nvvel (knyvjelzvel) jellt rsze. Mkds szempontjbl a fentebb lertak vonatkoznak
erre a hivatkozsi formra is.
A legbonyolultabb esetben a hivatkozs egy msik fjl valamely pontosan meghatrozott rszre
mutat. A hivatkozs kezdett a <A HREF="protokoll://elrsi_t/fjlnv.kit#jelz"> utasts
jelzi, s a hivatkozst szintn a </A> elem zrja le. Ebben az esetben a hivatkozott fjl kell, hogy
tartalmazzon egy olyan rszt (knyvjelzt), ahov a hivatkozs mutat. Ezt a rszt a <A
NAME="jelz"> s a </A> utastsok hatroljk.
Megjegyzs: Ha az <A HREF=...>, </A> utastspr kpet fog kzre, akkor a kp szegllyel
jelenik meg, amely szegly letilthat az <IMG SRC=...> utastsban elhelyezett BORDER=0
opci alkalmazsval. A kpekkel kapcsolatos egyb hivatkozsi lehetsgeket lsd a kpeknl.
Plda hivatkozsokra:
Ennek a fjlnak a <A HREF="#vege">vgre</A> visz ez a hivatkozs.
<BR>
A maki Almsi Utcai ltalnos Iskola honlapjra vonatkozik e
<A HREF="http://www.erise.hu/index.html">hivatkozs</A>.
<BR>
<A HREF="http://www.erise.hu/index.html#vege">helyre</A>
rept e hivatkozs. Ezen lerssal kapcsolatos vlemnyed
<BR>
<A HREF="mailto:ossian@erise.hu">rd</A> meg!
<BR>
<A NAME="vege">Itt az oldal vge!</A>

Karakterformtumok a HTML dokumentumban


A HTML formtum szvegfjlban is hasznlhatjuk a szvegszerkesztkben megszokott
karakterformtumokat. Az albbi tblzat a formzs kezd s zrutastsa kztt a mintt is
tartalmazza.
Kezd elem Ilyen betformtumot eredmnyez Zr elem
<B> Flkvr betformtumot eredmnyez </B>
<I> Dltbets formtumot eredmnyez </I>
<U> Alhzott formtumot eredmnyez </U>
<S> thzott formtumot eredmnyez </S>
<TT> Fixpontos betket eredmnyez </TT>
<EM> Kiemeli a szveget </EM>
<CITE> Idzetekre hasznlhat </CITE>
<VAR> Vltoznevet jell </VAR>
<STRONG> Ez is egy kiemelsi lehetsg </STRONG>
<CODE> Kdoknl hasznljuk </CODE>
<SAMPLE> Mintk jelzsre hasznljuk </SAMPLE>
<KBD> Billentyfelirat jelzse </KBD>
<BQ> Idzet megjelentse </BQ>
<BIG> Nagymret betformtumot eredmnyez </BIG>
<SMALL> Kismret betformtumot eredmnyez </SMALL>
<SUB> Alsindexet eredmnyez </SUB>
Felsindexet eredmnyez
<SUP> </SUP>
<FONT ...> A rszleteket lsd lentebb </FONT>
A <FONT FACE="nv" COLOR="sznkd" SIZE="szm">, </FONT> utastsprral direkt
mdon elrhatk a megjelen szveg betinek a jellemzi. A FACE opcit nem szoks
hasznlni, mert nem valszn, hogy minden rendszerben rendelkezsre ll pl. az ARIAL CE
FLKVR bettpus. A COLOR opci pontosan meghatrozza a megjelentend szveg sznt.
A SIZE opciban egy szmot megadva a betmretet hatrozza meg direkt mdon. (A SIZE
opciban eljeles szm is szerepelhet, ami az alapbettpushoz viszonytott mretet jell.)
Plda karakterformtumokra:
<B>Vastag</B>
<I>Dlt</I>
<U>Alhzott</U>
<S>thzott</S>
<TT>Fixpontos</TT>
<EM>Kiemelt</EM>
<CITE>Idzet</CITE>
<VAR>Vltoznv</VAR>
<STRONG>Kiemelt</STRONG>
<CODE>Kd</CODE>
<SAMPLE>Minta</SAMPLE>
<KBD>Billentyfelirat</KBD>
<BQ>Idzet</BQ>
<BIG>Nagymret</BIG>
<SMALL>Kismret</SMALL>
<SUB>Alsindex</SUB>
<SUP>Felsindex</SUP>
<FONT COLOR="#FF3333" SIZE=1>Kicsi piros</FONT>
<FONT SIZE=2>N</FONT>
<FONT SIZE=3></FONT>
<FONT SIZE=4>v</FONT>
<FONT SIZE=5>e</FONT>
<FONT SIZE=6>k</FONT>
<FONT SIZE=7>v</FONT>
<FONT SIZE=8></FONT>
<FONT FACE="Arial CE" SIZE=9>ARIAL CE</FONT>
<FONT FACE="Symbol" SIZE=10>SYMBOL</FONT>

Kpek elhelyezse a HTML dokumentumban


A HTML formtum dokumentumban kpeket - grafikkat - is elhelyezhetnk. Az <IMG
SRC="elrsi_t/fjlnv.kit"> utasts a szveg aktulis pozcijba helyezi a megadott kpet.
Ennl azrt a legegyszerbb szvegszerkeszt program is tbbet nyjt. A HTML dokumentum
csinostsra is vannak a kpek elhelyezsnek finomabb lehetsgei is. Ha ezeket mind
kihasznljuk, akkor az utasts a kvetkezkppen fog kinzni: <IMG ALIGN="hely"
SRC="elrsi_t/fjlnv.kit" HSPACE="vszm" VSPACE="fszm" WIDTH="szmret"
HEIGHT="mmeret" UNITS="egysg" USEMAP="#jelz" ISMAP ALT="szveg">.
Az ALIGN opci meghatrozza a kp igaztsnak mdjt, lehetsges rtkei: top, middle,
bottom, left, right.
A HSPACE a kp melletti vzszintes trkzt, a VSPACE pedig a fggleges trkzt (ha gy
tetszik: margkat) hatrozza meg.
A WIDTH a szlessgt, a HEIGHT pedig a magassgt adja a kpnek, az UNITS ltal
meghatrozott egysgben (pixel vagy en).
Az ALT azt a szveget adja meg, amelyet nem grafikus bngszk hasznlata esetn meg fog
jelenni a kp helyett. A grafikus bngszkben meg ha kurzort a kp fl mozgatjuk akkor
jelenik meg a kurzor alatt.
Az USEMAP, ISMAP sszetartoz opcik a kp klnbz terleteihez klnbz hipertext
hivatkozsokat rendelhetnek. (Teht csak akkor van rtelmk, ha a kp egy hivatkozs rsze!
Ekkor a hivatkozsok <A HREF=...> s </A> utastsprjt nem kell megadni.) Ezenkvl
szorosan kapcsoldik ezen opcikhoz (az <IMG> utastst megelzen) a kvetkez
utastsstruktra:
<MAP NAME="jelz">
<AREA SHAPE="alak" COORDS="koordintk" HREF="hivatkozs">
...
</MAP>
amellyel egy hivatkozsi trkpet kell megadni. Az <AREA> utastsbl termszetesen tbb is
szerepelhet. A SHAPE opci a circle, rect, polygon rtkeket veheti fel, amikor circle (kr)
esetn a COORDS hrom vesszvel elvlasztott koordintt tartalmaz (kzpx,kzpy,sugr),
rect (tglalap) esetben ngyet (balfelsx,balfelsy,jobbalsx,jobbalsy), a polygon (sokszg)
esetn pedig minden cscs koordintit meg kell adni. A <MAP NAME="jelz">, </MAP>
utastsprral krlhatrolt hivatkozsi rsz kln fjlban is elhelyezhet. Ekkor az USEMAP
opci kimarad. - Vigyzat az ISMAP nem marad el! - Helyette a <A HREF="fjlnv.map"> s
az </A> utastsok kz kell zrni az <IMG SRC=...> utastst. (Ahol a fjlnv.map annak a
fjlnak a neve, URL-je, amely a hivatkozsokat tartalmazza.)

Plda kp alkalmazsra:
<MAP NAME="osztott">
<AREA SHAPE="circle" COORDS="130,130,50" HREF="#vege">
</MAP>
<P>
kp szvegbe beszrva
<IMG SRC="k10.gif" ALT="valami kp" USEMAP="#osztott" ISMAP>
gy jelenik meg
</P>
<P>
<IMG ALIGN="right" SRC="k10.gif" WIDTH="100" ALT="...">
Ugyanez jobbra igaztva s arnyosan kicsinytve...
</P>
<P>
<IMG ALIGN="left" SRC="k10.gif" VSPACE=20 HEIGHT="100" ALT="...">
Ugyanez balra igaztva s arnyosan kicsinytve...
</P>
<P>
<IMG ALIGN="top" SRC="k10.gif" HSPACE=40 WIDTH="100" ALT="...">
Ugyanez a szveg fels szlhez igaztva...
</P>
<P>
<IMG ALIGN="middle" SRC="k10.gif" WIDTH="100" HEIGHT="100" UNITS="en"
ALT="...">
Ugyanez sor kzpre igaztva, valamint...
</P>
<P>
<IMG ALIGN="bottom" SRC="k.gif" WIDTH="200" HEIGHT="100" UNITS="pixel"
ALT="...">
Ugyanez a sor alsszlhez igaztva, valamint...
<P>
<A NAME="vege">VGE</A>
Klnbz listafomtumok a HTML dokumentumban
A HTML formtum szvegfjlban hasznlhatunk listkat is, amelyek szvegszerkesztkbeli
megfeleli a felsorolsok s bajuszos bekezdsek.
A szmozott bekezdsek (felsorolsok) megfelelje a szmozott lista, az n. "bajuszos"
bekezdsek megfelelje pedig a szmozatlan lista.
A harmadik lista tpus pedig a ler lista, ahol az egyes lista elemekhez tartozhat egy hosszabb
lers is.
A szmozott listt az <OL> s az </OL> utastsok kz kell zrni. A szmozatlan listt pedig az
<UL>, </UL> utastspr kz. Mindkt tpus listban hasznlhatjuk a listafejlcet, melyet az
<LH> utasts vezet be - az </LH> pedig zr! Mindkt listatpusban a listk sorai az <LI>
utastssal kezddnek s nem ktelez lezrni.
Szmozott lista esetben a kezd sorszm kzvetlenl megadhat az <OL SEQNUM="szm">
formj kezdutastssal. Msik lehetsg, hogy egy elzleg definilt lista szmozsa
folytathat az <OL CONTINUE> kezdutasts hasznlatval. Egybknt az <OL> utasts 1-
tl kezdi a lista tagok szmozst.
A szmozatlan listk kezdeleme is hordozhat formzinformcikat. Az <UL
SRC="fjlnv.kit"> formj utasts pldul a listasort megelz bajuszknt a megadott
kpfjlt hasznlja. Az <UL DINGBAT="karakter"> a megadott bajuszkaraktert alkalmazza.
Az <UL WRAP="irny"> pedig tbboszlopos listk esetn az igazts formjt hatrozza meg.
(A WRAP opci a horiz s a vert rtkeket veheti fel.
A szmozatlan listk specilis - kln HTML utastsokkal ltrehozhat - fajti a knyvtrlista s
a menlista. A knyvtrlista tpus a <DIR> utastssal kezddik s a </DIR> utastsra vgzdik.
A menlista pedig <MENU> s a </MENU> utastsokkal hatrolt. Ezek a listaformk a norml
szmozatlan listktl mindssze annyiban klnbznek, hogy a knyvtrlista tagjai 20
karakteresnl, a menlista tagjai pedig egy sorosnl nem lehetnek hosszabbak s nincs
"bajuszuk".
A ler listt a <DL> s a </DL> utastsok kz kell zrni. A lista fejlc megadsa azonos az
tbbi listatpusnl ltottal. A listk egyes alkotelemeinek kezdett a <DT> utasts jelzi, az
ehhez tartoz lers kezdett pedig a <DD> utasts hatrozza meg. Nincs egyik utastsnak sem
zr prja, ezrt a lista tag a <DT> elemtl a <DD>-ig, a hozz tartoz lers pedig a <DD>
elemtl a kvetkez <DT>-ig tart.
Plda listkra:
<P>Norml szveg</P>
<P>
<OL><LH>A szmozott lista fejlce</LH>
<LI>Els sor
<OL><LH>A begyazott lista fejlce</LH>
<LI>Els elem
<LI>Msodik elem
<LI>Harmadik elem
</OL>
<LI>Msodik sor
<LI>Harmadik sor
<LI>Negyedik sor
</OL>
</P>
<P>Norml szveg</P>
<P>
<UL><LH>A szmozatlan lista fejlce</LH>
<LI>Els sor
<LI>Msodik sor
<UL wrap="horiz"><LH>A begyazott lista fejlce</LH>
<LI>Els sor
<LI>Msodik sor
</OL>
<LI>Harmadik sor
</OL>
</P>
<P>Knyvtrlista:<BR>
<DIR>
<LI>Els tag
<LI>Msodik tag
<LI>Harmadik tag
<LI>Negyedik tag
</DIR>
</P>
<P>Menlista:<BR>
<MENU>
<LI>Els men
<LI>Msodik men
</MENU>
</P>
<P>Norml szveg</P>
<P>
<DL><LH>A ler lista fejlce</LH>
<DT>Els sor
<DD>Az els sorhoz tartoz lers, lehet hosszabb szveg
is.
A lers trdelse automatikus. Szpen igazodnak a betrdelt sorok
az els sor kezdpontjhoz.
<DT>Msodik sor
<DD>A msodik sorhoz tartoz lers
</DL>
</P>
A HTML formtum tblzatai
A HTML formtumnak ez az utastscsoportja kpes a legvltozatosabb szveg-, s
kpmegjelentsi formk ellltsra. A <TABLE> s a </TABLE> utastsok kz zrt rszt
tekintjk egy tblzatnak.
A tblzatnak a cmt a <CAPTION> s a </CAPTION> utastsok kztt kell megadni.
(Figyelem! Az gy megadott cm nem a tblzatban, hanem eltte fog megjelenni!) A cm
<CAPTION ALIGN="hely"> formj megadssal igazthat.
A tblzat minden sora a <TR> utastssal kezddik s a kvetkez </TR> vagy <TR>-ig, ill. a
tblzat vgig tart. Egy sor tartalmazhat oszlopfejlceket s adatokat. Az oszlopfejlceket a
<TH> </TH>utasts vezeti be s vlasztja el egymstl. A tblzat adatcelli pedig a <TR>-rel
megkezdett sorban egy <TD> utastssal kezddnek s minden cella a kvetkez <TD>-ig - ill.
</TD> ill. a kvetkez sor elejt jelz elemig - tart, ahol rtelemszeren j cella kezddik. Az
oszlopfejlceknek s az adatcellknak csak a kezdutastsa hasznlatos - habr van lezr
utastsuk is (</TH>, </TD>) -, mert a zrutastsuk elhagyhat!
A tblzat nyitutastsa tartalmazhat a teljes tblzatra vonatkoz belltsokat: <TABLE
BORDER="szm" ALIGN="hely" COLSPEC="oszlopjellemzk" UNITS="egysg"
NOWRAP CELLPADDING="pszm" CELLSPACING="kszm"
BGCOLOR="sznkd">
Ahol a BORDER opci a rcsozat szlessgt hatrozza meg. (0 esetn nincs rcsozat.) Az
ALIGN a teljes tbla elhelyezkedst hatrozza meg ( left, right, center lehet). A COLSPEC egy
oszlop igaztst s szlessgt adja meg. Egy oszlopra vonatkozan egy bet s szm egyberva
(pl.: L12 C24 R10), melytl a kvetkez oszlop rtkeit egy kz vlasztja el. Az UNITS a
szmokhoz tartoz mrtkegysget jelli ki (en, relative - oszlopszlessghez -, pixel). A
NOWRAP opci a cellk szvegnek trdelst tiltja le. Vgl a BGCOLOR a tblzat
httrsznt hatrozza meg.
A tblzat oszlopfejlcei nem csak a legfels oszlopban szerepelhetnek, hanem a tblzatban
brhol (pl. sorok cmeknt is).
Mind az oszlopfejlcekben, mind az adatcellkban hasznlhatk a kvetkez formzsra val
opcik:
COLSPAN="szm":
Egyest tbb egymssal szomszdos cellt - vzszintesen.
ROWSPAN="szm":
Egyest tbb egymssal alatti cellt - fgglegesen.
ALIGN="hely":
Igaztja a cellk tartalmt - vszintesen. Lehetsges rtkei: left, center, right, justify, decimal
VALIGN="hely":
Igaztja a cellk tartalmt - fgglegesen. Lehetsges rtkei: top, middle, bottom, baseline
Plda tblzatok hasznlatra:
<TABLE border="5" align="center">
<CAPTION> A tblzat cme
</CAPTION>
<TR>
<TH colspan="2"> Az 1.-2. oszlop kzs fejlce
</TH>
<TH colspan="3"> A 3.-4.-5. oszlop kzs fejlce
</TH>
<TH rowspan="2"> A 6. (2 soros) oszlop fejlce
</TH>
</TR>
<TR>
<TH> Az 1. oszlop msodrend fejlce
</TH>
<TH colspan="2"> A 2.-3. oszlop msodrend fejlce
</TH>
<TH colspan="2"> A 4.-5. oszlop msodrend fejlce
</TH>
</TR>
<TR>
<TH> Az els adatsor cme
</TH>
<TD> Az els adatcella
<TD> Adat (indexe: C3)
</TD>
<TD> Adat (indexe: D3)
</TD>
<TD> Adat (indexe: E3)
</TD>
<TD> Adat (indexe: F3)
</TD>
</TR>
<TR>
<TH> A 2. adatsor cme
</TH>
<TD> Adat (indexe: B4)
</TD>
<TD> Adat (indexe: C4)
</TD>
<TD> Adat (indexe: D4)
</TD>
<TD> Adat (indexe: E4)
</TD>
<TD> Adat (indexe: F4)
</TD>
</TR>
<TR>
<TH> Fggleges igaztsok
</TH>
<TD align="center" valign="bottom"> Le
<TD align="center" valign="top"> Fel
</TD>
<TD align="center" valign="middle"> Kzpre
</TD>
<TD>
</TD>
<TD> Adat (indexe: F5)<BR>Ettl a celltl balra egy
res cella,
alatta pedig kt res cella sszevonva
</TD>
</TR>
<TR>
<TH> Vzszintes igaztsok:
</TH>
<TD> Alaprtelmezs
</TD>
<TD align="left"> Balra
</TD>
<TD align="center"> Kzpre
</TD>
<TD align="right"> Jobbra
</TD>
<TD rowspan="2">
</TD>
</TR>
<TR>
<TD align="center" colspan="5"><IMG src="k12.gif" alt="Kp
a cellban">
</TD>
</TR>
</TABLE>
A HTML dokumentumablak felosztsa
Egyetlen bngszablakban tbb HTML dokumentum is megjelenthet a <FRAMESET> s a
</FRAMESET> utastspr, valamint a szorosan kapcsold <FRAME> utasts egyttes
hasznlatval.
A <FRAMESET ROWS="oszlophatrok"> kezdutastssal oszthat fel a kperny
fgglegesen, a <FRAMESET COLS="sorhatrok"> utastssal pedig vzszintesen. Ahol az
oszlop- s sorhatrok megadhatk kpernypontban ill. szzalkosan - vesszvel elvlasztva -, a
maradk kpernyterletre pedig a * dzskerkarakter hasznlatval lehet hivatkozni. Mivel vagy
csak vzszintesen, vagy csak fgglegesen oszthat fel a kperny, ezrt ha mindkt irnyban
osztott bngszablak ltrehozshoz a <FRAMESET> elemeket egymsba kell gyazni! Teht
pldul egy fggleges felosztson bell kell vzszintesen elvlasztott rszekre tagolni egy
oszlopot.
A fenti mdon definilt terletekre a <FRAME SRC="objektum"> utasts tlti be a megadott
objektumot, mely objektum lehet egy teljes HTML fjl, annak egy maghatrozott rsze, ill. egy
kp. Az gy kitltend keretek viselkedst szablyozza az utasts <FRAME NAME="nv"
SRC="objektum" SCROLLING="rtk" MARGINWIDTH="szm"
MARGINHEIGHT="szm"> alak megadsa.
Az adott keretnek nevet ad a NAME opci, a szkrollozst letilthatja SCROLLING="no"
kiegszts (ezenkvl a yes s az auto rtkeket veheti fel a SCROLLING opci), a
MARGINWIDTH s a MARGINHEIGHT pedig a kereten belli margk szlessgt
szablyozza.
Pldul a fejlcben megadott <BASE TARGET="nv"> utasts a NAME="nv" opcival
elnevezett keretbe irnytja a hivatkozsokat. Egybknt az <A HREF=...> utasts is ismeri a
TARGET="nv" opcit. (A TARGET="_top" opcival az egsz bngszablakot elfoglalja a
hivatkozott dokumentum, teht feloldja az ablak keretekre osztst!) Ha ezek egyike sem
szerepel, akkor a hivatkozs a hivatkoz objektum keretben jelenik meg, fellrva azt!
A <FRAMESET>, <FRAMESET> utastsprral hatrolt terletnek meg kell elznie a
<BODY> utastssal kijellt dokumentumtrzset! St a egy <NOFRAMES> utastssal kell
jelezni a dokumentum azon rsznek kezdett, amelyet akkor kell a bngsznek megjelentenie
csak, ha nem ismeri a keretutastsokat. s csak ez a <NOFRAMES>-mel kezdd rsz
tartalmazhatja a <BODY> s a </BODY> utastsprt.
Plda keretek hasznlatra:
<FRAMESET ROWS=185,*>
<FRAMESET COLS=185,*>
<FRAME SRC=k08.gif SCROLLING=NO NAME="cimer">
<FRAME SRC=02.htm NAME="felepites">
</FRAMESET>
<FRAMESET COLS=25%,*>
<FRAME SRC=index.htm NAME="tart">
<FRAME SRC=13.htm NAME="keret" MARGINHEIGHT=10 MARGINWIDTH=10>
</FRAMESET>
</FRAMESET>

<NOFRAMES>
<CENTER>
<BODY BGCOLOR="#FFFF00">
<FONT COLOR="#FF3333">
<H1>Sajnos ez a bngsz nem tmogatja a keretek hasznlatt!</H1>
</FONT>
</BODY>

Krdvek a HTML dokumentumban


A HTML formtum dokumentumban krdveket is kzztehetnk, melyek feldolgozshoz
kln programot kell rni. (Nem HTML-alapt! ltalban valami server oldali program
meghvsa trtnik pl. ASP, CGI, PHP )
A <FORM METHOD="md" ACTION="elrsi_t/fjlnv.kit"> s a </FORM> utastsok
zrjk kzre a kitltend krdvet/rlapot.
Az opcikat ajnlott mindig megadni, mr csak azrt is, mert az ACTION hatrozza meg a
feldolgozst vgz programot, a METHOD pedig a kitlttt rlap tovbbtsi mdjt a
feldolgoz programnak. Lehetsges rtkei: GET - az URL-ben, POST - adatcsomagban. Az
alaprtelmezs a GET, ami bizonyos veszlyeket rejt magban, mivel tl hosszra nylhat az
URL. A POST a biztonsgosabb md.
Az <INPUT NAME="nv" TYPE="tpus" ALIGN="hely"> utastssal hatrozhat meg egy
kitltend rlapmez
A NAME termszetesen a meznv, amely alapjn a feldolgozprogram azonostja a bevitt
adatot. A TYPE pedig az adattpus, melyet vr a beviteli mez. Lehetsges tpusok: TEXT -
szveg, PASSWORD - jelsz (nem jelenik meg bevitelkor!), HIDDEN - rejtett (ez sem jelenik
meg), CHECKBOX - kapcsol (tbb is kivlaszthat egyszerre), RADIO - kapcsol (egyszerre
csak egyet lehet kivlasztani), RANGE - numerikus adat, FILE - csatoland fjl, SUBMIT -
adattovbbt gomb, RESET - inicializl gomb, BUTTON - egyb nyomgomb. Az <INPUT >
utastsban tovbbi opcik is szerepelhetnek, a f opcik rtkeitl fggen:
- A VALUE kiegszt opcival megadott rtket veszi fel alaprtelmezsknt a szveges vagy
numerikus beviteli mez.
- TEXT tpus mez esetn egy tovbbi opci, a SIZE="mret" opci hatrozza meg a
beviteli ablak szlessgt, a MAXLENGTH="rtk" pedig a bevihet maximlis
szveghosszt.
- A CHECKBOX s a RADIO tpus mezk tovbbi paramtere lehet a CHECKED opci,
mely bekapcsolja a kapcsolt - alaprtelmezsknt.
- - RANGE tpus mez esetn megadhat az a tartomny, melybe a bevitt rtknek bele kell
esnie, a MAX="maximum" s a MIN="minimum" tovbbi opcikkal.
- - A FILE tpus mezben megadott fjl az ACCEPT kiegszt opcival megadott MIME
mdon csatoldik az elkldend krdvhez. (Megjegyzs: Egy Browse nyomgombbal
tmogatott fjlkeres-ablakbl lehet a fjlt kivlasztani.)
- - A SUBMIT s a RESET gombokhoz tartoz kiegszt opci a VALUE="felirat", amely a
gombok feliratt jelli ki. Egybknt a SUBMIT gomb lenyomsnak hatsra kldi el az
rlapadatokat a krdv a feldolgoz programnak, a RESET gomb lenyomsa pedig az
alaprtkekkel tlti fel a beviteli mezket.
- A IMAGE tpussal kszthetnk egy kpbl gombot. A hozz tartoz kiegszt opci
SRC="elrsi t/kp nv" segtsgvel adhatjuk meg a kp elrst.
Hosszabb szveg bevitelre alkalmas a <TEXTAREA NAME="nv" ROWS="magassg"
COLS="szlessg" VALUE="szveg">, </TEXTAREA> utastspr, amely egy beviteli
ablakot nyit a COLS-ban megadott szlessgben s a ROWS-ban megadott sorban. A VALUE
az alaprtelmezsknt megjelentend szveget adja meg.
Egy krdsre adand vlasz egyszer - menbl trtn - kivlasztst teszi lehetv a krdven
a <SELECT NAME="nv" SIZE="sor">, </SELECT> utastsokkal ltrehozott
kivlasztsos men, melynek menpontjait az <OPTION> utastssal adhatjuk meg.
A SIZE opci azt hatrozza meg, hogy hny sorban jelenjenek meg a vlaszthat menpontok.
Megadsval szkrollozhat ment kapunk. Elhagysa esetn, n. legrdl menbl lehet
vlasztani. A MULTIPLE opci esetn tbb menpont is kijellhet egyszerre. Az <OPTION
SELECTED> formj utasts adja meg az alaprtelmezett vlasztst!
Plda rlap kezelsre:

<CENTER><H1>Adatfelvteli lap:</H1>
<FORM method="post" action="program.bin">
<INPUT TYPE="reset" VALUE="Alaprtelmezs">
<P>Vezetkneve:
<INPUT NAME="vezeteknev" TYPE="text" VALUE="Kovcs"
SIZE="25" MAXLENGTH="30">Keresztneve:
<INPUT NAME="keresztnev" TYPE="text" MAXLENGTH="50">Frfi:

<INPUT NAME="neme" TYPE="radio" CHECKED>N:


<INPUT NAME="neme" TYPE="radio">Kora:
<INPUT NAME="kor" TYPE="range" SIZE="2" MIN="10"
MAX="60"></P>
<P>rdekldsi kre:
Windows:
<INPUT NAME="erdek" TYPE="checkbox" CHECKED>Win95:
<INPUT NAME="erdek" TYPE="checkbox">LINUX:
<INPUT NAME="erdek" TYPE="checkbox">OS/2:
<INPUT NAME="erdek" TYPE="checkbox"></P>
<P>
<TEXTAREA name="egyeb" cols="40"
rows="4">Kzlendk:</TEXTAREA></P>
<P>Foglakozsa:
<SELECT name="foglakozas">
<OPTION>dik
<OPTION>tanr
<OPTION selected>nyugdjas
<OPTION>egyik sem
</SELECT></P>
<P>Csatoland fjl(ok):<BR>
<INPUT NAME="fajl" TYPE="file"></P>
<P>
<INPUT TYPE="submit" VALUE="Elklds"></CENTER>
</FORM></P>

A HTML dokumentum egyb elemei


Egy HTML formtum szvegfjl a tartalmazhat megjegyzseket.
A megjegyzs egyik tpusa a megjelentend megjegyzs, a <NOTE> s a </NOTE>
utastsokkal kzrezrva.
A HTML dokumentumban elhelyezhetk olyan megjegyzsek is, melyek sehol sem jelennek meg
a dokumentum WEB-bngszvel trtn megjelentsekor. Viszont a fjl tszerkesztskor
segtsgl lehetnek a mdostst vgznek. A megjegyzseket a <!-- s a --> utastsok kztt
kell elhelyezni.
Egy HTML formtum szvegfjl a tartalmazhat lbjegyzeteket. Az <FN ID="azonost"> s a
</FN> utastsok kztt szerepel a lbjegyzet szvege. Az gy definilt lbjegyzetszvegre
hivatkozik a szvegnek az <A HREF="#azonost"> s az </A> utastsokkal jellt rsze.
Amennyiben a megjelentend szveg formtuma pontosan olyan kell, hogy legyen, mint ahogy a
HTML fjlban szerepel, akkor azt az elreformzott szveget jelz utastsok kz kell zrni.
Ezen utastsok a <PRE> s a </PRE>. A kzjk zrt szveg pontosan annyi szkzzel,
pontosan annyi sorban s olyan llapotban fog a dokumentumban megjelenni, mint ahogy azt a
HTML fjl tartalmazza. E dokumentumsorozat pldi is ily mdon kerltek rgztsre ...
A <PRE WIDTH="szm">, </PRE> utastspr hasznlatval egy trdeletlen szveg az adott
szlessgben betrdelhet.
A szvegrszeket tagols vagy eszttikai ok miatt vzszintes vonallal el lehet vlasztani
egymstl. Legegyszerbb esetben a <HR> utasts egy vzszintes elvlaszt vonalat helyez el az
adott ponton, a rendelkezsre ll szlessgben. Ezt a durva megjelentst lehet azrt finomtani a
<HR ALIGN="hely" WIDTH="hszm" SIZE="vszm" NOSHADE> alak utastssal.
Az ALIGN az igazts helyt adja meg (left, right, middle). A WIDTH a vonalhosszt definilja,
a SIZE pedig a vonal szlessgt. Mindkettt meg lehet adni kppontban, ill. a hosszt az ablak-
szlessg szzalkban. A NOSHADE pedig trhatst (rnykoltsgot) tiltja le.

Plda az egyb elemekre:


<!-- Ez itt egy rtelmezst segt megjegyzs. -->
<NOTE>Ez itt egy jegyzet</NOTE>
Ehhez a sorhoz <A HREF="#az">lbjegyzet</A> tartozik.
<HR WIDTH=50 SIZE=50>
<PRE> Ez a sor sok kzt tartalmaz. Ez pedig egy j sor, pedig nem elzte meg sem
<P>, sem <BR>
</PRE>
<HR ALIGN="left" WIDTH=50%> <P> <HR NOSHADE></P><P> <FN ID="az">me a fenti jelzshez
tartoz lbjegyzet</FN></P>

A JavaScript hasznlata a HTML dokumentumban


Egy HTML formtum szvegfjl a tartalmazhat JavaScript "programnyelven" megrt
kdsorokat is <SCRIPT LANGUAGE="JavaScript"> s a </SCRIPT> utastsokkal
kzrezrva. A JavaScript, mint programnyelv bemutsra nem kerl most sor. Ezrt csak rviden:
A JavaScript vltozkat s fggvnyeket a dokumentum fejlcben szoks definilni. (Vagyis a
<HEAD> s a </HEAD> utastsokkal kzrezrt rszben a dokumentumnak. Az gy definilt
fggvnyeket lehet meghvni, a vltozkra lehet hivatkozni a szveg HTML elemeiben.
Figyelem! Nem tvesztend ssze a JavaScript a JAVA programozsi nyelvvel. A JAVA nyelven
nll programokat lehet rni, melyeket az <APPLET CODE="osztly"> utastssal lehet
meghvni.
JavaScriptrl lsd. Kln fejezet.
Plda JvaScript alkalmazsra:
<HTML>
<HEAD>
<TITLE>HTML lers - 17. lap</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function Ablak()
{
msg=open("","DisplayWindow","toolbar=no,directories=no,menubar=no,"
+"resizable=no,width=300,height=200")
msg.document.write("<BODY BGCOLOR=#009999>");
msg.document.write("<CENTER><H2>j bngszablak</H2>");
msg.document.write("<FORM>");
msg.document.write("<INPUT TYPE='button' VALUE=' BEZR S VISSZA
'+onclick='window.close()'>");
msg.document.write("</FORM></CENTER>");
msg.document.write("</BODY>");
}
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
<H1>JavaScript plda</H1>
<FORM>
<INPUT TYPE="button" VALUE=' J ABLAK MEGNYITSA ' onclick="Ablak()">
</FORM>
</CENTER>
</BODY>
</HTML>

A HTML specilis karakterei


Ha egy HTML formtum szvegfjl nem csak az angol ABC alfanumerikus jeleit akarjuk
hasznlni, hanem kezetes betket vagy specilis jeleket is, akkor a HTML specilis jeleit kell
hasznlni. Lehetsges az ESCAPE szekvencia alapjn trtn jellse s ISO-kd szerinti
megadsa is ezen specilis jeleknek.
Az ABC beti s kdjaik
Elnevezs Jel ESC ISO Elnevezs Jel ESC ISO
Nagy A bet A &#65; A Kis a bet a &#97; a
Nagy bet &#193; &Aacute; Kis bet &#225; &aacute;
Nagy B bet B &#66; B Kis b bet b &#98; b
Nagy C bet C &#67; C Kis c bet c &#99; c
Nagy D bet D &#68; D Kis d bet d &#100; d
Nagy E bet E &#69; E Kis e bet e &#101; e
Nagy bet &#201; &Eacute; Kis bet &#233; &eacute;
Nagy F bet F &#70; F Kis f bet f &#102; f
Nagy G bet G &#71; G Kis g bet g &#103; g
Nagy H bet H &#72; H Kis h bet h &#104; h
Nagy I bet I &#73; I Kis i bet i &#105; i
Nagy bet &#205; &Iacute; Kis bet &#237; &iacute;
Nagy J bet J &#74; J Kis j bet j &#106; j
Nagy K bet K &#75; K Kis k bet k &#107; k
Nagy L bet L &#76; L Kis l bet l &#108; l
Nagy M bet M &#77; M Kis m bet m &#109; m
Nagy N bet N &#78; N Kis n bet n &#110; n
Nagy O bet O &#79; O Kis o bet o &#111; o
Nagy bet &#211; &Oacute; Kis bet &#243; &oacute;
Nagy bet &#214; &Ouml; Kis bet &#246; &ouml;
Nagy bet &#213; &Ocirc; Kis bet &#245; &ocirc;
Nagy P bet P &#80; P Kis p bet p &#112; p
Nagy Q bet Q &#81; Q Kis q bet q &#113; q
Nagy R bet R &#82; R Kis r bet r &#114; r
Nagy S bet S &#83; S Kis s bet s &#115; s
Nagy T bet T &#84; T Kis t bet t &#116; t
Nagy U bet U &#85; U Kis u bet u &#117; u
Nagy bet &#218; &Uacute; Kis bet &#250; &uacute;
Nagy bet &#220; &Uuml; Kis bet &#252; &uuml;
Nagy bet &#219; &Ucirc; Kis bet &#251; &ucirc;
Nagy V bet V &#86; V Kis v bet v &#118; v
Nagy W bet W &#87; W Kis w bet w &#119; w
Nagy X bet X &#88; X Kis x bet x &#120; x
Nagy Y bet Y &#89; Y Kis y bet y &#121; y
Nagy Z bet Z &#90; Z Kis z bet z &#122; z
Nhny specilis jel s kdjaik
Elnevezs Jel ESC ISO Elnevezs Jel ESC ISO
Tabultor &#09; Soremels &#10;
Szkz &#32; Felkiltjel ! &#33; !
Idzjel " &#34; &quot; Szmjel # &#35; #
Dollrjel $ &#36; $ Szzalkjel % &#37; %
Angol s jel & &#38; & Aposztrf ' &#39; &amp;
Bal zrjel ( &#40; ( Jobb zrjel ) &#41; )
Aszteriszk * &#42; * Pluszjel + &#43; +
Vessz , &#44; , Ktjel - &#45; -
Pont . &#46; . Perjel / &#47; /
Nulls 0 &#48; 0 Egyes 1 &#49; 1
Kettes 2 &#50; 2 Hrmas 3 &#51; 3
Ngyes 4 &#52; 4 ts 5 &#53; 5
Hatos 6 &#54; 6 Hetes 7 &#55; 7
Nyolcas 8 &#56; 8 Kilences 9 &#57; 9
Kettspont : &#58; : Pontosvessz ; &#59; ;
Kisebb jel < &#60; &lt; Egyenlsgjel = &#61; =
Nagyobb jel > &#62; &gt; Krdjel ? &#63; ?
Kukac @ &#64; @ Bal zrjel [ &#91; [
Visszaper jel \ &#92; \ Jobb zrjel ] &#93; ]
Hatvnyjel ^ &#94; ^ Alhzs _ &#95; _
Vissza aposztrof ` &#96; ` Bal kapocs { &#123; {
Fggleges | &#124; | Jobb kapocs } &#125; }
Tilde jel ~ &#126; ~ Als aposztrof &#130;
Als idzjel &#132; Kereszt &#134;
Ketts kereszt &#135; Ezrelk &#137;
Fels vessz &#145; Fels vessz &#146;
Ketts vessz &#147; Ketts vessz &#148;
Szorzs jel &#149; Mnusz eljel &#150;
Kivons jel &#151; Trade Mark &#153;
Cent jele &#162; &cent; Font jele &#163; &pound;
Csvezetk jel &#166; &brvbar; Paragrafus jel &#167; &sect;
Umlaut &#168; &uml; Copyright &#169; &copy;
Bal trt idzet &#171; &laquo; Lgy ktjel - &#173; &shy;
Registered TM &#174; &reg; Fok jele &#176; &deg;
Plusz-mnusz &#177; &plusmn; kezet &#180; &acute;
Mikro &#181; &micro; Bekezds vge &#182; &para;
Kzpen pont &#183; &middot; Jobb trt idzet &#187; &raquo;
Szorzs kereszt &#215; Scharfes s &#223; &szlig;
Oszts jel &#247;
Az albbi kis tblzat tartalmazza a magyar kezetes betk Escape-szekvenciit s ISO-kdjt:

Jel ESCAPE ISO-kd Jel ESCAPE ISO-kd


&#193; &Aacute; &#225; &aacute;
&#201; &Eacute; &#233; &eacute;
&#205; &Iacute; &#237; &iacute;
&#211; &Oacute; &#243; &oacute;
&#213; &Ocirc; &#245; &ocirc;
&#214; &Ouml; &#246; &ouml;
&#218; &Uacute; &#250; &uacute;
&#219; &Ucirc; &#251; &ucirc;
&#220; &Uuml; &#252; &uuml;

Karaktertblk
Az Internet hasznlatnak els veiben, az aktulis feladatok megoldsra a 7 bites ASCII
kdols tkletesen elegend volt. A 7 bitbe (127 karakter) belefrt a teljes angol ABC, a szmok
s mg nhny jel is. Azutn a hlzat kezdte tlpni a hatrokat, s egyre inkbb szksg volt az
angoltl klnbz nyelvek betinek megjelentsre is. Ekzben a htbites rendszerekrl lassan
megkezddtt az ttrs a nyolc bitre (gy lett az ASCII-bl ANSI), ezutn kzenfekv volt, hogy
a specilis karaktereket a megjelen 128 res helyre lehet bekdolni. Ahny hz, annyi szoks: ki
gy, ki gy tlttte ki ezt a fels tartomnyt. A klnbz megoldsoknak ksznheten
megszlettek a kdtblk (codepage), s elkezddtt a kosz. Mg messze a DOS-os idkben
jrunk, amikor a tblzatrajzol karakterek helyett nha kezetes karakterek jelennek meg a rossz
belltsoknak ksznheten. A nyugat-eurpai (western) kdtblk tartalmaznak ugyan kezetes
betket, de a magyar hossz s mr nem frt bele. Sebaj, van hasonl: (sajnos) valsznleg
mindannyian tallkoztunk mr a kalapos u s hullmos o betkkel. Akkoriban ez a kis
cssztats mg elviselhetnek tnt, manapsg viszont mr inkbb knos hibnak tnik a
megjelensk. A vilg ugyanis azta sokat fejldtt. A szertegaz kdtblkat szabvnyokk
fogtk ssze, a dokumentumokba beptettk a karaktertblkat azonost adatokat, gy egy
HTML oldal forrsbl, vagy egy e-mailbl azonnal kiderl, hogy azt a kldje milyen
karaktertblval rta. Bizony, gy van ez akkor is, ha a (fleg nem Windows platformon fut)
levelezprogramok zme errl nem hajland tudomst venni. Mindenekeltt kt fontos
kdtblra hvnm fel a figyelmet: az iso-8859-1, ms nven Western kdtbla a nyugat-eurpai
karaktereket (s a hullmos/ kalapos o-t s u-t) tartalmazza, mg az iso-8859-2 alias Central
European amely tartalmazza a magyar vltozatot. Hasonl hatst lehet elrni a Windows-1250
nev kdlappal, ez azonban, mint az a nevbl is kitallhat, nem kifejezetten elterjedt Un*x s
Macintosh krkben :-). Magyar szvegben, amikor csak tehetjk, hasznljuk az iso-8859-2-t!

Cascading Style Sheets (CSS)

Bevezets
A CSS egy olyan stluslap megvalsts, amely lehetv teszi, hogy a HTML oldalak szerzi
oldalaikhoz egyedi stlust rendeljenek hozz. A CSS egyik alapvet tulajdonsga a folyamatos
stluslap - HTML lap kapcsolat. A lapok szerzi az ltaluk kedvelt stlust egyszer rgztik, s
hozzkapcsolhatjk minden ltaluk ksztett HTML laphoz. Ez a lers tartalmazza ennek
megoldsi lehetsgeit. Stluslappal (style sheet) tervezni nem nehz, de szksges hozz nmi
alapvet HTML ismeret. Ezt szemllteti az albbi plda:
H1 {color: blue}
Fenti plda tartalmazza a CSS hasznlatnak alapszablyait - egy css utasts kt rszbl ll:
a szelektor tartalmazza a formzand HTML tag megnevezst (H1);
a deklarci vgzi el a szelektorban meghatrozott tag formzst.
Maga a deklarci is kt rszre bonthat: egy tulajdonsgra s a hozz tartoz rtkre (szn: kk).
A szelektor a tulajdonkppeni kapocs a HTML, mint lernyelv s a stluslap kztt; szinte
minden HTML tag betltheti a szelektor szerept. Az elbb emltett szn (color) tulajdonsg csak
egy a tbb, mint 50 kzl, amelyek segtsgvel alakthatjuk egy HTML oldal kinzett. (A
tovbbiakban ahol oldal, dokumentum olvashat, rtelemszeren HTML oldalra,
dolumentumra vonatkozik.)

A stluslap csatolsa
A kvetkez plda mutatja be a kapcsolds ngy lehetsges mdjt:
<HTML>
<HEAD>
<TITLE>Stluslapok</TITLE>
<LINK REL=STYLESHEET TYPE="text/css" HREF="http://style.com/sajat"
TITLE="sajat">
<STYLE TYPE="text/css">
@import url(http://style.com/sajat)
<!--
H1 {color: blue}
-->
</STYLE>
</HEAD>

<BODY>
<H1>A cmsor kk</H1>
<P STYLE="color: green">Az egsz bekezds zld</P>
</BODY>
</HTML>
A fenti pldban lthat els lehetsg a csatolsra a <LINK> tag hasznlata; kls stluslap
behvsra. Msodik lehetsgknt a dokumentum HEAD szekcijban elhelyezett <STYLE>
tag, ahol kzvetlenl definilhatk a hasznlni kvnt stlusok, vagy az '@import' kulcsszval
kls stluslap importlhat. Az utolsknt bemutatott lehetsg pedig valamely HTML elem
STYLE attribtumnak hasznlata, a dokumentum BODY szekcijban.
A bngszk ltalban figyelmen kvl hagyjk az ltaluk ismeretlen elemeket. Ezrt a rgebbi
bngszk j esetben egyszeren 'elmennek' a <STYLE> elem mellett. Kellemetlenebb
eredmnnyel jr, ha belezavarodnak tartalmba. Ez megelzhet, ha egy standard SGML
utastssal elrejtjk ellk:
<STYLE TYPE="text/css">
<!--
H1 {color: blue}
-->
</STYLE>

Csportosts
A stluslapok mretnek cskkentse rdekben a szelektorok csoportosthatk; vesszvel
elvlasztott listba szedve:
H1, H2, H3 {font-family: verdana}
Hasonl mdon a deklarcik is csoportosthatk:
H1
{
font-family: helvetica;
font-size: 12pt;
font-style: normal;
}
Nhny tulajdonsg eltr csoportostsi szintaktikt is megenged:
H1 {font: bold 12pt helvetica}

rklds
Az els pldban a H1 elem sznbelltst mutattuk be. A kvetkezkben tartalmaz egy <EM>
elemet is:
<H1>A cmsor <EM>mindig</EM> fontos.</H1>
Ha az <EM> elemhez nincs kln szn rendelve, a kiemelt (emphasized) "mindig" sz mindig
rkli a tartalmaz (container) elem sznt, jelen esetben a kket. Hasonlkppen ms stlus-
tulajdonsgok is rkldnek (pl.:font-family, font-size). Alaprtelmezett stlustulajdonsg
belltshoz az alkalmazni kvnt stlust olyan elemhez kell ktni, amely tartalmazza
mindazokat az elemeket, amelyekre a stlust vonatkoztatni akarjuk. A HTML dokumentumokban
erre a clra megfelelhet a <BODY> elem:
BODY
{
color: black;
background: url(hatter.gif) white;
}
Ez a stlusplda a BODY szvegsznt feketre lltja be, httrknt kpet rendel hozz. Ha a kp
nem rhet el, a httrszn fehr lesz. Van azonban nhny stlustulajdonsg, amely nem
rkldik (Ezek kz tartozik pl. a background), de a szl elem httrtulajdonsgt nhny
tartalmazott (contained) elem lthatan hagyja. (Ha egy tblzatnak nem adunk meg 'background'
/httr/ tulajdonsgot, tltszik rajta a BODY httere.)
A tulajdonsgok rtke szzalkban is megadhat:
P {font-size: 10pt}
P {line-height: 120%}
Ebben a pldban a 'line-height' tulajdonsg rtke a 'font-size' tulajdonsg rtknek 120% -a
lesz: 12 pont.

A class szelektor
A HTML elemek stlusbelltsi rugalmassgnak nvelse rdekben a W3Cj attribtumot vett
fel a HTML-be: ez a CLASS (osztly). A 'BODY' minden eleme osztlyba sorolhat, az egyes
osztlyok pedig stluslapbl megcmezhetek.
<HTML>
<HEAD>
<TITLE>Stluslap plda</TITLE>
<STYLE TYPE="text/css">
H1.mezei {color: #00ff00}
</STYLE>
</HEAD>
<BODY>
<H1 CLASS=mezei>Zld, mint a rt</H1>
</BODY>
</HTML>
Az osztlyba sorolt elemekre az rklds ltalnos szablyai vonatkoznak. rklik a
stlusrtkeket a dokumentum struktrjban felettk ll n. szl elemeiktl. Minden azonos
osztlyba tartoz elem megcmezhet egyszerre is, elhagyva a hozzjuk tartoz tag nevt:
.mezei {color: green}
/*minden mezei osztlyba tartoz elem (CLASS=mezei)*/
Megjegyzend, hogy szelektoronknt (HTML elemenknt) csak egy osztly definilhat!

Az ID szelektor
A HTML -be felvtelre kerlt az 'ID' attribtum is, amely lehetv teszi az egyedi azonostk
felvtelt a dokumentumba. Ennek a lehetsgnek klnleges jelentsget ad, hogy
felhasznlhat stluslap szelektorknt, s megcmezhet a '#' eltaggal.
#z98y {letter-spacing: 0,3em}
H1#z98y {letter-spacing: 0,5em}
<P ID=z98y>Szles szveg</P>
Az fenti plda els esetben a kivlasztott formzst a 'P' elemhez feleltettk meg, az 'ID'
attribtumrtk segtsgvel. A msodik esetben ketts felttelt tmasztottunk: a formzs akkor
lp rvnybe, ha a H1 elemet a '#z98y' azonostval (ID) ltjuk el. Ezrt ez mr nem vonatkozik a
'P' elemre. Az ID attribtum szelektorknt val hasznlatval HTML elemekre alapozott
stlustulajdonsgok llthatak be.

sszekapcsolt szelektorok
Az rklds szablyai mentestik a stluslap tervezjt egy csom flsleges gpels all. A
tulajdonsgok belltsa sorn elg egyszer elkszteni az alaprtelmezettet, utna felsorolni a
kivteleket. Ha az 'EM' elemnek a 'H1' elemen bell ms sznt szeretnnk meghatrozni, azt a
kvetkezkpp tehetjk meg:
H1 {color: blue}
EM {color: red}
Mikor a stluslap aktv, minden kiemelt (<EM>) szvegrsz, akr a H1 elemen bell, akr azon
kvl tallhat, vrsre vltozik. Abban az esetben, ha csak egyszer akarjuk a H1 -en bell az EM
elemet vrsre sznezni, a CSS kdot az albbiak szerint kell megvltoztatni:
H1 EM {color: red}
sszekapcsolt szelektorok hasznlata esetn azok az elemek lesznek megcmezve, amelyek a
felsorolsban utoljra llnak. Teht akr kettnl tbb elem is 'egymsba gyazhat' ilyen mdon.

Megjegyzsek
A CSS kdban elhelyezett megjegyzsek hasonlak a C programnyelvben elhelyezett
megjegyzsekhez: A megjegyzsek nem gyazhatk egymsba, illetve ms CSS utastsba.
EM {color: red} /* A kiemelt szvegrsz vrs!*/

Ltszlagos osztlyok s elemek


A CSS-ben a belltand stlus alapesetben egy HTML elemhez van kapcsolva; ez a kapcsolat az
elemnek a dokumentum-struktrban elfoglalt helyre alapozdik. Ez az egyszer modell a
stluslapalkalmazs viszonylag szleskr lehetsgt nyjtja, de nem nyjt lehetsget az sszes
lehetsges megjelents alkalmazsra.
A ltszlagos osztlyok s elemek a HTML lersban nem szerepelnek (ezrt ltszlagosak),
mgis kthetek szelektorokhoz. Tulajdonkppen a bngsz ltal tadott s a stluslapon
keresztl rtelmezett cmzsi mdrl van sz. Ugyangy kell rjuk hivatkozni, mint brmely
elemre, vagy osztlyra; ez a szabvnyos eljrs viselkedsk lersra. Pontosabban:
viselkedsk tagek elmleti sorozataknt rhat le.
A ltszlagos elemek az elemek rszelemeinek megcmzsre hasznlhatk, a ltszlagos
osztlyok pedig lehetv teszik a stluslapon keresztl trtn elemtpus megklnbztetst.

Ltszlagos osztlyok az lkapcsokban


A bngszk kzs tulajdonsga, hogy mskpp jelentik meg a ltogatott linkeket, mint a mg
nem ltogatottakat. Ezt a tulajdonsgot a CSS az <A> elem ltszlagos osztlyain keresztl
kezelni tudja:
A: link {color: red}
A: visited {color: blue}
A: active {color:lime}
Minden 'HREF' attribtummal rendelkez <A> elem a fenti csoportbl egyet s egy idben csak
egyet jell ki. A bngszk pedig kivlaszjk, hogy az adott linket -llapottl fggen- milyen
sznnel jelentsk meg. llapotukat a ltszlagos osztly hatrozza meg:
link - Nem ltogatott hivatkozs;
visited - Mr ltogatott hivatkozs;
active - Amelyik hivatkozs ppen ki van vlasztva (egrkattintssal).
Egy lkapocs ltszlagos osztlynak formzsa ugyangy trtnik, mintha az osztly kln
volna definilva. A bngszk nem kvetelik meg az aktulisan megjelentett dokumentum
jrabetltst, amikor egy lkapocs ltszlagos osztlya ltal meghatrozott vltoztats
esedkess vlik. (Pl.: a CSS szabvnyos eljrsa lehetv teszi az 'active' link 'font-size'
tulajdonsgnak futsidej megvltoztatst gy, hogy az aktv dokumentumot nem kell jra
betltenie a bngsznek, mikor az olvas kivlaszt egy 'visited' linket.). A ltszlagos osztlyok
nem feleltethetek meg a norml osztlyoknak s fordtva; ezrt az albbi pldban bemutatott
stlusszablyok nem befolysoljk egymst:
A: link {color: red}
<A CLASS=link NAME=target5>...</A>
Az lkapocs ltszlagos osztlyoknak nincs hatsuk az 'A' -n kvl ms elemre. Ezrt az
elemtpus el is hagyhat a szelektorbl:
A: link {color: red}
:link {color: red}
Fenti kt deklarciban a szelektor ugyanazt az elemet fogja kivlasztani. A ltszlagos osztlyok
nevei kis- s nagybetrzkenyek. A ltszlagos osztlyok hasznlhatak a kapcsold
szelektorokban is:
A: link IMG {border: solid blue;}
A ltszlagos osztlyok kombinlhatk a norml osztlyokkal:
A.external: visited {color: blue}
<A CLASS=external HREF="http://valahol.mashol.com">Kls (external)
hivatkozs</A>
Ha a fenti pldban lev hivatkozs ltogatott vlik (visited), szne kkre vltozik.
Megjegyzend, hogy a norml osztlyok neveinek a ltszlagos osztlyok neveit meg kell elznie
a szelektorban.

Tipografikai ltszlagos elemek


Nhny kzs megjelentsi effektus nem strukturlis elemhez kapcsolhat, hanem inkbb a
kpernyn elemeket kirajzol tipografikai tulajdonsgokhoz. A CSS -ben kt ilyen tipografikai
ttel cmezhet meg ltszlagos elemen keresztl: egy elem tartalmnak els sora s az els bet.
A 'first-line' ltszlagos elem
A 'first-line' ltszlagos elem az els sor klnleges formzshoz hasznlhat:
<STYLE TYPE="text/css">
P:first-line {font-variant: small-caps}
</STYLE>
A tagek elmleti sorozata a kvetkezkpp nz ki:
<P>
<P:first-line>
A szveg els sora
</P:first-line>
kiskapitlis betkkel jelenik meg.
</P>
A 'first-line' ltszlagos elem hasznlata hasonl a soron belli elemekhez, azonban figyelembe
kell venni nhny megszortst. Csak a kvetkezkben felsorolt tulajdonsgok alkalmazhatk
hozz:
Bettpus tulajdonsgok
Szn- s httr tulajdonsgok
'word-spacing' ,
'letter-spacing' ,
'text-decoration' ,
'vertical-align' (csak, ha a 'float' tulajdonsg rtke 'none'; ),
'text-transform',
'line-height',
'clear'.

A 'first-letter' ltszlagos elem


A 'first-letter' ltszlagos elem gyakran elfordul hasznlati lehetsge az inicil kialaktsa,
ami gyakran hasznlt tipogrfiai effektus. A kvetkezkben felsorolt tulajdonsgok
alkalmazhatk hozz:
Bettpus tulajdonsgok,
Szn- s httr tulajdonsgok,
'text-decoration',
'vertical-align' (csak, ha a 'float' tulajdonsg rtke 'none';),
'text-transform',
'line-height',
marg tulajdonsgai,
helykitlt (padding) tulajdonsgok,
szeglytulajdonsgok,
'float',
'clear'.
A kvetkez plda bemutatja, hogyan kszthet ktsoros inicil:
<HTML>
<HEAD>
<TITLE>Lapcm</TITLE>
<STYLE TYPE="text/css">
P: {font-size: 12pt; line-height: 12pt}
P:first-letter: {font-size: 200%; float:left}
</STYLE>
</HEAD>
<BODY>
<P>
A sor els betje ktszer akkora lesz, mint a tbbi.
</P>
</BODY>
</HTML>
A bngsztl fgg, mely karakterek tartoznak a 'first-letter' elemhez. ltalban a bevezet
idzjelet is belefoglaljk. A 'first-letter' ltszlagos elem csak blokkszint elemhez kapcsolhat.

Ltszlagos elemek a szelektorokban


Kapcsold szelektorok esetn a ltszlagos elemeknek a szelektor utols elemeknt kell
szerepelnik:
BODY P:first-letter {color: purple}
A ltszlagos elemek kombinlhatak a szelektorban az osztlyokkal is:
P.alap:first-letter {color: red}
<P CLASS=alap>Els bekezds</P>
A fenti pldban lthat stlusmeghetrozs az sszes olyan P elem els betjt bborra sznezi,
amelynek osztlya 'alap' (class=alap). Ha ltszlagos elemeket osztlyokkal, vagy
ltszlagos osztlyokkal kombinlunk, a ltszlagos elemet a szelektor utols tagjaknt kell
elhelyezni. Egy szelektorban csak egy ltszlagos elem lehet elhelyezve.

Ltszlagos elemek tbbszrzse


Nhny ltszlagos elem kombinlhat:
P {color: red; font-size: 12pt}
P:first-letter {color: green; font-size: 200%}
P:first-line {color: blue}
A fenti plda minden 'P' elem els betjt zldre, a betmretet pedig 24 pontosra lltja. Az els
sor tbbi rsze kk lesz, a tbbi rsze pedig vrs.
Megjegyzend, hogy a 'first-letter' elemet a 'first-line' elem tartalmazza. A 'first-line' elemre
belltott tulajdonsgokat a 'first-letter' elem rkli, de az rklds szablynl a 'first-letter'
elemre kln belltott tulajdonsg-rtk ersebb.

Rangsor
Ebben a fejezetben a terminolgia egy j elemt kell bevezetnnk: a "slyt". A stluslap-
szablyok slya jelzi, hogy az adott szably milyen prioritst lvez. Termszetszeren a nagyobb
sly szably ersebben rvnyesl, mint az alacsonyabb sllyal rendelkez.
CSS hasznlatval egyidejleg egynl tbb stluslap is befolysolhatja a HTML oldal
megjelenst. E tulajdonsgnak kt f oka van: a modularits s a szerz (tervez) / olvas -
egyensly.
Modularits A stluslap tervezje a redundancia cskkentse rdekben tbb stluslap
hasznlatt kombinlhatja:
@import url(http://www.style.org/egyik);
@import url(http://www.style.org/masik);
H1 {color: red} /* Fellbrlja az importlt stlust */
Szerz / olvas egyensly: Stluslappal a szerz s az olvas is befolysolhatja a
dokumentum megjelenst. Ehhez mindkettejknek ugyanazt a stlusnyelvet kell hasznlniuk,
gy tkrzve a web egyik alapvet tulajdosgt: mindenki kzzteheti elkpzelst. A
bngszk a sajt stluslapokra hivatkozs kivlasztst szabadon lehetv teszik.
Nha ellentt merl fel a dokumentum megjelenst meghatroz stluslapok kztt. Az ellentt
feloldst a stlusszablyok slyozsa teszi lehetv. Alaprtelmezsben az olvas ltal fellltott
stlusszablyok slya kisebb, mint a dokumentum szerzje ltal fellltottak. Teht, ha ellentt
merl fel egy dokumentum szerzi s olvasi stluslapja kztt, a szerzi stluslap kerl
alkalmazsra. Mind a szerzi, mind az olvasi stluslap-szablyok fellbrljk a bngsz
alaprtelmezett belltsait.
Az importlt stluslapok szintn jl meghatrozott rangsorban llnak egymssal. A rangsor az
albb meghatrozott szablyok szerint dl el. Brmely szably, amely a stluslapban van lerva,
ersebb, mint az importlt stluslap(ok)ban lev(k). Teht, az importlt stluslapokban lert
szablyok slya kisebb a stlusok rangsorban, mint a stluslapban magban lert szablyok. Az
importlt stluslapok maguk is rekurzvan importlhatnak s ezltal fellbrlhatnak ms
stluslapokat.
A CSS minden @import utastsnak a stluslap legelejn kell megjelennie, megelzve minden
ms deklarcit. Ez megknnyti annak tlthatsgt, hogy melyik stluslap melyik msikat
brlja fell.

'important'
A stluslapok tervezi deklarciik slyt megnvelhetik:
H1 {color: black ! important; background: white ! important }
P {font-size: 12pt ! important; font-style: italic }
Ebben a pldban az els hrom deklarci slya a fontos! kiemelssel meg van nvelve, mg az
utols deklarci slya norml. Egy olvas ltal fellltott fontos szably prioritsban megelzi a
szerz norml sly szablyt. A szerz ltal fellltott fontos szably prioritsban megelzi az
olvas ltal fellltott fontos szablyt.

A rangsor fellltsa
A deklarci-rangsor fellltsnak szablyai lnyegesek a CSS mkdsben. Egy
elem/tulajdonsg pros rtknek meghatrozshoz az albbi algoritmust kell kvetni:
1. A krdses elem/tulajdonsg prosra alkalmazott sszes deklarci elkeresse. A
deklarci akkor 'alkalmazott', ha a krdses elem szelektorknt szerepel. Ha nincs az
elemhez alkalmazott deklarci, az rkls szablyai rvnyeslnek. Ha nincs rklt
rtk (pl.: a HTML elem esetben), a kezdeti rtkek lesznek irnyadak.
2. A deklarcik explicit slya szerinti rendezs: az !important jells deklarcik
ersebbek, mint a jelletlen (norml) deklarcik.
3. Eredet szerinti rendezs: A szerz stluslapjban meghatrozott szablyok mint az olvas
ltal meghatrozottak; mindkett ersebb a bngsz alaprtelmezett belltsainl. Az
importlt stluslapok eredete megegyezik annak a stluslapnak az eredetvel, ahonnan
importltk.
4. Szelektor egyedisge szerinti rendezs: Az egyedileg meghatrozott szelektororhoz
tartoz szably ersebb, mint az ltalnos meghatrozsban lertak. Az egyedisg
megllaptshoz meg kell llaptani a szelektorban tallhat ID attribtumokat (a), a
CLASS attribtumokat (b), s a tag-nevek szmt (c). A hrom szm 'sszelncolsval'
(concatenating) llapthat meg az adott szelektor egyedisge. A knnyebb megrts
kedvrt nhny plda:
LI {...} /* a=0 b=0 c=1 => egyedisg = 1 */
UL LI {...} /* a=0 b=0 c=2 => egyedisg = 2 */
OL UL LI {...} /* a=0 b=0 c=3 => egyedisg = 3 */
LI.red {...} /* a=0 b=1 c=1 => egyedisg = 11 */
OL UL LI.red {...} /* a=0 b=1 c=3 => egyedisg = 13 */
#x34y {...} /* a=1 b=0 c=0 => egyedisg = 100 */

A ltszlagos elemeket s ltszlagos osztlyokat a szmts sorn norml elemekknt,


osztlyokknt kell figyelembe venni.
5. Rendezs a meghatrozs sorrendje szerint: Ha kt szably ugyanakkora sllyal br, a
ksbb meghatrozott gyz. Az importlt stluslapban lert szablyok a sajt lapban rtak
utn lesznek csak figyelembe vve.
A tulajdonsg-rtkek keresse megszakthat, ha az egyik kirtkelt szably slya egy
elem/tulajdonsg vonatkozsban egyrtelmen nagyobb brmely ms szablynl.
Egy elem STYLE attribtumban trtn deklarcinak ugyanolyan slya van, mint egy - a
stluslap vgn meghatrozott - ID alap szelektornak.
<STYLE TYPE="text/css">
#x97z {color: blue}
</STYLE>

<P ID=x97z STYLE="color: red">


A fenti pldban a P elem szne vrs (red) lesz. Br mindkt deklarcis forma egyedisge
megegyezik, mgis - a rangsor-meghatrozs 5. pontjban rt szably alkalmazsa miatt - a
STYLE attribtumban lev deklarci ersebb lesz a STYLE elem ltal tartalmazott
deklarcinl.

Formzsmodell
A CSS egy egyszer, dobozszer formzsi modellt hasznl., ahol minden elemformzs
eredmnye egy, vagy tbb ngyszgletes dobozknt kpzelhet el. Minden doboznak van egy

'magja', az t krlvev 'kitltssel' (padding), szegllyel (border) s margval (margin).

A marg, a szegly s a kitlts mrete egyenkt meghatrozhat a margin, a border s a


padding tulajdonsgok rtkeinek belltsval. A kitltterlet htrszne megegyezik az
elemvel, amelyet a background tulajdonsg hatroz meg. A szegly szne s stlusa szintn a
border tulajdonsg belltsval hatrozhat meg, mg a marg mindig tltsz, gy a szl elem
llandan lthat marad. A doboz szlessge az elem, a kitlts, a szegly s a marg terletnek
sszege. A formzsok szempontjbl kt elemtpus klnbztethet meg: a >blokkszint elem
s a soron belli elem.

Blokkszint elemek
A kvetkez plda bemutatja, hogyan formzhet CSS hasznlatvel egy kt gyermek-elemet
tartalmaz UL elem. A plda egyszerstse okn szeglyeket nem definilunk. Szintn ez okbl
hasznljuk rtkekknt az ABC kis- s nagybetit, amelyek nem szabvnyos CSS
meghatrozsok, de ebben az esetben hasznlatuk megknnyti a tblzat s a pldastlus
sszevetst.

<STYLE TYPE="text/css">
UL {
background: red;
margin: A B C D;
padding: E F G H;
}
LI {
color: white;
background: blue; /* fehr szveg kk httren */
margin: a b c d;
padding: e f g h;
}
</STYLE>
...
<UL>
<LI>Els elem
<LI>Msodik elem
</UL>
Gyakorlatilag, a kitlts s a marg tulajdonsgai nem rkldnek. De, ahogy a plda is mutatja,
az elemek szlkhz s 'testvrekhez' (velk egyenrangakhoz) viszonytott elhelyezkedse
lnyeges, mert ezeknek az elemeknek kitlts- s margtulajdonsgai hatst gyakorolnak a
gyermek elemekre. Ha az elz pldban lettek volna szeglyek is, azokat a kitlts s a marg
kztt kellett volna megjelenteni.
A kvetkez bra a dobozmodell hasznlatakor rvnyes terminolgirl nyjt ttekintst:
A jellsek fordtsa szndkosan maradt el, ugyanis ugyanezek a kifejezsek szerepelnek a CSS
nyelvtanban is. Azok kedvrt, akik szmra az angol nyelv bizonyos nehzsget okoz, az
albbiakban rvid szszedetet tesznk kzz:
bottom - als
left - bal
top - fels
right - jobb
margin - marg
border - szegly
padding - kitlts
inner - bels
E kis kitr utn trjnk vissza a dobozmodellhez:
A bal kls l a formzott elem bal szle; a hozz tartoz kitltssel, szegllyel s margval. A
bal bels l pedig magnak a tartalomnak a szlt jelenti, kitlts, szegly s marg nlkl. A
jobb oldal ennek tkrkpe. Ugyanez a szably rvnyes az elem cscsra (top) s aljra
(bottom).
Egy elem szlessgn a tartalom szlessgt rtjk, vagyis a bal bels l s a jobb bels l kzti
tvolsgot. Az elem magassgn pedig a tartalom magassgt, azaz a rajzon inner top s inner
bottom kifejezssel jellt magassgok kzti tvolsgot.

Fggleges formzs
A nem 'lebeg' blokkszint elemek margszlessge hatrozza meg az t krlvev doboz szlei
kzti minimlis tvolsgot. Kt, vagy tbb sszevont szomszdos marg (rtsd: nincs kztk
szegly, kitlts, vagy tartalom) kzsen hasznlja a stluslapban meghatrozott legnagyobb
'margin' rtket. A legtbb esetben a fggleges margk sszevons utn vizulisan kellemesebb
ltvnyt nyjtanak, mint amit a tervez gondolt. Az elbbi pldban a kt LI elem kztti marg
van sszevonva, s kzsen hasznljk az els LI elem 'margin-bottom' s a msodik LI elem
'margin-top' tulajdonsga kzl a nagyobbat. Hasonlkppen; ha az UL elem s az els LI elem
kzti kitlts (padding - az E jel konstans) 0 rtk, az UL elem s az els LI elem kzti marg
sszevondik.

Vzszintes formzs
A nem 'lebeg' blokkszint elemek vzszintes pozcijt s mrett ht tulajdonsg hatrozza
meg: a 'margin-left', 'border-left', 'padding-left', 'width', 'padding-right', 'border-right', 'margin-
right'. Ezen tulajdonsgok rtkeinek sszege mindig megegyezik a szl elem 'width' rtkvel.
Alaprtelmezsben agy elem szlessgnek rtke 'auto'. Ha az elem nem helyettestett elem, a
szlessg rtkt a bngsz szmolja ki, a fent emltett ht tulajdonsg rtknek sszegzsvel.
Ha az elem helyettestett elem, 'width' tulajdonsgnak 'auto' rtke automatikusan kicserldik
az elem sajt szlessg-rtkre. A ht tulajdonsg kzl hromnak rtke llthat 'auto' -ra:
'margin-left', 'width', 'margin-right'. A 'width' tulajdonsgnak van egy nemnegatv, bngsz ltal
meghatrozott minimum rtke (amely elemenknt vltozik s mindig msik tulajdonsgtl
fgg). Ha a 'width' rtke e hatrrtk al kerl, akr azrt, mert gy lett belltva, vagy mert
rtke 'auto' volt s az albbi szablyok miatt vlt rtke tl alacsonny: rtke kicserldik a
minimumknt hasznlhat rtkkel. Ha pontosan egy 'margin-left', 'width', vagy 'margin-right'
rtke 'auto'; a bngsz ennek rtkt gy lltja be, hogy kiadja a fentebb felsorolt ht
tulajdonsghoz tartoz maradk rtket; amennyi szksges a szl elem szlessgnek
elrshez. Ha a tulajdonsgok kzl egyik sem 'auto'; a 'margin-right' tulajdosg rtke lesz
'auto'. Ha a hrombl egynl tbb 'auto' s kzlk egyik a 'width'; a tbbi tulajdonsg ('margin-
left's/vagy 'margin-right') rtke nullra lesz lltva, s a 'width' kapja meg azt az rtket,
amennyi szksges a szl elem szlessgnek elrshez. Abban az esetben, ha a 'margin-left',
s 'margin-right' tulajdonsgok vannak 'auto' -ra lltva, mindkett egyenl rtket kap. A
fggleges margkkal ellenttben, a vzszintes margk nem sszevonhatk.

Listaelemek
Azok az elemek, amelyek 'list-item' tulajdonsgnak rtke 'display', blokkszint elemekknt
formzdnak, s listajell elzi meg ket. A jell tpust a list-style tulajdonsg hatrozza
meg. A list-style tulajdonsg rtke szerint a jell elhelyezkedse az albbi lehet:
<STYLE TYPE="text/css">
UL {list-style: outside}
UL.compact {list-style: inside}
</STYLE>

<UL>
<LI>Els listaelem tartalma
<LI>Msodik listaelem tartalma
</UL>

<UL CLASS="compact">
<LI>Els listaelem tartalma
<LI>Msodik listaelem tartalma
</UL>

A fenti pldt a bngsz gy jelenti meg:


* Az els listaelem
tartalma
* A msodik listaelem
tartalma

* Az els listaelem
tartalma
* A msodik listaelem
tartalma

Jobbrl-balra rtelmezend szvegek esetben rtelemszeren a listajell a doboz jobb oldalra


kerl.

Lebeg elemek
A 'float' tulajdonsg alkalmazsval egy elem elhelyezkedse meghatrozhat az elemek ltal
ltalban elfoglalt helyek oldals vonaln kvl is; ez esetben formzsuk mdja a blokkszint
elemekhez hasonl. Pldaknt: ha egy kp 'float' tulajdonsgt 'left' (bal) rtkre lltjuk be,
eredmnykppen a kp addig toldik balra, mg egy msik blokkszint elem margjt, kitltst,
vagy szeglyt el nem ri. Jobb oldaln a lap tbbi tartalma fogja krbefutni. Az elem margi,
szeglyei, kitltsei megmaradnak, de margi a szomszdos elem margival sosem lesznek
sszevonva. A lebeg elemek pozicionlsa a kvetkez szablyok szerint trtnik
1. Egy balra igaztott lebeg elem bal kls le nem lehet balrbb, mint szl eleme bal
bels le. A jobbra igaztott lebeg elemekre ugyanilyen szably rvnyes.
2. Egy balra igaztott lebeg elem bal kls lnek jobbra kell esnie brmelyik (a HTML
forrsban) korbban lert balra igaztott lebeg elemtl, vagy tetejnek kell lejjebb lennie,
mint az elbb lert aljnak. A jobbra igaztott lebeg elemekre ugyanilyen szably
rvnyes.
3. Egy balra igaztott lebeg elem jobb kls le nem eshet jobbra brmely tle jobbra es,
jobbra igaztott lebeg elem bal kls ltl. A jobbra igaztott lebeg elemekre
ugyanilyen szably rvnyes.
4. A lebeg elem teteje nem lehet magasabban, mint szl elemnek bels magassga (inner
top).
5. A lebeg elem teteje nem lehet magasabban, mint brmely korbbi lebeg, vagy
blokkszint elem teteje.
6. Egy lebeg elem teteje nem lehet magasabban, mint brmely 'sordoboz', amelynek
tartalma a HTML forrsban megelzi a lebeg elemet.
7. A lebeg elemet olyan magasra kell elhelyezni, amennyire csak lehet.
8. A balra igaztott lebeg elemet annyira balra kell elhelyezni, amennyire csak lehet; a
jobbra igaztott lebeg elemet pedig annyira jobbra kell elhelyezni, amennyire csak lehet.
Ez az igaztsi md elnyben rszesl a tbbi (ms) balra / jobbra igaztsi eljrssal
szemben.
<STYLE TYPE="text/css">
IMG {float: left}
BODY, P, IMG {margin: 2em}
</STYLE>

<BODY>
<IMG SRC="kep.gif">
Plda szveg, melynek nnincs ms szerepe, ...
</BODY>
A fenti pldaszveg formzsa a kvetkezkpp alakul:
Megjegyzs: a lebeg IMG elemet a P elem tartalmazza, teht jelen esetben az a szl elem.
Van kt olyan eset, amikor egy lebeg elemek marg-, szegly-, s kitlt terletei tfedhetik
egymst:
Amikor a lebeg elemnek negatv rtk margja van: a lebeg elem negatv margja gy
lesz figyelembe vve, mint ms blokkszint elem.
Amikor a lebeg elem szlesebb, vagy magasabb, mint az t tartalmaz elem.

Soron belli elemek


Azok az elemek, amelyek nem formzhatk blokkszint elemknt; a soron belli elemek. Egy
soron bell hasznlhat tbb soron belli elem is. Figyeljk meg a pldt:
<P>Nhny <EM>kiemelt</EM> sz jelenik meg a <STRONG>sorban</STRONG>
A P elem ltalnosan hasznlt blokkszint elem, mg az EM s a STRONG soron belli elemek.
Ha a P elem szlessge egy egsz sort kitlt, akkor abban a sorban kt soron belli elem is
tallhat lesz.
Nhny kiemelt sz jelenik meg a sorban
Ha a P elem szlessge tbb, mint egy sort foglal el, a soron belli elem 'doboza' felosztdik a kt
sor kztt:
<P>Nhny <EM>kiemelt sz jelenik</EM> meg; a sorban
Nhny kiemelt sz
jelenik meg a sorban.
Ha egy soron belli elemhez marg, szegly, kitlts, vagy szvegdekorci van rendelve, ezek
nem lesznek hatssal a sortrsre.

Helyettestett elemek
A helyettestett elem olyan elem, amely megjelentsekor avval a tartalommal van helyettestve,
amelyre hivatkozsknt mutat. Pldul a egy HTML kdban szerepl IMG elem az SRC
attribtumban szerepl kppel lesz megjelnsekor helyettestve. Ilyenkor a helyettestett elemek
magukkal hozzk sajt mreteiket is. Ha a width rtke auto, az elem szlessgt
megjelentsekor sajt szlessge hatrozza meg. Ha stluslapon keresztl ms (nem auto) rtk
van meghatrozva, a helyettestett elem azzal az rtkkel kerl megjelentsre. (A mretezsi
eljrs a mdia tpustl fgg.) A height tulajdonsgra hasonl szablyok vonatkoznak.
Helyettestett elemek lehetnek soron belli, vagy blokkszint elemek is.
Sorok magassga
Minden elemnek van line-height, azaz sormagassg tulajdonsga, amely egy szvegsor teljes
magassgt adja meg. A szvegsor teljes magassgt a szveg s az al-fl elhelyezett res
helyek sszessge adja meg. Pldaknt: ha egy szveg 12pt magas, s a line-height rtke 14pt;
kt kppontnyi res hely addik hozz a betmrethez: egy kppont a sor fl, egy kppont al.
A betmret s a sormagassg kzti klnbsget vezetsnek nevezzk. A vezets-rtk fele a fl-
vezets. Formzskor minden szvegsor egy-egy sordobozknt rtelmezhet.
Ha a szvegsor egyes rszei klnbz magassg-rtkeket tartalmaznak (tbb klnbz soron
belli elem), akkor minden egyes rsznek megvan a maga sajt vezets-rtke is. A sordoboz
magassgt a legmagasabb rsz tetejtl a legmlyebbre r rsz legaljig mrjk.
Megjegyzend, hogy a 'legmagasabb' s a 'legmlyebb'rtkek nem szksgszeren tartoznak
ugyanazon elemhez, mivel az elemek fggleges pozicionlsa a vertical-align tulajdonsg
belltsval trtnik. Egsz bekezds formzsa esetn a minden sordoboz kzvetlenl az elz
al kerl. A nem helyettestett elemekhez tartoz als s fls kitltsek, szeglyek s margk
nem befolysoljk a sordoboz magassgt. Ms szval: ha a kivlasztott kitltshez, vagy
szeglyhez tartoz line-height tulajdonsg tl kicsi, a szomszdos sorok szvegei r fognak
takarni.
A sorban tallhat helyettestett elemek (pl.: kpek) megnvelhetik a sordoboz magassgt, ha a
helyettestett elem teteje (beletve a hozz tartoz kitltst, szeglyt, margt is) a legmagasabb
szvegrsz fl, illetve alja a legalacsonyabbra r szvegrsz al r.
ltalnos esetben, amikor amikor az egsz bekezdsnek egy line-height rtke van, s nincsenek
nagyobb mret kpek, a fenti szablylers biztosan meghatrozza, hogy a prhuzamos sorok
alapvonalai pontosan a line-height tulajdonsgban megadott rtkre legyenek egymstl.

A Vszon
A Vszon (CANVAS) a bngszfellet azon rsze, amelyre a dokumentum s begyazott
elemei kirajzoldnak. A vszon nem a dokumentum strukturl elemeinek felel meg, s ez a
dokumentum formzsa sorn kt fontos krdst vet fel.
A bellts sorn honnan szmtjuk a vszon mreteit?
Amikor a dokumentum nem fedi le az egsz vszont, az res terlet hogyan lesz
kirajzolva?
Az els krdsre adhat vlasz az, hogy a vszon kezdeti szlessge a bngszablak mretn
alapul, de a CSS a pontos mretbelltst a bngszre hagyja. sszer a bngszre hagyni a
vszon mretnek megvltoztatst az ablak tmretezsekor is, mert ez szintn kvl esik a CSS
hatkrn.
A HTML kiterjesztsei szolgltatnak pldt a msodik krds megvlaszolshoz: A BODY
elem attribtumai lltjk be a htteret; az egsz vszonra vonatkozan. A laptervezk
elvrsainak tmogatsra a CSS-ben bevezetsre kerlt egy, a vszon htterre vonatkoz
szably:
Ha a HTML elem background rtke nem transparent, akkor az kerl hasznlatba, egybknt
pedig a BODY elem background attribtuma.
Fenti szably hasznlat kzben a kvetkezkpp jelenhet meg:
<HTML STYLE="background: url(http://style.com/hatter.jpg)">
<BODY STYLE="background: red">
A pldban a vszont beterti a 'hatter.jpg' nev kp. A BODY elem httrszne pedig (amely
nem biztos, hogy teljesen lefedi a vszont), vrs lesz.
CSS tulajdonsgok
A stluslapok a dokumentumok megjelenst a stlustulajdonsgokhoz hozzrendelt rtkekkel
befolysoljk. Ez a fejezet bemutatja a definilt stlustulajdonsgokat, s az azokhoz rendelhet
rtkeket.

A tulajdonsg-rtk prok jellsi rendszere


A kvetkezkben a tulajdonsgokhoz tartoz lehetsges rtkeket az albbi jelrendszer s
szintaktika szerint fogjuk bemutatni:
rtk: N | NW | NE
rtk: [<hossz> | vastag | vkony ]{1,4}
rtk: [<family-name>, ]* <family-name>
rtk: <url>?<szn> [/<szn>]?
rtk: <url> || <szn>
A '<' s '>' jelek kztt szerepl szavak jelentik az rtk tpust. A leggyakrabban hasznlt kzs
tpusok kz tartozik a <hossz>, a <szzalk>, az <url>, a <szm> s a <szn> (length,
percentage, url, number, color). A tbbi specializlt tpus (pl.: font-family, vagy border-style)
lersa a hozzjuk tartoz tulajdonsgnl tallhat.
A kulcsszavak bet szerint szerepelnek, idzjelek nlkl. A trtjelet ( / ) s a vesszt ( , ) szintn
ugyanoda s ugyangy kell elhelyezni, ahova s ahogyan a szablyok elrjk.
Az egyms mell rt kifejezsek azt jelentik, hogy mindegyikk hasznlhat, a mutatott
sorrendben. Fggleges vonal (A|B) jelzi az alternatvkat: a felsoroltak kzl egy fordulhat el.
Ketts fggleges vonal (A||B) jelzi, hogy a felsoroltak kzl vagy A, vagy B, vagy mindkett
elfordulhat, tetszleges sorrendben. A szgletes zrjelek ([ ]) a csoportostsra utalnak. A
tulajdonsgok egyms mell helyezse ersebb, mint a fggleges vonal; a ketts fggleges
vonal ersebb, mint a fggleges vonal. gy az "a b|c||d e" kifejezs megegyezik az "[a b]|[c||[d
e]]" kifejezssel. Minden tpust, kulcsszt, vagy zrjeles csoportostst kvethet egy, a
kvetkez mdostk kzl:
Csillag (*) jelzi, hogy az elzekben rt tpus, sz, vagy csoport 0 (nulla), vagy annl tbb
esetben ismtelhet.
Plusz jel (+) jelzi, hogy az elzekben rt tpus, sz, vagy csoport 1, vagy tbb esetben.
Krdjel (?) jelzi, hogy az elzekben rt tpus, sz, vagy csoport hasznlata opcionlis.
Kapcsos zrjelbe rt szmpr ({A,B}) jelzi, hogy az elzekben rt tpus, sz, vagy csoport
lagalbb (A), de legfeljebb (B) szm esetben ismtelhet.

Font tulajdonsgok
A stluslapok leggyakoribb hasznlata a fonttulajdonsgok belltsa. Balszerencsre, nem ltezik
ltalnos rvny s szles kren elfogadott mdszer a bettpusok osztlyozsra, nincs
terminolgia, ugyangy alkalmazhatnnk a klnbz bettpus-csaldokra. (az 'italic' jelz
ltalnosan hasznlt a dlt szveg jelzsre, de a dlt betk jelezhetek az Oblique, Slanted,
Incline, Cursive, vagy Kursiv cmkkkel is.) Ezrt nem egyszer problma ltalnosan
hasznlhat tulajdonsgokat hozzrendelni egy meghatrozott bettpushoz. A CSS-ben a font-
family, font-style, font-variant, font-weight, font-size s font tulajdonsgok vannak lerva.
Bettpusok megfeleltetse
Mivel nem ltezik ltalnos rvny s szles kren elfogadott mdszer a bettpusok
osztlyozsra, a tulajdonsgok s betmegjelentsek sszeprostsa fokozott vatossgot
kvn. A tulajdonsgok megfeleltetse jl definilt sorrendben trtnik, hogy biztostva legyen a
konzisztencia a megfeleltetsi mvelet vgeredmnye s a bngsz kpessgei kztt.
1. A bngsz minden ltala ismert bettpushoz, kszt (vagy megnyit) egy adatbzist,
amely tartalmazza az alkalmazhat CSS tulajdonsgokat. A bngsz ismeri az elrhet
bettpusokat, mivel azok a helyi szmtgpre vannak teleptve. Ha kt bettpus is
megfelel ugyanannak a tulajdonsgnak, a bngsz az egyiket figyelmen kvl hagyja.
2. Egy adott elemnl, s az elem minden karakterre vonatkozan a bngsz sszegyjti az
elemhez alkalmazhat bettpus-tulajdonsgokat. A teljes tulajdonsg-kszlet
hasznlathoz a bngsz a font-family tulajdonsgot hasznlja, hogy kivlasszon egy
(ideiglenes) prba-fontcsaldot. A fennmarad tulajdonsgokat pedig a minden
tulajdonsgra lert megfeleltetsi kritrium szerint teszteli. Ha az sszes fennmarad
tulajdonsgot sikerlt megfeleltetnie, akkor megtallta a megfelel font-kinzetet az adott
elemhez.
3. Ha nincs a 2. lpsnek megfelel font-kinzet a font-family tulajdonsg rtkei kztt, de
van alternatv fontcsald az elrhet betkszletben, a msodik lpsben lert
megfeleltetsi eljrs azzal folytatdik.
4. Ha van megfelel kinzet font, de a kszlet nem tartalmazza az brzoland karaktert, s
van kvetkez alternatv font-csald; a msodik lps ismtldik.
5. Ha nincs megfelel font a 2. lpsben kivlasztott betkszlet-csaldban, a bngsztl
fgg alaprtelmezett betkszlet-csld kerl hasznlatba, s a bngsz azon bell
ismtli meg a 2. lpst, amg vgl megtallja az elrtnak legjobban megfelelt.
A tulajdonsgonknti megfeleltets szablyai (2. lps) a kvetkezk:
1. Az els keressi felttel a font-style. (Az 'italic' keressi felttel akkor megfelel, ha vagy
van a bngsz font-adatbzisban, amely megfelel a CSS 'italic', vagy 'oblique'
kulcsszava ltal meghatrozottaknak.)
2. A kvetkez megfeleltetsi felttel a 'font-variant'. 'normal' az a font, amely nincs 'small-
caps'-knt megjellve. 'small-caps' az a font, amely (1) gy van megjellve, (2) az a font,
amelyikbl a 'small-caps'-et ellltjk, vagy (3) az a font, amely esetben kisbetk
nagybetkkel vannak helyettestve. Kiskapitlis bettpust el lehet lltani elektronikus
ton is, norml fontbl, a nagybetk tmretezsvel.
3. A kvetkez megfeleltetsi felttel a 'font-weight'; ez sosem okozhat hibt (lsd a 'font-
weight' tulajdonsgot, lejjebb).
4. A 'font-size' tulajdonsg megfeleltetse a bngsz trshatrn trtnik. (ltalban, a
mretezhet fontok mretei a legkzelebbi egsz szm pixel rtkre vannak kerektve; a
bittrkpes fontok megjelentsnek trse 20% krl van.)
'font-family'
rtke lehet: [[<family-name>|<generic family>],]*[<family-name>|<generic family>]
Alaprtelmezs: Bngszfgg.
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
rtke elsbbsgi listja a fontcsald neveknek, s/vagy az ltalnos fontcsald-neveknek.
Eltren a legtbb ms CSS tulajdonsgtl, az rtkeket vesszvel kell elvlasztani, gy jelezve,
hogy azok alternatvk.
BODY {font-family: gill, helvetica, sans-serif}
A felsorolsban hasznlhat tpusok:
<family-name>
A vlasztott fontcsald neve. Fenti pldban fontcsald a 'gill' s a 'helvetica'.
<generic-family>
Fenti pldban az utols rtk az ltalnos fontcsald-nv. A kvetkez ltalnos fontcsald-
nevek vannak definilva:
serif; (pl: Times)
sans-serif (pl: Helvetica)
cursive (pl: Zapf-Chancery)
fantasy (pl: Western)
monospace (pl: Courier)
Az ltalnos fontcsaldok, mint vgs eset jhetnek szmtsba. A szkzket is tartalmaz
fontneveket idzjelbe kell tenni:
BODY {font-family: "new century schoolbook", serif}
'font-style'
rtke lehet:
normal | italic | oblique
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A 'font-style' tulajdonsg hasznlatval lehet egy fontcsaldbl kivlasztani a norml, vagy dlt
bets megjelenst (az 'italic' s az 'oblique' is dlt bett eredmnyez).
Az rtkek azokat a bettpusokat vlasztjk ki a bngsz fontadatbzisbl, amelyek az
rtknek megfelelen vannak megjellve. Ha 'italic' jells font nem elrhet, helyette az
'oblique' kerl hasznlatba. Az 'oblique' jells fontokat a bngsz futsidben is generlhatja;
egy norml (ll) font megdntsvel.
H1, H2, H3 {font-style: italic}
H1 EM {font-style: normal}
Fenti pldban a H1 elemen bell szerepl kiemelt (EM) szveg norml betkkel jelenik meg.
'font-variant'
rtke lehet:
normal | small-caps
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A fontcsaldon belli megjelentsvltozatok msik tpusa a kiskapitlis bettpus. A kiskapitlis
megjelentsnl a kibetk hasonltanak a nagybetkhz, csak mretk kisebb; arnyaikban
jelentktelen a klnbzsg.
A 'normal' rtk a bettpus norml alakjt, a 'small-caps' a kiskapitlis alakot vlasztja ki. A
CSS-ben elfogadhat (de nem megkvetelt), hogy a kiskapitlis betk kisbeti a norml
fontkszlet nagybetinek futsidej tmretezsvel legyenek kialaktva.
A kvetkez pldban tallhat utastsok eredmnyekppen a H3 elemben lev szveg
kiskapitlis betkel lesz megjelentve:
H3 {font-variant: small-caps}
'font-weight'
rtke lehet:
normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 |
800 | 900
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A 'font-weight' tulajdonsg vlasztja ki a bettpus slyt (megjelenst).
Az angol eredetiben a "weight" sz szerepel, a magyarban nincs igazn megfelel egy sz az itt
alkalmazott jelentsre: a bettpus vastagsga, sznintenzitsa. Ezrt megmaradtam a sz szerinti
fordtsnl: sly.
Alkalmazhat rtkei 100 - 900 -ig terjedhetnek, ahol minden egyes szm egy slyt jelez,
amelyek mindegyike sttebb az elznl. A normal kulcssz a '400'-as, a bold a 700 -as
rtknek felel meg.
P {font-weight: normal} /* 400 */
H1 {font-weight: 700} /* bold */
A bolder s lighter rtkek a szl elemtl rklt slyhoz viszonytva vlasztjk ki az
alkalmazand slyt.
STRONG {font-weight: bolder}
A tovbbi gyermek-elemek az gy eredmnyknt kapott rtket rklik, nem az eredetit.
A fontoknak (font adatoknak) jellemzen van egy, vagy tbbb tulajdonsguk, amelyeknek rtkei
a font "slyt" ler nevek. Ezeknek a neveknek nincs szleskren elfogadott, ltalnos rvny
jelentsk. Feladatuk elssorban az, hogy sly szerint megklnbztessk a fontcsaldon bell a
klnbz kinzet fontokat. Hasznlatuk klnbz fontcsaldok kztt meglehetsen vltoz.
Az a font, amit boldnak (flkvrnek) gondolhatnnk, az lersa szerint lehet, hogy Regular,
Roman, Book, Medium, Semi-, vagy Demi-bold, Bold, vagy Black, attl fggen, mennyire stt
a 'normal' font az adott fontcsaldban. Mivel a neveknek nincsenek mrtkad hasznlati
elrsaik, a CSS weight tulajdonsg-rtkei egy numerikus skln vannak megadva, ahol a
400-as, vagy normal rtk jelenti a fontcsald "normal" rtkt. Ez a slynv van
hozzrendelve ahhoz a kinzet fonthoz, amelynek neve ltalban Book, Regular, Roman, illetve
ritkbban Medium.
A fontcsaldon bell ms slyok hozzrendelse a numerikus rtkekhez az rnykolsi
(stttsi) sorrend megtartsval trtnik. A kvetkez mveleti sorrend megmutatja, hogy egy
tipikus esetben hogyan trtnik a slyok szmrtkhez rendelse.
Ha a fontcsald mr hasznl kilencrtk numerikus sklt, a hozzrendels kzvetlenl
trtnik.
Ha a fontcsaldban a medium rtk s a Book, Regular, Roman, Medium rtkek
ms slyt jelentenek, a medium rtkhez az 500 lesz hozzrendelve.
A boldknt jellt font leggyakrabban a 700-as rtket kapja.
Ha a fontcsaldban kevesebb, mint kilenc slyrtk van, a "lyukak" kitltsre a kvetkez
algoritmus hasznlatos: Ha az '500'-as rtk hozzrendels nlkli, ahhoz a fonthoz lesz
hozzrendelve, amelyikhez a '400'. Ha a '600', '700', '800', vagy '900'-as rtkek valamelyike
marad hozzrendels nlkl, ahhoz a fonthoz lesznek hozzrendelve, amelyiket a kvetkez
sttebbnek megfelel kulcssz kijell. Ha a '300', '200', vagy '100'-as rtkek valamelyike
marad hozzrendels nlkl, ahhoz a fonthoz lesznek hozzrendelve, amelyiket a kvetkez
vilgosabbnak megfelel kulcssz kijell.
A kvetkez plda mutatja ennek vgrehajtst. A 'Csald 1' fontcsaldban ngy slyt
feltteleznk, a vilgosabbtl a sttebb fel: Regular, Medium, Bold, Heavy. A 'Csald 2'
fontcsaldban 6 sly van: Book, Medium, Bold, Heavy, Black, ExtraBlack. Figyeljk meg, hogy a
'Csald 2 ExtraBlack' fonthoz nem rendelnk rtket.
Elrhet kinzetek | Hozzrendelt rtk | Kitlttt "lyukak"
--------------------+--------------------+--------------------
Csald 1 Regular | 400 | 100, 200, 300
Csald 1 Medium | 500 |
Csald 1 Bold | 700 | 600
Csald 1 Heavy | 800 |
--------------------+--------------------+--------------------
Csald 2 Book | 400 | 100, 200, 300
Csald 2 Medium | 500 |
Csald 2 Bold | 700 | 600
Csald 2 Heavy | 800 |
Csald 2 Black | 900 |
Csald 2 ExtraBlack | (nincs) |
Mivel a bolder s lighter relatv kulcsszavak clja a csaldon bell a fontok sttebben,
vagy vilgosabban trtn brzolsa, s mert a fontcsaldoknak nincs valamennyi slyrtkhez
fontja hozzrendelve, a bolder kulcssz hatsra a fontcsald kvetkez sttebb, a lighter
kulcssz hatsra a fontcsald kvetkez vilgosabb tagja kerl hasznlatba. A pontossg
kedvrt a bolder s lighter relatv kulcsszavak jelentse a kvetkez:
A bolder azt a slyt vlasztja ki, amelyik sttebb, mint az eredeti rklt rtk. Ha nincs
megfelel, ez egyszeren a kvetkez numerikus rtket jelenti (s a font vltozatlan marad).
Ha az rklt rtk '900' volt, az eredmnyl kapott sly is '900' lesz.
A lighter hasonlkppen jr el, csak ellenkez irnyban. A kvetkez vilgosabb
slyrtkhez tartoz kulcsszt vlasztja ki; ha nincs megfelel, a kvetkez vilgosabb
szmrtket (s a megjelentett font vltozatlan marad).
Nincs garantlva, hogy minden font-weight rtk hatsra az alkalmazott font sttebb lesz;
a fontcsaldok egy rszben csak norml s flkvr tpus van, mg ms fontcsaldok nyolc
klnbz slyrtkkel rendelkeznek. Nincs garantlva az sem, hogy a bngszk helyesen
rendelik egymshoz az ugyanahhoz a fontcsaldhoz tartoz fontokat a megfelel slyrtkekkel.
Az egyetlen garantlhat kvetkezmny az, hogy egy adott rtknl a font nem lesz kevsb
stt, mint egy vilgosabb rtknl.
'font-size'
rtke lehet: <abszolt mret> | <relatv mret> | <hossz> | <szzalk>
Alaprtelmezs: medium
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Viszonytsi alap a szl elem fontmrete
<abszolt mret>
Az abszolt mret egy indexet jelent a bngsz ltal nyilvntartott fontmret-tblzaton.
Lehetsges rtkei:
[xx-small | x-small | small | medium | large | x-large | xx-large].
A szomszdos indexek kztti klnbsg megjelentskori javasolt rtke 1,5-szrs; ha a
'medium' 10 pontos mretet jelent, a 'large' 15 pontos lesz. A klnbz mdiatpusokhoz
klnbz mretezsi faktorok szksgesek. A fontmret-tblzat a klnbz fontcsaldok
esetn klnbzhet egymstl.
<relatv mret>
A relatv mret a fontmret-tblzat s a szl elem vals fontmrete kztti arnyt veszi
figyelembe. Lehetsges rtkei:
[ larger | smaller ]
Ha a szl elem fontmrete 'medium' volt, a larger rtk az aktulis elem fontmretnek
rtkt large -ra lltja. Ha a szl elem fontmrett a bngsz fontmret-tblzata nem
tartalmazza, a bngsz helyettestheti a kvnt mretet a sorban kvetkezvel. A hossz s
szzalkos rtkek nem frhetnek hozz a fontmret-tblzathoz az elem aktulis fontmretnek
kiszmtsakor. Negatv rtkek hasznlata nem megengedett. A tbbi tulajdonsgnl, az 'em' s
'ex' mretrtkek az aktulis elem fontmretre hivatkoznak. A font-size tulajdonsg esetn
azonban ezek a mrtkegysgek a szl elem fontmrett veszik alapul. Pldk:
P {font-size: 12pt;}
BLOCKQUOTE {font-size: larger}
EM {font-size: 150%}
EM {font-size: 1,5em}
Ha a javasolt 1,5-szrs mretezsi faktor van hasznlatban, az utols hrom deklarci -
eredmnyt tekintve- megegyezik.
'font'
rtke lehet:
[<font-style> || <font-variant> || <font-weight>]?<font-size> [/<line-
height>]?<font-family>
Alaprtelmezs: Nincs definilva
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: rtelmezhet a font-size s a line-height tulajdonsgokhoz.
A font tulajdonsg hasznlata gyors elrsi lehetsget biztost afont-style, font-variant, font-
weight, font-size, line-height, font-family tulajdonsgok belltshoz. Hasznlata a
hagyomnyos rvidutas tipogrfiai jelrendszer szablyain alapul.
A lehetsges s alaprtkek belltshoz lsd az elz bekezdsekben lert szablyokat. Azon
tulajdonsgok esetben, ahol rtk nincs belltva, azok alaprtelmezett rtkei kerlnek
hasznlatba.
P { font: 12pt/14pt sans-serif }
P { font: 80% sans-serif }
P { font: x-large/110% "new century schoolbook", serif }
P { font: bold italic large Palatino, serif }
P { font: normal small-caps 120%/120% fantasy }
A msodik szablyban a szzalkos mretrtk a szl elem fontmrett veszi alapul. A harmadik
szably sormagassgra vonatkoz szzalkos rtke magt az aktulis elemet veszi viszonytsi
alapul. Az els hrom szablyban a 'font-style', 'font-variant', 'font-
weight' tulajdonsgok nincsenek explicit mdon emltve, ezrt mindhrom tulajdonsg
alaprtelmezett rtkt ('normal') veszi fel. A negyedik szably a 'font-weight'
tulajdonsgot 'bold'-ra, a 'font-style' tulajdonsgot 'italic'-ra lltja, a 'font-
variant' pedig implicit mdon kapja meg a 'normal' rtket. Az tdik szably lltja be a
'font-variant' (small-caps), a font-size (a szl elem betmretnek 120%-a), a
'line-height' (a fontmret 120%-a) s a 'font-family' (fantasy) tulajdonsgokat.

Szn- s httrtulajdonsgok
Ezek a tulajdonsgok rjk le egy elem (gyakran eltrsznknt [foreground color] emltett) szn
s httrtulajdonsgait. A httr az a fellet, amelyre a tartalom kirajzolsra kerl. Ez lehet httr
szn, vagy httr kp. Szintn ezek a tulajdonsgok hasznlhatak nhny ms fontos
megjelentsi lehetsg belltshoz: httr-kp helyzete, legyen-e s hnyszor ismtelve, fix
legyen-e, vagy grdthet a vszonhoz kpest, stb...
A color tulajdonsg norml mdon rkldik. A httr tulajdonsgai nem rkldnek, de az
egyes szl elemek htterei ttnnek az alaprtelmezett httrrtken, mivel a background-
color alaprtelmezett rtke a transparent.
'color'
rtke lehet: szn
Alaprtelmezs: Bngszfgg.
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg rja le egy elemhez tartoz szveg sznt; gyakran eltrsznknt (foreground
color) trtnik rla emlts. Egy szn rtknek meghatrozsa tbfle mdon trtnhet:
EM { color: red }
EM { color: rgb(255,0,0) }
EM { color: #FF0000 }
Fenti hrom deklarci mindegyike az EM elem szveghez a vrs sznt rendeli hozz. Az els
esetben a szn nevt rtuk le, a msodik s harmadik esetben a szn RGB kdjt; elszr
decimlisan, az utols esetben hexadecimlisan.
'background-color'
rtke lehet: <szn> | transparent
Alaprtelmezs: transparent
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem httrsznt.
H1 { background-color: red }
H1 { background-color: rgb(255,0,0) }
H1 { background-color: #FF0000 }
'background-image'
rtke lehet: <url> | none
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem htterknt lthat kpet. Egy httr-kp belltsakor
bellthat httr-szn is, amely akkor lthat, ha a kp nem elrhet. Ha a kp megjelenthet, a
httrsznt el fogja takarni.
BODY { background-image: url(hatter.gif) }
P { background-image: none }
'background-repeat'
rtke lehet: repeat |
repeat-x | repeat-y |
no-repeat
Alaprtelmezs: repeat
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ha van httr-kp belltva, a 'background-repeat' tulajdonsggal llthat be, hogy
legyen-e s hnyszor legyen ismtelve a kivlasztott kp.
A repeat rtk azt jeleni, hogy a kp vzszintesen s fgglegesen egyarnt ismtldni fog. A
repeat-x (repeat-y)rtk felels a kp vzszintes (fggleges) ismtldsrt; gy egy
kisebb mret httrkpbl a kperny egyik oldaltl a msikig r sv llthat el.
BODY
{
background: red url(hatter.gif);
background-repeat: repeat-y;
}
Fenti pldban a httrkp fgglegesen ismtldik.
'background-attachment'
rtke lehet: scroll | fixed
Alaprtelmezs: scroll
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ha van belltott httrkp, a 'background-attachment' rtke hatrozza meg, hogy fixen
marad-e, vagy a tartalommal egytt grdthet.
BODY
{
background: red url(hatter.gif);
background-repeat: repeat-y;
background-attachment: fixed;
}
A bngszk nha a fixed rtket is scroll-nak rtelmezik. A W3C ajnlsa azt tartalmazza, hogy a bngszk
a fixed rtket rtelmezzk helyesen, legalbb a HTML s a BODY elemek vonatkozsban, mivel a weblapok
szerzinek nincs arra lehetsgk, hogy kln htteret vlasszanak csak a gyemgbb kpessg bngszk szmra.
'background-position'
rtke lehet:[<szzalkos> | <hossz>]{1,2}|[top | center | bottom]|| [left |
center | right]
Alaprtelmezs: 0% 0%
Alkalmazhat: Blokkszint- s helyettestett elemekhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a formzott elem
Ha van belltott httr-kp, a 'background-position' rtke hatrozza meg annak
betltdskor elfoglalt helyzett. A 0% 0% rtkpr hasznlatval a kp az elemet krbefog
doboz bal fels sarkba kerl. (Nem a margt, szeglyt, kitltst tartalmaz dobozrl van sz.) A
100% 100% rtkpr a kp jobb als sarkt azelem jobb als sarkba helyezi. A 14% 84%
rtkpr a kpet az elemen vzszintesen a 14%-ot jelent ponttl fgglegesen a 84%-ot jelent
pontig helyezi el.
A 2cm 2cm rtkpr a kpet az elem bal fels sarktl 2 cm-re balra s 2 cm-re lefel helyezi el.
Ha csak egy szzalkos, vagy hosszsgrtk van megadva, az csak a vzszintes pozcit lltja
be, a fggleges pozci rtke 50% lesz. Kt rtk megadsa esetn a vzszintes pozcira
vonatkoz rtket kell elszr megadni. A hosszsg- s szzalkos rtkek kombincija
megengedett (50% 2cm). Megengedett a negatv rtkek hasznlata is.
A httrkp helyzetnek belltshoz hasznlhatk kulcssz-rtkek is. A kulcsszavak nem
kombinlhatk a hosszsg- s szzalkos rtkekkel. A hasznlhat kulcssz-kombincik s
rtelmezsk:
Kulcsszavak | rtelmezsk
-------------------------------------------+--------------
'top left' s 'left top' | 0% 0%
'top', 'top center', 'center top' | 50% 50%
'right top', 'top right' | 100% 0%
'left' 'left center', 'center left' | 0% 50%
'center', 'center center' | 50% 50%
'right', 'right center', center right' | 100% 50%
'bottom left', 'left bottom' | 0% 100%
'bottom', 'bottom center', 'center bottom' | 50% 100%
'bottom right', 'right bottom' | 100% 100%
-------------------------------------------+--------------
Pldk:
BODY {background: url(hatter.gif) right top
BODY {background: url(hatter.gif) top center
BODY {background: url(hatter.gif) center
BODY {background: url(hatter.gif) bottom
Ha a httr-kp rgztve van a vszonhoz, az elem elhelyezshez a mretek viszonytsa nem az
elemhez, hanem a vszonhoz trtnik.
'background'
rtke lehet: <background-color> || <background-image> || <background-repeat> || <background-
attachment> || <background-position>
Alaprtelmezs: Nincs definilva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Hasznlhat a <background-position> tulajdonsghoz.
A background egy n. gyorstulajdonsg, amellyel egy helyrl llthat be az sszes httrre
vonatkoz tulajdonsg. Hasznlhat rtkei megegyeznek az egyedi httr-tulajdonsgok sszes
rtkeivel.
BODY {background: red}
P {background: url(hatter.jpg) gray 50% repeat fixed}
A background tulajdonsg mindig belltja az sszes egyedi tulajdonsgot. Az els pldban csak
a httr-szn lett belltva, a tbbi tulajdonsg alprtelmezett rtkeit kapja. A msodik pldban
az sszes egyedi tulajdonsg kapott kezdrtket.

Szveg tulajdonsgok
'word-spacing'
rtke lehet: normal | hossz
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A megadott hosszsgrtk jelzi, hogy mennyivel nvelend meg a szavak kztti
alaprtelmezett szkz rtke. rtke lehet negatv, de lehetnek megvalsts-fgg korltozsok.
A bngsz szabadon vlaszthatja meg a megfelel szkzrtk-kiszmtsi algoritmust. A
szkz mrtke fgghet a szveg igaztstl is (ez a text-align tulajdonsg rtkeivel llthat
be).
H1 { word-spacing: 1em }
Fenti pldban a H1 elemen bell a szkz rtke 1em rtkkel megnvelt. A bngszk a
word-spacing brmely rtkt rtelmezhetik normal-knt.
'letter-spacing'
rtke lehet: normal | hossz
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A megadott hosszsgrtk jelzi, hogy mennyivel nvelend meg a betk kztti alaprtelmezett
kz rtke. rtke lehet negatv, de lehetnek megvalsts-fgg korltozsok. A bngsz
szabadon vlaszthatja meg a megfelel betkzrtk-kiszmtsi algoritmust. A betkz mrtke
fgghet a szveg igaztstl is (ez a text-align tulajdonsg rtkeivel llthat be).
BLOCKQUOTE { letter-spacing: 0,1em }
Fenti pldban a BLOCKQUOTE elemen bell a betkz rtke 0,1em rtkkel megnvelt. Ha a
belltott rtk a normal, a bngsz szabadon llthatja be a betkzt, a szveg igaztsnak
megfelelen. Ez nem trtnik meg, ha a letter-spacing tulajdonsg rtkt explicit mdon
adjuk meg:
BLOCKQUOTE { letter-spacing: 0 }
BLOCKQUOTE { letter-spacing: 0cm }
A bngszk a letter-spacing brmely rtkt rtelmezhetik normal-knt.
'text-decoration'
rtke lehet: none |[underline||overline||line-through||blink ]
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Nem, de lsd a rszletezst albb
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg rja le egy elem szvegnek megjelentsekor alkalmazhat dekorcikat (nincs,
alhzott, flhzott, thzott, villog). Ha az elem res (<EM></EM>), vagy nem tartalmaz
szveget (IMG), a tulajdonsg nem eredmnyez lthat hatst. A blink rtk hatsra a szveg
villog.
A szvegdekorci szneit a color tulajdonsg rtkeivel kell belltani.
Ez a tulajdonsg nem rkldik, de az elemek sszeillenek szl elemeikkel. Teht; ha egy elem
alhzott, az alhzs meg fog jelenni a gyermek elemnl is. Az alhzs szne ugyanaz marad
akkor is, ha a leszrmazott elem color tulajdonsgnak rtke ms.
A:link, A:active, A:visited { text-decoration: underline }
A fenti plda az sszes link szvegt (link minden A elem, amelynek HREF attribtuma van). A
bngszknek fel kell ismernik a blink kulcsszt, de nem ktelesek tmogatni a villogtatst.
'vertical-align'
rtke lehet: baseline|sub|super|top|text-top|middle|bottom|text-
bottom|<szzalkos>
Alaprtelmezs: baseline
Alkalmazhat: Soron belli elemekhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap az elem line-height tulajdonsga
Ez a tulajdonsg az elem fggleges pozicionlst befolysolja. rtkkszletnek egy csoportja
a szl elemhez viszonylik:
baseline - az elem alapvonalra igazt (vagy az aljra, ha a szl elemnek nincs
alapvonala);
middle - az elem fggleges kzppontjra igazt (ltalban kp esetn);
sub - az elem als indexe;
super - az elem fels indexe;
text-top - az elem tetejhez igazt, a szl elem betinek tetejhez;
text-bottom - az elem aljhoz igazt, a szl elem betinek aljhoz.
Az rtkkszlet msik csoportja a formzott sorhoz viszonylik:
top - az elem tetejhez igazt, a sor legmagasabb elemvel egy vonalba;
bottom - az elem aljhoz igazt, a sor legmlyebben lev elemvel egy vonalba;
A szzalkos rtkek viszonytsi alapja az elem line-height tulajdonsga. Ez a tulajdonsg felel
az elem alapvonalnak (baseline) holltrt (vagy az elem aljnak elhelyezkedsrt, ha az
elemnek nincs alapvonala). Negatv rtkek megengedettek (a -100% lesllyeszti az elemet
annyira, hogy az elem alapvonala a kvetkez sor alapvonalhoz r. Ez az olyan elemek
fggleges igaztsnak is klnsen pontos belltst teszi lehetv, amelyeknek nincs
alapvonaluk [kpek]).
'text-transform'
rtke lehet: capitalize|uppercase|lowercase|none
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
capitalize - Minden sz els karaktert nagybetss alaktja;
uppercase - Az elem sszes betjt nagybetss alaktja;
lowercase - Az elem sszes betjt kisbetss alaktja;
none - Hatstalantja az rklt rtket.
Az aktulis transzfomci minden esetben nyelvfgg.
H1 { text-transform: uppercase }
A H1 elemben lev szveget nagybetss alaktja.
A bngszk figyelmen kvl hagyhatjk a text-transform tulajdonsgot, ha azok a
karakterek, amelyikre alkalmazni kellene, nem a Latin-1 karakterkszletbl valk.
'text-align'
rtke lehet: left|right|center|justify
Alaprtelmezs: Bngszfgg
Alkalmazhat:Blokkszint elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg rja le a szveg igaztst az elemen bell. Az aktulis igaztsi algoritmust a
bngsz nyelvfggen alkalmazza.
DIV.center { text-align: center }
Mivel a text-align rkldik, a DIV elemen belli sszes CLASS="center"
attribtummal elltott blokkszint elem kzpre lesz igaztva. Megjegyzend, hogy az igazts
viszonytsa nem a vszonhoz, hanem az elemhez trtnik. Ha a justify rtket a bngsz
nem tmogatja, ltalban a left rtkkel helyettesti.
'text-indent'
rtke lehet: hossz | szzalkos
Alaprtelmezs: 0 (nulla)
Alkalmazhat: Blokkszint elemekhez
rkldik: Igen
Szzalkos rtkek: Viszonytsi alap a szl elem szlessge
Ez a tulajdonsg hatrozza meg a formzott sor behzst. rtke negatv is lehet, de lehetnek
megvalstsbeli korltozsok. Behzs nem helyezhet el olyan elem belsejbe, ahol valamilyen
trs (pl.: BR) mr van.
P {text-indent: 3em }
'line-height'
rtke lehet: normal | szm | hossz | szzalkos
Alaprtelmezs: normal
Alkalmazhat: Minden elemhez
rkldik: Igen
Szzalkos rtkek: Viszonytsi alap az elem fontmrete
Ez a tulajdonsg lltja be a kt szomszdos sor alapvonalnak tvolsgt. Ha numerikus rtk
van meghatrozva, a sormagassgot a fontmret s a szm szorzata adja meg. Ez a megolds a
szzalkos rtkmegadstl az rkldsben klnbzik: szmrtk megadsakor a leszrmazott
elemek magt a szmot rklik, nem az eredmnyt. Negatv rtkek nem alkalmazhatak. A
kvetkez pldban szerepl hrom deklarci eredmnye ugyanaz a sormagassg:
DIV { line-height: 1,2; font-size: 10pt } /* szmrtk */
DIV { line-height: 1,2em; font-size: 10pt } /* hossz */
DIV { line-height: 120%; font-size: 10pt } /* szzalkos */
A normal rtk a line-height tulajdonsg rtkt az alkalmazott fonthoz kpest sszer
mretre lltja be.

Doboz-tulajdonsgok
A doboz-tulajdonsgok az elemeket reprezentl dobozok mrett, kerlett s helyzett lltjk
be. A marg-tulajdonsgok lltjk be az elemhez tartoz margkat. A margin tulajdonsg
minden oldalra vonatkozik, mg a tbbi marg-tulajdonsg csak csak a sajt margikra van
hatssal. A kitlts-tulajdonsgok rjk le, mekkora hely legyen a szegly s az elem tartalma
kztt. A padding tulajdonsg minden oldalra vonatkozik, mg a tbbi kitlts-tulajdonsg
csak csak a sajt oldalon lv kitltsre van hatssal. A szegly-tulajdonsgok lltjk be az
elemhez tartoz szeglyeket. Minden elemnek ngy szeglye van, minden oldalon egy-egy,
amelyek szlessgkkel, sznkkel, stlusukkal vannak lerva. A width s height
tulajdonsgok lltjk be a doboz mrett; a float s clear tulajdonsgok az elem pozcijt
vltoztathatjk.
'margin-top'
rtke lehet: hossz | szzalkos | auto
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be az elem fls margjt:
H1 { margin-top: 2em }
Negatv rtk hasznlata engedlyezett, de lehetnek megvalstsbeli korltozsok.
'margin-right'
rtke lehet: hossz | szzalkos | auto
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be az elem jobb oldali margjt:
H1 { margin-right: 2em }
Negatv rtk hasznlata engedlyezett, de lehetnek megvalstsbeli korltozsok.
'margin-bottom'
rtke lehet: hossz | szzalkos | auto
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be az elem als margjt:
H1 { margin-bottom: 2em }
Negatv rtk hasznlata engedlyezett, de lehetnek megvalstsbeli korltozsok.
'margin-left'
rtke lehet: hossz | szzalkos | auto
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be az bal oldali margjt:
H1 { margin-left: 2em }
Negatv rtk hasznlata engedlyezett, de lehetnek megvalstsbeli korltozsok.
'margin'
rtke lehet: [hossz | szzalkos | auto]{1,4}
Alaprtelmezs: Nincs definilva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
A margin tulajdonsg egy 'gyorstulajdonsg', amelynek segtsgvel egy deklarcin bell
llthat be a margin-top, margin-right, margin-bottom s a margin-left
tulajdonsg rtke. Ha rtkknt ngy szmrtket adunk meg, annak rtelemzsi sorrendje
mindig a fels => jobb als => bal. Ha csak egy rtk van megadva, az mind a ngy oldalra
vonatkozik, ha kett, vagy hrom: a szemben lv rtkek meg fognak egyezni.
BODY { margin: 2em }
BODY { margin: 1 em 2em }
BODY { margin: 1em 2em 3em }
Fenti pldk kzl a legals -hatst tekintve- a kvetkezvel megegyezik:
BODY {
margin-top: 1em;
margin-right: 2em;
margin-bottom: 3em;
margin-left: 2 em; /* megegyezik a szembeni oldal rtkvel */
}
Negatv marg-rtkek engedlyezettek, de lehetnek megvalstsbeli korltozsok.
'padding-top'
rtke lehet: hossz | szzalkos
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be egy elem fls kitltst.
BLOCKQUOTE { padding-top: 0,3em }
Negatv kitlts-rtk nem megengedett.
'padding-right'
rtke lehet: hossz | szzalkos
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem.
Ez a tulajdonsg lltja be egy elem jobb oldali kitltst
BLOCKQUOTE { padding-right: 0,3em }
Negatv kitlts-rtk nem megengedett.
'padding-bottom'
rtke lehet: hossz | szzalkos
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be egy elem als kitltst
BLOCKQUOTE { padding-bottom: 0,3em }
Negatv kitlts-rtk nem megengedett.
'padding-left'
rtke lehet: hossz | szzalkos
Alaprtelmezs: 0
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
Ez a tulajdonsg lltja be egy elem bal oldali kitltst
BLOCKQUOTE { padding-left: 0,3em }
Negatv kitlts-rtk nem megengedett.
'padding'
rtke lehet: [hossz | szzalkos]{1,4}
Alaprtelmezs: Nincs definilva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a legkzelebbi blokkszint szlelem
A padding tulajdonsg egy 'gyorstulajdonsg', amelynek segtsgvel egy deklarcin bell
llthat be a padding-top, padding-right, padding-bottom s a padding-left
tulajdonsg rtke. Ha rtkknt ngy szmrtket adunk meg, annak rtelemzsi sorrendje
mindig a fels => jobb als => bal. Ha csak egy rtk van megadva, az mind a ngy oldalra
vonatkozik, ha kett, vagy hrom: a szemben lv rtkek meg fognak egyezni.
A kitltfellet megadsa a background tulajdonsggal:
H1 {
background: white;
padding: 1em 2em;
}
Fenti plda 1em rtk kitltst llt be fgglegesen (fent s lent), s 2em rtk kitltst llt be
vzszintesen (jobb- s baloldalt). AZ em rtk magyarul a -szorosnak felel meg. Viszonytsi
alapja az elem fontmrete. Az 1em (egyszeres) megegyezik a hasznlt font magasgval.
A kitltsi rtkek nem lehetnek negatvak.
'border-top-width'
rtke lehet: thin | medium | thick | hossz
Alaprtelmezs: medium
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem fls szeglyt. A kulcsszavakhoz tartoz tnyleges rtkek
bngszfggk, de a kvetkez sorrend mindenkppen rvnyben marad: thin (vkony)
medium (kzepes) thick (vastag)
H1 { border: solid thick red }
P { border: solid thick blue }
A fenti plda szerint a H1 s a P elemek ugyanolyan szeglyt kapnak, fggetlenl a fonmrettl.
Relatv szlessg elrshez az em hasznlhat:
H1 { border: solid 0,5em }
A szeglyszlessgek nem kaphatnak negatv rtket.
'border-right-width'
rtke lehet: thin | medium | thick | hossz
Alaprtelmezs: medium
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem jobb oldali szeglyt. Hasznlata megegyezik a border-top-
width tulajdonsg hasznlatval.
'border-bottom-width'
rtke lehet: thin | medium | thick | hossz
Alaprtelmezs: medium
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem als szeglyt. Hasznlata megegyezik a border-top-width
tulajdonsg hasznlatval.
'border-left-width'
rtke lehet: thin | medium | thick | hossz
Alaprtelmezs: medium
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be egy elem bal oldali szeglyt. Hasznlata megegyezik a border-top-
width tulajdonsg hasznlatval.
'border-width'
rtke lehet: [thin | medium | thick | hossz]{1,4}
Alaprtelmezs: Nincs definilva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
A border-width tulajdonsg egy 'gyorstulajdonsg', amelynek segtsgvel egy deklarcin
bell llthat be a border-width-top, border-width-right, border-width-
bottom s a border-width-left tulajdonsg rtke.
Ngy rtke lehet, a kvetkez rtelmezsban:
Egy megadott rtk: - Mind a ngy szegly a megadott rtket kapja;
Kt megadott rtk: - Az els rtk a fls s als szeglyekre, a msodik rtk a bal sa
jobb szeglyre vonatkozik;
Hrom megadott rtk: - Az els rtk a fls, a msodik a jobb s bal, a harmadik az
als szeglyre vonatkozik;
Ngy megadott rtk: - Fls, jobb, als s bal oldali szeglyekre vonatkozik, a felsorols
sorrendjben.
A kvetkez pldban a megjegyzsben rt rtkek jelzik a szeglyek vastagsgt:
H1 {border-width: thin } /* thin thin thin thin */
H1 {border-width: thin thick } /* thin thick thin thick */
H1 {border-width: thin thick medium } /* thin thick medium thin */
H1 {border-width: thin thick medium thin } /* thin thick medium thin */
A szeglyek szlessge nem vehet fel negatv rtket.
'border-color'
rtke lehet: szn{1,4}
Alaprtelmezs: A color tulajdonsg rtke
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
A border-color tulajdonsg a ngy szegly sznt lltja be. Ngy rtke lehet, az rtkek a
klnbz oldalak szneit lltjk be, ahogyan azt a border-width tulajdonsgnl lertuk.
Ha nincs sznrtk meghatrozva, helyt az elem color tulajdonsga veszi t.
P {
color: black;
background: white;
border: solid
}
Fenti pldban az elem szeglye vkony, fekete vonal lesz.
'border-style'
rtke lehet:
none|dotted|dashed|solid|double|groove|ridge|inset|outset
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
A border-style tulajdonsg lltja be a ngy szegly stlust. Ngy rtke lehet, az rtkek a
klnbz oldalak szneit lltjk be, ahogyan azt a border-width tulajdonsgnl lertuk.
#b14 { border-style: solid dotted }
Fenti plda szerint a vzszintes szeglyek stlusa solid, a fggleges szeglyek pedig dotted
(pontvonal) lesz. Mivel a szeglystlusok alaprtelmezs szerinti belltsa none, kln belltott
rtkek nlkl az elemeknek nem lesz lthat szeglye.
A szeglystlusok a kvetkezket jelentik:
none - Nincs kirajzolt szegly (tekintet nlkl a border-width tulajdosg rtkre);
dotted - A szegly pontozott vonallal lesz kirajzolva az elem htterre;
dashed - A szegly szaggatott vonallal lesz kirajzolva az elem htterre;
solid - A szegly folytonos vonallal lesz kirajzolva az elem htterre;
double - A szegly ketts vonallal lesz kirajzolva az elem htterre. A kt vonal sszes
szlessge s a kztk lev kz megegyezik a border-width rtkvel;
groove - A szegly 3D sllyesztett hatst keltve lesz kirajzolva;
ridge - A szegly 3D dombor hatst keltve lesz kirajzolva
inset - A szegly 3D bekelt stlust keltve lesz kirajzolva;
outset - A szegly 3D kiemelt hatst keltve lesz kirajzolva;
'border-top'
rtke lehet: border-top-width||border-style||szn
Alaprtelmezs: Nincs meghatrozva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a 'gyorstulajdonsg' egy elem fls szeglye szlessgnek, stlusnak s sznnek belltsra
szolgl.
H1 { border-top: thick solid red }
Fenti pda a H1 elem fls szeglynek vastagsgt, vonaltpust s sznt lltja be. A
felsorolsbl kihagyott rtkek alaprtelmezskkel lesznek helyettestve.
H1 { border-top: thick solid }
Mivel ebben a pldban a szn nem szerepel, a szegly szne megegyezik az elem szeglynek
sznvel.
'border-right'
rtke lehet: border-top-width||border-style||szn
Alaprtelmezs: Nincs meghatrozva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a 'gyorstulajdonsg' egy elem jobb oldali szeglye szlessgnek, stlusnak s sznnek
belltsra szolgl. Hasznlata megegyezik a border-top tulajdonsgval.
'border-bottom'
rtke lehet: border-top-width||border-style||szn
Alaprtelmezs: Nincs meghatrozva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a 'gyorstulajdonsg' egy elem als szeglye szlessgnek, stlusnak s sznnek belltsra
szolgl. Hasznlata megegyezik a border-top tulajdonsgval.
'border-left'
rtke lehet: border-top-width||border-style||szn
Alaprtelmezs: Nincs meghatrozva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a 'gyorstulajdonsg' egy elem bal oldali szeglye szlessgnek, stlusnak s sznnek
belltsra szolgl. Hasznlata megegyezik a border-top tulajdonsgval.
'border'
rtke lehet: border-width||border-style||szn
Alaprtelmezs: Nincs meghatrozva
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
A border tulajdonsg egy 'gyorstulajdonsg', amelynek segtsgvel egy deklarcin bell
llthat be a border-top, border-right, border-bottom s a border-left
tulajdonsg rtke.
A kvetkez pldban mutatott els deklarci eredmnye megegyezik a msodik deklarci
eredmnyvel:
P { border: solid red }

P {
border-top: solid red
border-right: solid red
border-bottom: solid red
border-left: solid red
}
Eltren a margin s padding tulajdonsgoktl, a border tulajdonsg nem tud klnbz
rtkeket belltani a klnbz oldalakhoz. Ehhez a tbbi szeglytulajdonsgot kell hesznlni.
'width'
rtke lehet: hossz | szzalkos | auto
Alaprtelmezs: auto
Alkalmazhat: Blokkszint elemekhez s helyettestett elemekhez
rkldik: Nem
Szzalkos rtkek: Viszonytsi alap a szl elem szlessge
Ez a tulajdonsg ltalban szveg-elemekhez hasznlatos, de igen hasznos a helyettestett
elemeknl (pl.: kpek) is. Ezen a mdon megadhat egy elem szlessge. Az elemek
mretezsnl az oldalak arnya vltozatlan marad, ha a height tulajdonsg rtke auto.
IMG.icon { width: 100px }
Ha a width s a height tulajdonsg rtke is auto; az elem sajt eredeti mretvel jelenik
meg. Negatv rtkek nem alkalmazhatk. A width tulajdonsg s a marg, valamint a kitlts
kztti kapcsolat lersrt lsd a formzsmodell fejezetet.
'height'
rtke lehet: hossz | auto
Alaprtelmezs: auto
Alkalmazhat: Blokkszint elemekhez s helyettestett elemekhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg ltalban szveg-elemekhez hasznlatos, de igen hasznos a helyettestett
elemeknl (pl.: kpek) is. Ezen a mdon megadhat egy elem szlessge. Az elemek
mretezsnl az oldalak arnya vltozatlan marad, ha a width tulajdonsg rtke auto.
IMG.icon { height: 100px }
Ha a width s a height tulajdonsg rtke is auto; az elem sajt eredeti mretvel jelenik
meg. Negatv rtkek nem alkalmazhatk. Ha az elem, amelyre alkalmazzuk nem helyettestett
elem, a bngszk figyelmen kvl hagyhatjk a height tulajdonsgot (auto rtkkel
helyettestik).
'float'
rtke lehet: left | right | none
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelemzve
Ha none rtkt alkalmazzuk, az elem ott jelenik meg, ahol a szvegben az t beilleszt kdsor
tallhat. Ha rtke left (right); az elem a bal- (jobb-) oldalon fog megjelenni, s a szveg a
jobb (bal) oldaln fog krbefutni. Ha rtke left, vagy (right); az elem blokkszintknt
viselkedik.
IMG.icon {
float: left;
margin-left: 0;
}
Fenti plda az sszes 'icon' osztlyba tartoz IMG elemet a szl elem bal oldalra helyezi el. A
float tulajdonsgot leggyakrabban soron belli kpekhez hasznljuk, de jl alkalmazhat
szveges elemekhez is.
'clear'
rtke lehet: none | left | right | both
Alaprtelmezs: none
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg hatrozza meg, hogy elem melyik oldaln engedlyezi lebeg elemek
megjelenst. Pontosabban: E tulajdonsg rtkei soroljk fel azokat az oldalakat, ahol lebeg
elemek nem jelenhetnek meg. Ha a clear rtke leftre van belltva, az elem, amelyre
alkalmaztuk, a bal oldaln lev brmely lebeg elem al kerl.
H1 { clear: left }

Osztlyoz tulajdonsgok
Ezek a tulajdonsgok soroljk az elemeket kategrikba, ezenkvl belltjk megjelentsi
tulajdonsgaikat is. A felsorols-tulajdonsgok rjk le, a listaelemek formzsi elrsait. A
felsorols-tulajdonsgok minden elemhez alkalmazhatak s norml mdon rkldnek a
leszrmazsi fastruktrn. Mindamellett megjelentsi hatst csak a listaelemekre gyakorolnak. A
HTML-ben tipikusan ide tartoznak a LI elemek.
'display'
rtke lehet: block | inline | list-item | none
Alaprtelmezs: block
Alkalmazhat: Minden elemhez
rkldik: Nem
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg hatrozza meg, hoy egy elem legyen-e, s hogyan legyen brzolva a
megjelentn (a megjelent lehet kperny, nyomtatsi termk, stb...).
Egy block rtkkel rendelkez elem j dobozt kap. A doboz elhelyezst s a szomszdos
dobozokhoz viszonytott helyzett a formzsmodell hatrozza meg. ltalban, a H1, vagy P
jelleg elemek block-tpusak. A list-item rtk hasonlt a blockhoz, kivve, ha
listajell is van hozzadva. A HTML-ben tipikusan ilyen (listajellvel elltott) elem a LI.
Egy inline rtkkel rendelkez elem soron belli dobozt kap, ugyanabban a sorban, mint az t
megelz tartalom. A doboz mretezse formzott tartalmnak mrete szerint trtnik. Ha
tartalma szveg, sorokra oszthat, s minden sornak kln doboza lesz. A marg-, szegly-, s
kitlts-tulajdonsgok hasznlatosak az inline elemekhez, a sortrsnl nincs lthat hatsuk.
A none rtk hasznlata kikapcsolja az elem megjelentst, belertve leszrmazott elemeit s az
t krlvev dobozt is.
P { display: block }
EM { display: inline }
LI { display: list-item }
IMG { display: none }
A legutols definci kikapcsolja a kpek megjelentst.
A display tulajdonsg alaprtelmezett rtke a block; de minden bngsz rendelkezik
alaprtelmezett rtkekkel minden HTML elemre vonatkozan, amely a HTML specifikciban
rt javasolt megjelentsen alapul.
A bngszk figyelmen kvl hagyhatjk a display tulajdonsgot, a stluslap szerzje ltal
definilt helyett hasznlhatjk sajt alaprtelmezett rtkeiket is.
'white-space'
rtke lehet: normal | pre | nowrap
Alaprtelmezs: normal
Alkalmazhat: Blokkszint elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
Az angol 'whitespace' kifejezsre nem talltam egy magyar szt; krlrva: a szavak, mondatok
kztti res kzt jelenti, ami nem azonos a szkzkkel. A tovbbiakban -egyb megegyezs
hjn- kzknt fogom emlteni.
Ez a tulajdonsg rja le, hogyan legyenek rtelmezve a kzk egy elemen bell: normal mdon
(amikor a kzk egy szkzz vannak tmrtve), pre-knt (gy viselkedjen, mint a PRE a
HTML-ben), vagy nowrap mdon (a sortrs BR elemhez hasonl mdon):
PRE { white-space: pre }
P { white-space: normal }
A white-space tulajdonsg alaprtelmezse a normal, de a bngszknek ltalban minden
HTML elemhez van alaprtelmezett rtkk, a HTML specifikciban lert elemkirajzolsi
elrsok szerint.
A bngszk figyelmen kvl hagyhatjk a display tulajdonsgot, a stluslap szerzje ltal
definilt helyett hasznlhatjk sajt alaprtelmezett rtkeiket is.
'list-style-type'
rtke lehet: disc|circle|square|decimal|lower-roman| upper-roman|lower-
alpha|upper-alpha|none
Alaprtelmezs: disc
Alkalmazhat: display: list-item tulajdonsg-rtk prral rendelkez elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
E tulajdonsg hasznlatval hatrozhat meg a listajell megjelense, ha a list-style-
image tulajdonsg rtke none, vagy a kp, amelyre a benne szerepl hivatkozs mutat, nem
elrhet.
OL { list-style-type: decimal } /* 1 2 3 4 stb... */
OL { list-style-type: lower-alpha } /* a b c d stb... */
OL { list-style-type: lower-roman } /* i ii iii stb... */
'list-style-image'
rtke lehet: <url> | none
Alaprtelmezs: none
Alkalmazhat: display: list-item tulajdonsg-rtk prral rendelkez elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
Ez a tulajdonsg lltja be azt a kpet, ami listaelem-jellknt alkalmazhat. Ha a kp elrhet,
helyettesteni fogja a list-style-type tulajdonsgban belltott jellt.
UL { list-style-image: url(images/styleimage.gif) }
'list-style-position'
rtke lehet: inside | outside
Alaprtelmezs: outside
Alkalmazhat: display: list-item tulajdonsg-rtk prral rendelkez elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A list-style-position rtke hatrozza meg a lista-jell pozcijt a tartalomhoz
kpest.
'list-style'
rtke lehet: [disc|circle|square|decimal|lower-roman|upper-roman|lower-
alpha|upper-alpha|none] || [inside|outside] || [url|none]
Alaprtelmezs: Nincs definilva
Alkalmazhat: display: list-item tulajdonsg-rtk prral rendelkez elemekhez
rkldik: Igen
Szzalkos rtkek: Nincs rtelmezve
A list-style tulajdonsg egy 'gyorstulajdonsg', amelynek segtsgvel a list-style-
type, a list-style-image s a list-style-position tulajdonsgok rtkei
llthatk be.
UL { list-style: upper-roman inside }
UL UL { list-style: circle outside }
LI.square { list-style: square }
A LI elemre kzvetlenl belltott list-style tulajdonsg nem vrt eredmnyt hozhat.
Tekintsnk egy pldt:
<STYLE TYPE="text/css">
OL.alpha LI {list-style: lower-alpha }
UL LI {list-style: disc }
</STYLE>
<BODY>
<OL CLASS="alpha">
<LI>1. szint
<UL>
<LI>2. szint
</UL>
</OL>
</BODY>
Mivel a fenti pldban az els defincinak nagyobb az egyedisge, fell fogja brlni a msodik
definci elrsait s csak a lower-alpha felsorols-stlus fog rvnyeslni. Ezrt csak a
felsorols jelleg elemeknl ajnlott belltani a list-style tulajdonsgot.
OL.alpha { list-style: lower-alpha }
UL { list-style: disc }
Fenti pldban az OL s UL elemekre belltott rtkek -hla az rkldsi szablyoknak-
vonatkozni fognak a LI elemekre is.

Egysgek

Hosszsg egysgek
A hosszsgrtkek meghatrozott formtuma egy opcionlis +, vagy - jelbl (alaprtelmezett a
+), az azt kzvetlenl kvet szmbl s a szmot kzvetlenl kvet egysg-azonostbl
(annak ktbets rvidtsbl) ll. A 0 (nulla) szm utn az egysg-azonost opcionlis. Nhny
tulajdonsg hasznlatnl engedlyezett a negatv rtk hasznlata, de ez bonyolthatja a
formzsmodellt s lehetnek megvalstsbeli korltozsai is. Ha egy negatv rtk nincs
tmogatva, az a legkzelebbi tmogatptt rtkkel lesz helyettestve. A hosszsg-egysgeknek
kt tpusa hasznlhat: a relatv s az abszolt. A relatv egysgek e mretet egy msik
hosszsg-tulajdonsghoz viszonytva adjk meg. Azok a stluslapok, amelyek a mreteket
relatvan adjk meg, knnyebben sklzhatk egyik mdiatpusrl a msikra (pl.: szmtgp
kpernyrl nyomtatra). A szzalkos egysgek (lsd albb) hasonl elnyket knlnak fel.
A kvetkez relatv egysgek hasznlhatk:
H1{ margin: 0,5em } /* -szoros, az elem fontmret-magassghoz kpest */
H1{ margin: 1ex } /* x-magassg, az 'x' bez magassghoz kpest */
P { font-size: 12px }/* pixelben, a vszonhoz kpest */
Az em s ex rtkek az elem fontmrethez viszonyulnak. E szably all az egyetlen kivtel a
font-size tulajdonsg, ahol az em s ex rtkek a szl elem fontmrethez viszonytandk.
A pixel egysgek (ahogy a plda mutatja) a vszon (leggyakrabban szmtgp-kperny)
felbontshoz viszonyulnak. Ha a kimeneti eszkz pixelsrsge nagyban klnbzik a
szmtgp kpernyjtl, a megjelent eszkz1 tszmolja a pixelrtkeket. A javasolt
referencia pixel mrete egy pixel lthat szge az olvas ember karhosszsgban lev 90 dpi
pixelsrsg eszkzn. Egy tlagos karhosszsgot 71 cm-nek (28 inch) vve, egy pixel
0,0227 alatt ltszik.
A gyermek elemek nem a relatv, hanem a szmtott rtket rklik:
BODY {
font-size: 12pt;
text-indent: 3em; /* rtsd: 36pt */
}
H1 { font-size: 15pt }
Fenti pldban a H1 elemek text-indent tulajdonsgnak rtke 36pt lesz, nem pedig 45pt.
Az abszolt hosszsgegysgeket csak akkor rdemes hasznlni, ha a kiviteli eszkz fizikai
tulajdonsgai ismertek. A kvetkez abszolt egysgek tmogatottak:
H1 { margin: 0,5in } /* inch; 1 inch = 2.54 cm */
H2 { line-height: 3cm } /* centimter */
H3 { word-spacing: 4mm }/* millimter */
H4 { font-size: 12pt } /* pont; 1 pt = 1/72 inch */
H4 { font-size: 1pc } /* pica; 1 pc = 12 pt */
Abban az esetben, ha a meghatrozott mret nem tmogathat, a bngszk megprbljk
hozzvetlegesen megkzelteni.

Szzalkos egysgek
A szzalkos rtkek meghatrozott formtuma egy opcionlis +, vagy - jelbl (alaprtelmezett a
+), az azt kzvetlenl kvet szmbl s a szmot kzvetlenl kvet % jelbl ll. A szzalkos
egysgek mindig valamely ms egysgre vonatkoznak, ez leggyakrabban hosszsg-egysg.
Minden tulajdonsgnl, amelyeknl szzalkos egysgek alkalmazhatk, meg van hatrozva,
hogy a szzalkos egysg mire hivatkozik. A hivatkozsi alap leggyakrabban az adott elem
fontmrete.
P { line-height: 120% } /* Az elemnl alkalamazott 'font-size' 120%-a */
Minden rklt CSS tulajdonsgnl, ha rtke szzalkosan van megadva, a leszrmazott elemek
a szmtott rtket rklik, nem a szzalkosat.

Sznjellsek
A sznek meghatrozsa trtnhet a szn nevvel, vagy numerikusan, a szn RGB kdjval. A
javasolt sznmegnevezsek a kvetkezk: aqua, black, blue, fuchsia, gray,
green, lime, maroon, navy, olive, purple, red, silver, teal,
white s yellow. Ez a 16 szn tallhat a Windows VGA palettjn, RGB rtkk nincs
meghatrozva ebben a specifikciban.
BODY { color: black; background: white }
H1 { color: maroon }
H2 { color: olive }
Az RGB modell szmszer sznmeghatrozsokat hasznl. A kvetkez pldk ugyanazt a sznt
eredmnyezik.
EM { color: #f00 } /* #rgb */
EM { color: #ff0000 } /* #rrggbb */
EM { color: rgb(255,0,0) } /* egsz szmok: 0 - 255 */
EM { color: rgb(100%,0%,0%) } /* szzalkos : 0% - 100% */
Az RGB rtkek hexadecimlis formtuma: egy # karakter, amelyet kzvetlenl kvet vagy
hrom, vagy hat hexadecimlis karakter. A hromszmjegyes RGB kifejezsek (#rgb)
hatszmjegyes formba (#rrggbb) a szmjegyek ismtlsvel, nem 0-k (nullk) hozzadsval
konvertlhatk. (Teht a #b0 kifejtve #bb00) Ez biztostja, hogy a fehr (#ffffff) meghatrozhat
legyen rvid formban is (#fff), fggetlentve a megjelent eszkz sznmlysgtl. Az RGB
rtkek funkcionlis formtuma: az rgb karkterlnc, amelyet kzvetlenl kvet a hrom
sznrtk vesszvel elvlasztott felsorolsa (vagy hrom egsz szm 0 - 255 rtkhatron bell,
vagy hrom szzalkos kifejezs 0% - 100% rtkhatron bell). A megadott rtkhatrokon
kvli szmrtkek nem rtelmezhetek, csonktva lesznek. A kvetkez hrom deklarci
rtelmt tekintve megegyezik.
EM { color: rgb(255,0,0) } /* egsz szmok: 0 - 255 */
EM { color: rgb(300,0,0) } /* csonktva 255 -re */
EM { color: rgb(110%,0%,0%) } /* csonktva 100% -ra */

URL
Az URL rvidts a Uniform Resource Locator kifejezst takarja, amelynek magyar megfelelje:
Egysges Erforrs Helymeghatrozs.
BODY { background: url(images/hatter.jpg) }
Az URL kifejezs formja: url kulcssz, amelyet kzvetlenl kvet zrjelben ( ( ) )
opcinlisan egyszeres, vagy ktszeres idzjelek ( ', " ) kz zrva maga az URL. Relatv URL
megadsakor az elrsi utat nem a dokumentumhoz kell viszonytani, hanem a stluslaphoz.

sszhang
Egy bngsz, amely egy dokumentum megjelentshez CSS-t hasznl, akkor felel meg a CSS
specifikci ltal tmasztott kvetelmnyeknek, ha:
Elr el minden hivatkozott stluslapot s specifikcijuk szerint rtelmezi ket;
A deklarcikat a rangsor fejezetben lert rangsor szerint rendezi;
A CSS funkcionalitst a megjelent eszkz korltai kz tudja illeszteni.
Egy bngsz akkor felel meg a CSS specifikciban megfogalmazott stluslap-
kvetelmnyeknek, ha:
kimenete rvnyes CSS stluslap.
Egy bngsz, amely egy dokumentum megjelentshez CSS-t hasznl, s kimenete stluslap,
akkor felel meg a CSS specifikcinak ha a fentiekben emltett mindkt kvetelmnycsoportot
kielgti.
Egy bngsz sem tudja teljesteni a CSS valamennyi lehetsges funkcijt: a bngszk akkor
felelnek meg a CSS tmasztotta kvetelmnyeknek, ha az alapvet funkcikat kpesek teljesteni.
Az alapvet funkcik a teljes CSS specifikcibl llnak, kivve azokat a rszeket, amelyek
kifejezetten kivtelknt szerepelnek. Azokat a funkcikat, amelyek nem tartoznak a CSS alapvet
funkcii kz, tovbbfejlesztett (advanced) funkciknak nevezzk.
Pldk a megjelent eszkz korltaira: Korltozott erforrsok (fontok, sznek), korltozott
felbonts (a margk nem jelennek meg helyesen). Ezekben az esetekben a bngsz csak
megkzelti a stluslap elrsait. Vannak bngszk, amelyek lehetv teszik a felhasznl
szmra a megjelents megvlasztst.

Elre-kompatbilis elemzs
Ez a lers a CSS 1-et mutatja be. Elre lthatan a ksbi verzik tbb j tulajdonsgot
vezetnek be. Ez a fejezet azt mutatja be, hogy mit tesznek a bngszk, ha olyan deklarcival
tallkoznak, amelyek a CSS jelen kiadsban nem rvnyesek.
Az ismeretlen tulajdonsgot tartalmaz deklarcikat figyelmen kvl hagyjk. Pldul;
ha a stluslap a
H1 { color: red; rotation: 70deg }
deklarcit tartalmazza, a bngsz gy veszi figyelembe, mintha csak a
H1 { color: red }
deklarcit tartalmazta volna.
Az rvnytelen rtkeket, vagy rvnytelen rszeket tartalmaz rtkeket a bngsz
szintn figyelmen kvl hagyja, a kvetkezk szerint:
IMG { float: left} /* CSS-nek megfelel */
IMG { float: left top } /* a 'top' nem rtke a 'float'-nak
*/
IMG { background: "red" } /* a kulcsszavak nem kerlhetnek
idzjelbe */
IMG { border-width: 3 } /* hinyzik a mrtkegysg */
Fenti pldban a bngsz csak az els deklarcit rtelmezi, gy a stluslap tnyleges
tartalma:
IMG { float: left}
IMG { }
IMG { }
IMG { }
Figyelmen kvl hagyja a bngsz az rvnytelen at (@) kulcsszavakat is, minden
egybbel, ami kveti, egszen a kvetkez pontosvesszig (;), vagy kapcsos zrjel-prig
({ }). Pldakpp ttelezzk fel, hogy a stuslap a kvetkezket tartalmazza:
@three-dee
{
@background-lightning:
{
azimuth: 30deg;
elevation: 190deg
}
H1 { color: red }
}
H1 { color: blue }
Mivel a @three-dee a CSS szerint rvnytelen, gy az egsz deklarci a harmadik
jobb kapcsos zrjelig (}) bezrlag rvnytelen. A bngsz egyszeren kihagyja, a
stluslap rtelmezhet rsze a kvetkez lesz:
H1 { color: blue }
Rszletesebben:
Egy CSS stluslap, brmely verzijban kszlt is, utastsok sorozatt tartalmazza. Az
utastsoknak kt fajtja van: az at elrsok s az elrskszletek. Az utastsok krl lehetnek
kzk (whitespace) is (tabultor-, szkz-, ujsor-karakterek).
A CSS utastsok gyakran a HTML dokumentumba vannak begyazva; megvan a lehetsg arra,
hogy ezeket az utastsokat elrejtsk a rgebbi bngszk ell. Erre a clra a HTML szabvny
'megjegyzs' (comment) jele szolgl: <-- Megjegyzs --> - a kt jel kz rand a CSS
utastssor.
Az at-elrsok egy azonostknt szerepl at-kulcsszval kezddnek, amely eltt kzvetlenl
egy at, vagyis @ karakter ll (pl.:@import, @page). Az azonost tartalmazhat betket,
szmjegyeket s ms karaktereket (lsd albb). Egy at-elrs tartalma az els pontosvesszig
(;), vagy a kvetkez blokkig tart. Ha egy bngsz olyan at-elrssal tallkozik, amely nem az
@import kulcsszval kezddik, figyelmen kvl hagyja az egsz at-elrst s az elemzst a
kvetkez utastssal folytatja. Szintn figyelmen kvl hagyja az @import kulcsszt is, ha az
nem a stluslap legelejn tallhat.
@import "stilus.css"
H1 { color: blue }
@import "masikstilus.css"
Fenti pldban a msodik @import utasts a CSS1 szerint rvnytelen. A CSS rtelmez
kihagyja az egsz at-elrst, a stluslapot a kvetkezkppen rtelmezi:
@import "stilus.css"
H1 { color: blue }
Egy blokk nyit kapcsos zrjellel ({) kezddik s a neki megfelel zr kapcsos zrjelig (})
tart. Kzztk brmely egyedi karakter elfordulhat, a zrjelek (( )), kapcsos zrjelek ({ })
s szgletes zrjelek ([ ]) kivtelvel, amelyek a blokkon bell csak prban fordulhatnak el.
A fent emltett karakterek kz zrt utastsok egymsba gyazhatk. Az egyszeres (') s dupla
(") idzjelek szintn prban fordulhatnak el; a kzjk zrt karakterlnc szvegknt lesz
rtelmezve. A kvetkezkben bemutatunk egy pldt a blokk rtelmezsre. Figyeljk meg, hogy
az idzjelek kztt szerepl zr kapcsos zrjel nem prja a nyit kapcsos zrjelnek, valamint
a msodik egyszeres idzjel (') egy 'fgg' karakter, nem prja a nyit idzjelnek:
{ causta: "}" + ({7} * '\'') }
Egy elrskszlet egy szelektorbl s a hozz tartoz deklarcikbl ll. A szelektorknt
rtelmezend karakterlnc az els nyit kapcsos zrjelig ({) tart (de azt nem foglalja magba).
Azt az elrskszletet, amely nem rvnyes CSS szelektorral kezddik, a bngszk figyelmen
kvl hagyjk. Ttelezzk fel, hogy egy stluslap a kvetkezkpp nz ki:
H1 { color: blue }
P[align], UL { color: red; font-size: large }
P EM { font-weight: bold }
Fenti plda msodik sora rvnytelen CSS szelektort tartalmaz, a bngsz a kvetkezkpp
fogja rtelmezni:
H1 { color: blue }
P EM { font-weight: bold }
Egy deklarcis blokk egy nyit kapcsos zrjellel ({) kezddik s a hozz tartoz zr kapcsos
zrjrlig (}) tart. Kztk 0 (nulla), vagy tbb, pontosvesszvel (;) elvlasztott deklarci llhat.
Egy deklarci egy tulajdonsgnvbl, kettspontbl (:) s egy tulajdosg-rtkbl ll.
Mindegyik krl lehet kz (whitespace). A tulajdonsgnv egy (a korbban lertaknak megfelel)
azonost. A tulajdonsg-rkben brmely karakter szerepelhet, de a zrjelek (( )), kapcsos
zrjelek ({ }), szgletes zrjelek ([ ]), egyszeres (') s dupla (") idzjelek csak prban
fordulhatnak el. A zrjelek, szgletes zrjelek s kapcsos zrjelek egymsba gyazhatk. Az
idzjelek kztt tallhat karakterek szvegknt lesznek rtelmezve.
Annak rdekben, hogy a jvben meglev tulajdonsgokhoz j tulajdonsgokat s rtkeket
lehessen hozzadni, a bngszknek figyelmen kvl kell hagyniuk brmely rvnytelen
tulajdonsgnevet, vagy tulajdonsg-rtket. Valamennyi CSS1 tulajdonsg csak akkor fogadhat
el rvnyesnek, ha megfelel a nyelvtani s szemantikai elrsoknak. Pldaknt lssuk a
kvetkez stluslap elrst:
H1 { color: red; font-style: 12pt }
P { color: blue; font-vendor: any; font-variant: small-caps }
EM EM { font-style: normal }
Az els sor msodik deklarcijban a '12pt' rvnytelen rtk. A msodik sor msodik
deklarcijban a 'font-vendor' definilatlan tulajdonsg. A CSS rtelmez ezeket a deklarcikat
kihagyja, gy a stluslapot a kvetkezkpp fogja rtelmezni:
H1 { color: red }
P { color: blue; font-variant: small-caps }
EM EM { font-style: normal }
Megjegyzsek brhova beilleszthetk, ahol kzk (whitespace) elfordulhatnak. A CSS definil
ezenkvl mg helyeket, ahol kzk elfordulhatnak s megjegyzsek berhatk. A kvetkez
szablyok mindig betartandk:
Minden CSS stluslap kis-nagybet rzketlen, kivve a stluslap azon rszeit, amelyeket
nem a CSS vezrel (pl.: a fontcsald nevek s az url-ek kis-, s nagybet rzkenyek. A
CLASS s ID attribtumok a HTML felgyelete alatt llnak.)
A CSS1-ben a szelektorok (elemnevek, ostlyok s ID-k) csak a kvetkez karaktereket
tartalmazhatjk: a-z, A-Z, 0-9, az Unicode karaktereket 161-255 -ig, valamint a ktjelet
(-); nem kezddhetnek ktjellel, vagy szmjeggyel; tartalmazhatnak 'fgg'
karaktereket, s brmely numerikus kddal jellt Unicode karaktert (lsd a kvetkez
pontot).
A 'balper' jel (\) utn kvetkez legfeljebb ngy hexadecimlis szmjegy (0..9A..F) egy
Unicode karaktert jelent.
Brmely karakter - hexadecimlis szmot kivve - megfoszthat specilis jelentstl, ha
el egy 'balper' jelet helyeznk. Plda: "\"" - szveg, amely egy dupla idzjelet
tartalmaz.

JavaScript

Mi is az a JavaScript?
A JavaScript egy objektum alap programozsi nyelv, melyet a Netscape fejlesztett ki eredetileg
LiveScript nven. A LiveScript s a Java tvzsbl alakult ki a JavaScript, melyet elszr a
Netscape Navigator 2.0-ban implementltak. Sokan nevezik a nyelvet objektum orientltnak, ami
azonban nem teljesen igaz, hiszen olyan alapvet tulajdonsgok, mint pldul az rklds,
hinyoznak belle. A JavaScript a Java appletektl s a Java programoktl eltren futsidben
kerl rtelmezsre. Teht a bngsz letlti az oldalt, megjelenti a tartalmt, majd rtelmezi a
JavaScript (vagy ms nyelven rt scriptek) sorait. Mr most fontos leszgezni, hogy a JavaScript
nem Java! Szintaktikjban s felptsben ugyan nagyon hasonlt a nevt ad proramozsi
nyelvre, azonban lehetsgei sokkal korltozottabbak.

JavaScript s a bngszk
Mivel a JavaScript interpretlt nyelv, a programunk csak az oldal betltsekor fog lefutni, addig a
HTML kd sorai kztt pihen. Ennek a megoldsnak az az elnye, hogy a hibs programsorokat
knnyedn tudjuk javtani, htrnya viszont az, hogy a fradtsgos munkval megrt scriptnkhz
brki hozzfrhet, aki megtekinti oldalunkat. Ha egy programot a bngsz futtat, annak vannak
pozitv s negatv tulajdonsgai is. Elnyknt rtkelhet az, hogy a scriptnk platformfggetlen
lesz, teht ugyangy fog futni egy Macintosh gp bngszjben, mint a sokat dicsrt Windows-
os krnyezetben. Htrnyai kz sorolhat viszont az, hogy a script hibtlan futtatsa - a
szabvnyok tbbfle rtelmezsnek ksznheten - ersen a hasznlt bngsz tpusnak
fggvnye. Jelents eltrsek fedezhetk fel mr csak Windows-os bngszk JavaScript
implementciinak sszehasonltsa sorn is. Nzznk csak meg egy Internet Explorer 5.0-ra
optimalizlt oldalt Netscape, vagy Opera bngszkkel! J esetben csak nhny funkci nem
mkdik az oldalon, mskor azonban az egsz weblap mkdskptelenn vlhat. Tovbbi
problmk merlhetnek fel, ha oldalunk ltogatja olyan bngszt hasznl, mely nem tmogatja,
vagy nem ismeri a JavaScriptet, br ennek valsznsge manapsg igen kicsi. E bngszk
ugyanis hajlamosak arra, hogy a szmukra rtelmezhetetlen utastsokat egyszeren megjelentik,
mintha az a weblap szvegnek rsze lenne, elcsftva s feltrva ezzel gondosan elksztett
oldalunkat. Hogy ezt elkerljk az utastsainkat a HTML kd megjegyzsei kz kell
beillesztennk: a "<!--" s "-->" szekvencik kz. Az jabb bngszket nem zavarja ez a kis
csalafintasg, a HTML szabvnyt pontosan kvet rgebbi vltozatok pedig nem zavarodnak
ssze tle, mert egyszeren kommentknt rtelmezik a valjban script-kdot tartalmaz
oldalrszeket. A fentiek miatt nagyon fontos, hogy szem eltt tartsuk a kvetkez dolgokat:
scripteket csak korltozott mrtkben alkalmazzunk, s lehetleg gy, hogy azt tbb bngsz
segtsgvel is kiprbljuk. A msik dolog, hogy ha amennyiben lehetsg van r, alkalmazzunk
statikus HTML megoldsokat a feladatok elltsra s szerver-oldali ellenrzseket a bemen
adatok validlsra arra az esetre, ha a JavaScript kdunk ezt a feladatot a bngsz vezrija
s/vagy belltsai miatt nem kpes elvgezni. Hogy egy kicsit rthetbb legyen: ha script
segtsgvel automatikusan tirnytunk egy oldalt egy msikra (ksbb lerjuk hogyan), akkor
tegynk az oldalra egy linket is, amelyik a msik oldalra vezet, azon bngszk szmra, akik
nem rtik a JavaScriptet. A problmk egy rsze ugyan a bngsz azonostsval (szintn
ksbb) elkerlhet, azonban jobb a scriptek hasznlatval csnjn bnni.

JavaScript begyazsa a HTML dokumentumba


Miutn megismertk a nyelv trtnett s sajtossgait, lssuk az els programot, melynek
feladata mindssze annyi lesz, hogy egy kis felbukkan zenetablakban megjelenti a "Hello
World!" szveget.
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
alert("Hello World!");
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
A plda egyszer, de ugyanakkor nagyon szemlletes (remlhetleg). A HTML dokumentumunk
fejrszbe illesztettnk be egy programsort a <SCRIPT> tagok kz, gy a bngszvel tudattuk,
hogy a HTML kdot ms nyelven rt scripttel szaktjuk meg. Mivel tbbfle scriptnyelv is ltezik
(pl.: VBScript), s ezek kzl tbbet is hasznlhatunk egy dokumentumon bell, a bngsznek
megmondhatjuk, hogy mely scripteket hogyan kell rtelmeznie. Ehhez a SCRIPT tag
LANGUAGE attribtumt kell belltanunk. Ha pldul egyszeren a JavaScript szt rjuk ide
be, az a bngsz szmra a JavaScript 1.0-s verzijt jelenti. Ha olyan szolgltatsokat is
hasznlni szeretnnk, melyek ebben a verziban mg nem szerepelnek, az attribtumnak adjuk
rtkl a JavaScript1.2-t, s mris j funkcikkal bvlnek scriptnk lehetsgei. Trjnk vissza
egy pillanatra a programhoz, mely tulajdonkppen egyetlen sorbl ll, mely elvgzi a kitztt
feladatot, azaz megjelenti zenetnket. Ehhez az ALERT() metdust (ha jobban tetszik
fggvnyt, de legynk objektum alapak), hasznltuk. Az alert eljrs hasznlata rendkvl
egyszer a zrjelek kztt kell megadnunk a megjelentend szveget. Ha szvegnk statikus,
azaz nem vltozik, idzjelek kztt kell beillesztennk a fggvnybe. Az alert segtsgvel a
vltozk rtkeit is megjelenthetjk, de errl majd ksbb lesz sz.
Legfontosabb esemnyek
Egy HTML oldal letben is vannak esemnyek, pldul amikor valaki vgre betlti lapunkat,
amikor kattint rajta, vagy amikor elhagyja azt. Ezeket az esemnyeket, vagy ha jobban tetszik
felhasznli interakcikat scriptnk kpes lekezelni beptett esemnyekezeli segtsgvel. A
legfontosabb esemnyeket foglaljuk ssze az albbiakban.
Esemny neve Esemnykezel Mikor kvetkezik be
load onLoad a HTML oldal betltsekor
click onClick az objektumra trtn kattintskor
change onChange ha az rlap mezjnek rtke megvltozik
mouseover onMouseOver az egrmutat az objektum fltt van
A felsorols termszetesen nem teljes, azonban nhny alapvet ismeretet szerezhetnk belle.
Az els, amit fontos tudni, hogy rtelemszeren nem minden objektumhoz rendelhetnk hozz
minden esemnyt (a ksbbiekben egy nagyobb tblzat segt majd ebben eligazodni). A msodik
fontos tudnival az esemnykezelk helyes lersnak mdja, a JavaScript ugyanis - akrcsak az
igazi Java - klnbsget tesz a kis s nagybetk kztt. Ennek megfelelen az esemnykezelk
neveit mindig kis kezdbetvel, a szsszetteleknl azonban nagybetvel kell rni, gy lesz az
onmouseover-bl onMouseOver.

Hasznljuk amit tudunk, 2. plda


A kvetkez pldban tudjuk is alkalmazni a most megszerzett ismereteinket. Mindssze annyi a
dolgunk, hogy egy gombra val kattintskor rjuk ki a "Rmkattintottl!" szveget. Ehhez ltre
kell hoznunk egy HTML formot, amibe begyazhatjuk a gombot. A gombra val kattintskor
teht bekvetkezik egy click esemny, mely meghvja az onClick esemnykezelt, melynek
hatsra lefut a scriptnk, s kirja a szveget. A forrskd teht a kvetkez:
<HTML>
<BODY>
<FORM>
<INPUT TYPE="BUTTON" NAME="GOMB" VALUE="Kattints ide!"
onClick="alert('Rmkattintottl!')">
</FORM>
</BODY>
</HTML>
Scriptnk rsa kzben hasznlhatunk szimpla s dupla idzjeleket is, s kombinlhatjuk is ket,
de mindig gyeljnk a sorrendre. Ha egy szveget szimpla idzjellel kezdtnk, akkor azzal is
zrjuk be, egyrtelmen kifejezve ezzel a szveg s az utasts hatrait.

Link a Script-re
Ennek a fejezetnek kt fontos tanulsga lesz. Az els, hogy a JavaScriptnket nemcsak
esemnyek hatsra hvhatjuk meg, hanem szabvnyos HTML linkek segtsgvel is, a msodik
pedig az, hogy ahny bngsz, annyi szoks. Mit is jelent ez? Azt mr tudjuk, hogy a Netscape-
ben jelent meg elszr a JavaScript, s mint ltvnyos s jl hasznlhat scriptnyelv hamarosan
el is terjedt, s tbb bngszbe is beptettk. A bngszk fejleszti azonban nem egysgesen
implementltk a nyelvet, s ez rdekes megoldsokhoz vezetett. IE 4.0 alatt tesztelve oldalunkat
semmi baj nem szrmazik abbl, ha egy kphez rendeljk hozz az onClick esemnyt - ami a
JavaScript szablyai szerint slyos hibnak szmt - st, oldalunk mg megfelelen is fog
mkdni. Ha azonban ezt az oldalt a Netscape valamely kiadsval tekintjk meg jobb esetben
nem trtnik semmi, ha a kpre kattintunk, rosszabb esetben hibazenetet is kapunk. Akkor vajon
mi a teend ha egy kphez az onClick esemnykezelt szeretnnk rendelni, s szeretnnk
oldalunkat lehetleg Netscape s Opera bngszkkel is lvezhetv tenni? Ekkor hasznlhatjuk
a kvetkez megoldst: kphez ugyan nem, de linkhez mr rendelhetnk Click esemnyt. Teht a
kpet, mint szabvnyos linket hozzuk ltre viszont href attribtumnak a kvetkez rtket adjuk:
href="javascript:void(utastsok, fggvnyek)". A kvetkezkppen:
<HTML>
<BODY>
<a href="javascript:void(alert('Mkdik!'))">link, ami akr egy kp is
ehet</a>
</BODY>
</HTML>
Teht ltrehoztunk egy linket - ami nem csak szveg, hanem akr egy kp is lehet - aminek href
tagjban megadtuk, hogy a link valjban nem egy msik HTML oldalra mutat, hanem egy
JavaScript utastsra, ami esetnkben az alert fggvny meghvsa.A fggvny rtket adhat
vissza, s a visszaadott rtk a kpernyn jelenne meg, amit viszont a VOID() megakadlyoz. Ezt
a megoldst csak akkor kell alkalmaznunk, ha a meghvott eljrsnak van visszaadott rtke,
teht esetnkben nem.

Csoportostsunk, avagy a fggvnyek


A fggvnyeket teljesen szabadon definilhatjuk a kvetkez szintaktikval:
function fuggveny(valtozo) {
utasitasok
...
}
Az ellenrzst s az adatok elkldst elvgezhetjk egy fggvny segtsgvel, gy az
esemnykezel meghvsa utn csak a fggvnynk nevt kell rnunk. Ennek a fggvnynek
tadjuk az rlap megfelel mezjnek rtkt s kezddhet is a vizsglat. Az ilyen fggvnyeket
a HTML dokumentum elejn szoks definilni, elkerlve azt, hogy elbb hvjuk meg a
fggvnyt, mint ahogy a lersa szerepelne. A legclszerbb ha fggvnyeinket mg a fejrszben
deklarljuk, gy ezek a problmk nem fordulhatnak el. A fggvny rsa sorn egsz csom
vltozval dolgozhatunk, gy fontos hogy ismerjk azok hatskrt. A vltozk rvnyessgi
kre attl fgg, hogy hol deklarltuk ket. Ha a fggvnyeken kvl, akkor az egsz
dokumentumra rvnyes, ha fggvnyen bell, akkor csak az adott fggvnyen bell rhetjk el
ket. A fggvnyek hasznlatt mutatja be a kvetkez egyszer plda, mely egy figyelmeztet
ablakban rja ki, hogy az OK s a Mgse lehetsgek kzl melyiket vlasztottuk.
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function dontes() {
if (confirm('Mit vlasztasz?'))
alert('OK');
else
alert('Mgse');
}
</SCRIPT>
</HEAD>
<BODY>
<FORM>
<input type="button" value="Vlassz!" onClick="dontes()">
</FORM>
</BODY>
</HTML>
A fenti script rtelmezshez nhny alapvet ismeret azrt szksges. A CONFIRM() metdus
egy vlaszt-ablakot jelent meg a kpernyn, ahol az OK s a Mgsem lehetsgek kzl
vlaszthatunk. Ha az OK-t vlasztjuk az eljrs igaz rtkkel tr vissza, ha a Mgse gombra
kattintunk hamis a visszatrsi rtk. Ennek megfelelen a fggvnyben lv felttel teljesl,
illetve nem teljesl, teht a vlasztsunknak megfelel figyelmeztet ablak jelenik meg a
kpernyn.

Objektumok, dokumentumok
Tudjuk, hogy a JavaScript objektum alap, s nem objektum orientlt nyelv, hiszen az
objektumok egy szinten helyezkednek el, objektumai kztt mgis szoros, al s flrendeltsgi
viszony figyelhet meg. Az egsz HTML dokumentumunk ilyen objektumokbl pl fel, melyek
alapkontextust a window objektum adja. Az objektumoknak tovbbi objektumai, tulajdonsgai
s metdusai is lehetnek, amelyekre a pont-opertor segtsgvel hivatkozhatunk. Lssunk egy
egyszer pldt: ha a HTML oldalunk URL-jt akarjuk megtudni, teht azt az Internet-cmet,
amin keresztl a lapot elrjk, a document objektum location objektumnak rtkt kell
kiratnunk: document.location. Az objektumok metdusait is hasonl mdon rhetjk el: a
dokumentum nv mezjre val fkuszlshoz pldul a mezhz tartoz FOCUS() metdust
kell meghvnunk: document.form.nv.focus(). Az objektumokat nagyon sokfle mdon
elrhetjk programozs sorn, ami megknnyti a munkt, viszont nagyon zavar is lehet, ha
valaki nincs tisztban az objektumok hierarchijval, ezrt jl jhet a kvetkez segtsg. A teljes
HTML dokumentum objektumok sokasgbl pl fel, s a JavaScript segtsgvel szinte
minden egyes objektumnak meg tudjuk vltoztatni az sszes tulajdonsgt - hiszen erre talltk
ki. ptsnk fel egy HTML rlapot, mely telis-tele van klnbz beviteli mezkkel
rdigombokkal, s checkbox-okkal. Ennek a dokumentumnak a f objektuma a document
objektum. Ennek tovbbi objektumai a formok, melyek tovbbi objektumokknt tartalmazzk a
beviteli mezket. A beviteli mezknek pedig tovbbi metdusai s tulajdonsgai lehetnek. gy
teht egy beviteli mez rtkt a kvetkezkppen rhetjk el: document.form.mezo.value. Az
objektumoknak nem ktelez, de lehet nevet adni. Az objektumok ekkor hromfle mdon
rhetk el. Az elbbi pldnl maradva: a beviteli mez rtke a kvetkezkppen rhet el:
- document.form.mezo.value
- document.forms[0].elements[0].value
- document.forms['form'].elements['mezo'].value
A fenti elrsi mdozatokat kombinlhatjuk is. Sokat segthet azonban, ha tudjuk, hogy a
dokumentum elemei a lap tetejtl kezdve kerlnek beszmozsra, teht a document.forms[0] a
dokumentum tetejhez legkzelebb es HTML formot jelenti. Nzznk egy pldt: Az oldal
tulajdonsgainak mdostsa lesz a feladat. Ltrehozunk egy formot egy beviteli mezvel,
amelynek kirjuk, majd megvltoztatjuk az rtkt. Ehhez kt fggvnyt fogunk hasznlni, egyet
a kirshoz s egyet a megvltoztatshoz.
<HTML>
<HEAD>
<SCRIPT LANGUGE="JavaScript">
function kiiras(mezo) {
alert(mezo);
}
function valtoztatas() {
document.form.szoveg.value="Megvltozott!";
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="form">
<input type="text" name="szoveg">
<input type="button" value="Kiir"
nClick="kiiras(document.form.szoveg.value)">
<input type="button" value="Valtoztat" onClick="valtoztatas()">
</FORM>
</BODY>
</HTML>
Ahhoz hogy a fent lert feladatot el tudjuk vgezni a KIIRAS() fggvny meg kell hogy kapja a
beviteli mez rtkt meghvsakor, mely jelen esetben a document.form.szoveg.value
tulajdonsgon keresztl rhet el. A VALTOZTATAS() eljrsnak ezzel szemben nincs szksge
semmilyen paramterre, hiszen feladata csak annyi, hogy a mez rtkt megvltoztassa. A fenti
plda ugyan nagyon egyszer, de vegyk szre, hogy ezzel a mdszerrel, teht egy egyszer
rtkadssal, mdosthatjuk minden objektum tulajdonsgt, dinamikusan vltoztatva ezzel
oldalunk megjelenst. Kicserlhetjk a httrsznt, de akr a betk sznt is megvltoztathatjuk.
Ha a beviteli meznek nem adunk nevet, akkor a vltoztatskor a fentiekben lert mdon
jrhatunk el. Ha teht az VALTOZTATAS() fggvnyt kicserljk a kvetkezre, minden
ugyangy fog mkdni.
function valtoztatas() {
document.forms[0].elements[0].value="Megvltozott!";
}

Ha hibztunk
Mi trtnik, ha hibt vtnk a program rsa kzben? A tbbi programozsi nyelvben ilyenkor a
fordttl figyelmeztetst vagy hibazenetet kapunk. JavaScript esetben a fordtst s a futtatst
is egy bngsz vgzi, gy a hibajelzseket innen kell vrnunk, nhny esetben sajnos hiba.
Azrt hiba, mert a bngszk "termszetesen" ebben is klnbznek. Ha a Netscape hibt jelez
("Javascript error!" Felirat jelenik meg az llapot sorban), akkor a cmsorba kell bernunk a
"javascript:" sort, s mris rmutat a hiba okra. Ez a funkci akkor is jl hasznlhat, ha csak
ellenrizni szeretnnk egy-egy utastst, mivel azokat itt is tesztelhetjk. rjuk be a cmsorba,
hogy "javascript:alert('Hiba')" s mris megjelenik a figyelmeztet ablak. Ez a funkci rendkvl
egyszeren s hatkonyan hasznlhat.
Az Explorer szoldabban (egy kis srga hromszg a status sor sarkban) jelzi a hibnkat, s a
hiba oknak feldertsben sem jr el a Netscape gondossgval.

Esemnyek
Ahhoz, hogy hatkonyan hasznlhassuk a JavaScript nyelvet, szksgnk lesz egsz csom
esemny kezelsre, hiszen a felhasznli beavatkozsok, tevkenysgek irnytjk lapunk
mkdst. Az esemnyek lekezelshez - mint mr tudjuk - esemnykezelket kell hasznlnunk.
Ezek egy kis rszt mr ismerjk, de a programozs sorn sokkal tbb esemny
megklnbztetsre lesz szksgnk. Amit fontos mg tudni, hogy nem minden esemny
rendelhet hozz minden objektumhoz, elemhez. Hogy tisztn lssuk az esemnyek -
esemnykezelk - objektumok viszonyt, nzzk meg alaposan az albbi tblzatot. esemnyek -
esemnykezelk objektumok
Esemny esemnykezel objektum Akkor kvetkezik be...
elemei ha a fkusz egy msik
Blur onBlur window, frame, form
objektumra kerl
gomb, radio-gomb, ha az objektumra kattintunk
Click onClick
checkbox,link
ha megvltozik az adott mez
Change onChange text,textarea,select
rtke
Focus onFocus window, frame, form elemei ha a fkusz az elemre kerl
document, image,
Keydown onKeyDown ha egy billenty lenyomsra kerl
link, text, textarea
document, image,
Keyup onKeyUp ha egy billenty felengedsre kerl
link, text, textarea
Load onLoad document amikor a HTML oldal betltdik
Mouseout onMouseOut area, link ha az egr elhagyja az objektumot
Mouseov
onMouseOver area, link ha az egr az elem fl kerl
er
ha a mez valamely rszt
Select onSelect text, textarea
kivlasztjuk
Submit onSubmit form ha a submit gombra kattintunk
Ha esetleg a fenti tblzat rtelmezshez me egy kis magyarzat: az els oszlopban szerepel az
esemny neve, a msodikban a hozz tartoz esemnykezel, a harmadik oszlop tartalmazza azon
objektumok listjt, melyekhez az esemnykezel hozzrendelhet, s vgl a negyedik
oszlopban lthatjuk, hogy az adott esemny mikor kvetkezik be. Nzznk egy gyakorlati pldt:

Vltoz kpek
Ha a HTML kdban <IMG> tag-be berakjuk a NAME="kep" attribtumot, akkor kpnkre a
kvetkez mdon hivatkozhatunk: document.kep, a forrsfjlt pedig a document.kep.src
tulajdonsgon keresztl rhetjk el, illetve vltoztathatjuk meg. A feladat rendkvl egyszer
lesz: vltozzon meg a kp, ha a felhasznl fl viszi az egeret, nyerje vissza eredeti llapott, ha
elvitte onnan, s legyen ms akkor is, ha rkattintottunk. Lssuk a programot:
<html>
<body>
<a href="javascript:alert('Lenyomva is ms a kp, de sajnos hamar
isszaugrik')">
<img name="kep" src="1.jpg"
onMouseOver="document.kep.src='2.jpg'"
onMouseOut="document.kep.src='1.jpg'"
onClick="document.kep.src='3.jpg'">
</a>
</body>
</html>
Mi trtnik, ha a cserlend kpek tl nagyok, vagy a felhasznl svszlessge tl kicsi?
Nagyon egyszer, a kpek kisebb nagyobb ksssel fognak megjelenni, hiszen letltsk csak az
els hivatkozs pillanatban fog elkezddni (azaz pl. a 2.jpg akkor, amikor elszr mozgatjuk az
egeret a kp fl), s a kicsi svszlessg miatt akr j nhny msodpercbe is beletelhet mire a
bngsznek sikerl a kpet letltenie, s vgre megjelentheti azt. Ez idnknt elg zavar lehet.
Azonban erre is van megolds.
Eltlttt kpek
Ltre kell hoznunk j objektumokat, mgpedig olyanokat, amelyek kpek, de nem jelennek meg
az oldal betltdskor a dokumentum felletn. Ezt az Image objektum hasznlatval rhetjk el.
Lssuk elszr a forrskdot, majd sorrl sorra a magyarzatot.
<html>
<script>
elsoKep = new Image();
elsoKep.src = "1.jpg";
masodikKep = new Image();
masodikKep.src = "2.jpg";
function kepMutat(forras) {
if (forras==1) document.kep.src= elsoKep.src;
else document.kep.src= masodikKep.src;
}
</script>
<body>
<a href="javascript:alert('Elre tlttt kpekkel...')">
<img name="kep" src="1.jpg"
onMouseOver="kepMutat(2)"
onMouseOut="kepMutat(1)">
</body>
</html>
A HTML kd remlem mr mindenkinek vilgos: ltrehozunk egy kpet - ami felttlenl link
kell, hogy legyen -, amely klnbz esemnyek hatsra klnbz fggvnyeket hv meg. A
hangsly itt a fggvnyeken, illetve a JavaScript kdon van. A script trzsben - teht a fggvny
defincijn kvl - ltrehozunk kt j objektumot, melyek gy a fggvnybl s azon kvlrl is
elrhetek lesznek. Ezek az objektumok Image, azaz kp objektumok, melyeket a
kvetkezkppen hoztunk ltre: elsoKep = new Image(). Teht az elsoKep egy j (new) kp
objektum lesz (Image), melynek, a kvetkez sorban, az src attribtumban megadjuk a kpet
tartalmaz fjlnak a nevt. Hasonlan hozzuk ltre a msodik kpnket is. Ezzel a mdszerrel a
kpek mr az oldal letltdse kzben letltsre kerlnek a memriba vagy a bngsz helyi
gyorsttrba, gy a kpcserekor csak meg kell jelenteni ket, nem kell azok letltsre
vrnunk. Nincs ms dolgunk, mint rni egy fggvnyt, ami a kpek attribtumainak vltoztatsait
elvgzi. Erre a feladatra szolgl a kepMutat eljrs, ami a paramtertl fggen az elsoKep vagy
a masodikKep objektumokban trolt kpeket jelenti meg, egy feltteltl fggen. A fenti
mdszerek alkalmazsval - akr tbbtucat kpet is hasznlhatunk - nagyon ltvnyoss tehetnk
mr egy egyszer oldalt is, azonban itt sem rdemes tlzsokba esni, s tldszteni a lapunkat.

Idztsek
A JavaScript lehetsget ad az utastsok idztsre. Ez az idzts tulajdonkppen azt jelenti,
hogy az adott utasts csak bizonyos id mlva fog vgrehajtdni. Erre a funkcira sokszor
szksgnk lehet, ha valamit ksleltetni szeretnnk, pldul a felhasznlnak idt szeretnnk adni
egy szveg elolvassra, mieltt j oldalt tltennk be. Az ilyen esetekre talltk ki a
setTimeout() metdust, melynek paramterei a kvetkezk: setTimeout("utasts",id). Az eljrs
a paramterl kapott utastst - melyet mindig idzjelek kz kell tennnk - csak adott id
mlva hajtja vgre. Ha teht azt szeretnnk, hogy 5 msodperc mlva ugorjunk egy msik
oldalra, akkor a kvetkez utastst kell hasznlnunk: setTimeout("location.href =' uj_oldal.html'
",5000), ugyanis az id paramterl szolgl szmokat milliszekundumokban (azaz ezred
msodpercekben) kell megadnunk.
Feladatunk az lesz, hogy egy beviteli mezben bizonyos ksleltetssel rjunk ki egy szveget,
mintha valaki ppen most gpeln be azt. Lssuk elszr a forrskdot majd a hozz tartoz
magyarzatot.
<html>
<script>
function kiiras() {
var kiirandoSzoveg="Ezt szpen lassan jelentjk meg...";
var kiirtSzoveg=document.form.mezo.value;
var kiirandoHossz=kiirandoSzoveg.length;
var kiirtHossz=kiirtSzoveg.length;
if (kiirtHossz<kiirandoHossz) {
document.form.mezo.value=kiirandoSzoveg.substring(0,kiirtHossz+1);
setTimeout("kiiras()",300);
}
}
</script>
<body onLoad="kiiras()">
<form name='form'>
<input type='text' name='mezo' size='35'>
</form>
</body>
</html>
A HTML kdban mindssze egy beviteli mezt definilunk a hozz tartoz form-mal, s az oldal
betltdsekor meghvjuk a kiiras eljrst. Nzzk akkor a fggvnynket sorrl sorra. Az els
sorban definilunk egy vltozt, melyben elhelyezzk a kirand szveget. A msodik sorban
ltrehozunk mg egy vltozt, melyben a mr kirt szveget troljuk el. Mivel szksgnk lesz
mind a kirand, mind a kirt szveg hosszra, ezrt a kvetkez utastsok segtsgvel ezt a kt
rtket troljuk el egy-egy vltozban. Kvetkezik egy felttel, mely eldnti, hogy folytassuk-e a
kiratst, vagy befejezdhet scriptnk futsa, azaz mr kirtuk a kvnt szveget. Ekkor a kirt
karakterek szmt nveljk a substring metdus segtsgvel, majd jra meghvjuk
fggvnynket, egy kis ksleltets beiktatsval.
Azt hiszem, nem rt, ha a felttel igaz gban szerepl kt sort kicsi tovbb elemezzk. A
kiirandoSzoveg vltoznak hasznljuk a substring metdust, melynek kt paramtere van. Az
els paramter mondja meg, hogy hnyadik karaktertl kezdve, a msodik pedig hogy hnyadik
karakterig rjuk ki a stringet. Teht ha stringnk a"valami" szbl ll, akkor annak
string.substring(0,2) metdusa a "va" sztagot adja vissza rtkl. Mivel esetnkben a msodik
paramter mindig egyel nvekszik, gy minden lpsben egyel tbb karakter jelenik meg a
kirand stringbl a kpernyn. Most kvetkezik a ksleltets, mely 0,3 msodperc mlva jra
meghvja a kiiras() eljrst, s gy jabb bet jelenhet meg a beviteli mezben.
Ezt a mdszert, amikor a fggvny sajt magt hvja meg rekurzinak nevezzk, s ilyen, vagy
ehhez hasonl problmk (faktorilis kiszmtsa) nagyon j hasznt vehetjk.

Status sor
A status sorban lland s vltoz informcik is megjelenhetnek, ppgy, mint egy beviteli
mezben. A kt mezbe val rs mdja sem tr el jelentsen egymstl, gy kzenfekv, hogy az
elbbi pldban hasznlt szvegkir scriptet ltessk t a status sorra. A kd csak annyiban
vltozik, hogy nem kell formot deklarlnunk, s a beviteli mez helyett a scriptnk kimenete a
status sor lesz.
<html>
<script>
function kiiras() {
var kiirandoSzoveg="gy kszl az internetes futfny, mr csak le
kellene trlni...";
var kiirtSzoveg=window.status;
var kiirandoHossz=kiirandoSzoveg.length;
var kiirtHossz=kiirtSzoveg.length;
if (kiirtHossz<kiirandoHossz) {
window.status=kiirandoSzoveg.substring(0,kiirtHossz+1);
setTimeout("kiiras()",100);
}
}
</script>
<body onLoad="kiiras()">
Ne ide nzz, hanem egy kicsit lejjebb...
</body>
</html>
A kdban trtnt vltoztatsok szerintem maguktl rtetdek, ezrt nem is szeretnm tlmagyarzni a dolgot. A
scriptnkkel - remlhetleg - csak egyetlen gond van, mgpedig az, hogy ugyan hajland kirni a szveget, azonban
futsa ekkor be is fejezdik, s a status sor jra unalmass vlik. Erre a problmra nyjt gygyrt a kvetkez plda.

SWITCH hasznlat
Nzznk egy olyan progamot, amely eltvoltja egy szvegbl az kezeteket:
<html>
<script>
function check() {
var
utolsoKarakter=document.form.text.value.substring(document.form.text.value.len
gth-1);
var ujKarakter="";
switch (utolsoKarakter) {
case "" : ujKarakter="e"; break;
case "" : ujKarakter="E"; break;
case "" : ujKarakter="a"; break;
case "" : ujKarakter="A"; break;
case "" : ujKarakter="i"; break;
case "" : ujKarakter="I"; break;
case "" : ujKarakter="u"; break;
case "" : ujKarakter="U"; break;
case "" : ujKarakter="u"; break;
case "" : ujKarakter="U"; break;
case "" : ujKarakter="o"; break;
case "" : ujKarakter="O"; break;
case "" : ujKarakter="o"; break;
case "" : ujKarakter="O"; break;
case "" : ujKarakter="u"; break;
case "" : ujKarakter="U"; break;
case "" : ujKarakter="o"; break;
case "" : ujKarakter="O"; break;
}
if (ujKarakter)
document.form.text.value=document.form.text.value.substring(0,document.form.te
xt.value.length-1) + ujKarakter;
}
</script>
<body>
Ide lehet beptygni a szveget, amibl majd kiszedjk az kezetes
betket:<br>
<form name="form">
<textarea name="text" rows="10" cols="30" onKeyUp="check()"></textarea>
</form>
</body>
</html>
Ltrehoztunk egy form-ot egy beviteli mezvel, s megadtuk, hogy minden egyes billenty
lenyomsa utn fusson le az ltalunk megrt ellenrz fggvny. Metdusunk nem tl bonyolult
mindssze egy vltoz defincit, egy switch-case szerkezetet, s egy felttelt tartalmaz. Az els
lpsben beolvassuk a beviteli mezben lv sztringet, s levgjuk rla az utols karaktert, hiszen
elg ezt vizsglnunk. Ezek utn el kell dntennk, hogy mit tegynk ezzel a karakterrel. Ehhez
egy switch-case szerkezetet hasznlhatunk, mely a kvetkezkppen mkdik. A switch a
paramterknt megkapott vltoz, switch(valtozo), rtktl fggen klnbz utastsokat hajt
vgre. Ezeket az rtkeket s a hozzjuk tartoz utastsokat a case "rtk" : utasts
szintaktikval definilhatjuk. A switch sajtossga, hogy minden egyes ilyen sor utn, ha nem
akarjuk, hogy a kvetkez is vgrehajtdjon, egy break utastst kell rnunk. Ennek megfelelen
a case "" : ujKarakter="e"; break; sor abban az esetben, ha az utols lettt karakter "" volt az
ujKarakter vltoznak az "e" karaktert adja rtkl, s befejezi a vizsglatot. Mivel ezt minden
kezetes betre elvgeztk, gy mindegyik helyre sajt kezet nlkli prja helyettestdik majd
be. Ehhez azonban szksg van mg egy lpsre: meg kell vizsglnunk, hogy megvltoztattuk-e a
karaktert, azaz az ujKarakter vltozba kerlt-e valami. Ha a felttel igaznak bizonyul, akkor a
beviteli mezben lv stringhez a fggvny ltal visszaadott karaktert fzzk, a felttel hamis
volta esetn nem trtnik semmi.
A mlt hnapban megprbltam gyakorlati pldkon bemutatni, hogyan is hasznlhatjuk a JavaScript kdokat a
weblapunk kialaktsakor. Most ezt a hagyomnyt kvetve mg gyakorlatibb pldkat szeretnk bemutatni, amik
vals helyzetben is hasznlhatk, s valdi problmkat oldanak meg. Az elz rszben mr volt egy kis program, az
kezettelent rutin, mely ilyen feladatot oldott meg, ennek most egy tovbbfejlesztett vltozatval is
megismerkedhetnk.
For ciklus haszlata
Az elz verzinak kt, viszonylag nagy, hibja van. Az egyik, hogy csak az utols karaktert
vizsglja, gy ha valaki utlag szr be valamit a szvegbe, akkor abban mr nem cserli le az
kezeteket. A msik hiba, hogy ha kivg/beilleszt mdszerrel nagyobb szveget msolunk a
beviteli mezbe, akkor az elbb emltett okokbl szintn elmarad a kvnt hats. Mindkt
problma orvosolhat a kvetkez mdszerrel. Minden egyes bevitelkor, egy for ciklus
segtsgvel, az egsz szveget leellenrizzk. Kvetkezzen most a javtott vltozat, s egy kis
magyarzat hozz:
<html>
<script>

function check()
{
var vizsgaSzoveg=document.form.text.value;

for (var i=1; i<=vizsgaSzoveg.length; i++)


{
var vizsgaKarakter=vizsgaSzoveg.substring(i-1,i);
var ujKarakter="";
switch (vizsgaKarakter) {
case "" : ujKarakter="e"; break;
case "" : ujKarakter="E"; break;
case "" : ujKarakter="a"; break;
case "" : ujKarakter="A"; break;
case "" : ujKarakter="i"; break;
case "" : ujKarakter="I"; break;
case "" : ujKarakter="u"; break;
case "" : ujKarakter="U"; break;
case "" : ujKarakter="u"; break;
case "" : ujKarakter="U"; break;
case "" : ujKarakter="o"; break;
case "" : ujKarakter="O"; break;
case "" : ujKarakter="o"; break;
case "" : ujKarakter="O"; break;
case "" : ujKarakter="u"; break;
case "" : ujKarakter="U"; break;
case "" : ujKarakter="o"; break;
case "" : ujKarakter="O"; break;
}
if (ujKarakter)
{
vizsgaSzoveg=vizsgaSzoveg.substring(0,i-1) +
ujKarakter + vizsgaSzoveg.substring(i);
document.form.text.value=vizsgaSzoveg;
}
}
}
</script>
<body>
Ide lehet beptygni a szveget, amibl majd kiszedjk az kezetes
betket:<br>
<form name="form">
<textarea name="text" rows="10" cols="30" onKeyUp="check()"></textarea>
</form>
</body>
</html>
Akkor lssuk mi is vltozott. A HTML form, illetve az kezetek kiszrst vgz switch-case
szerkezet, teljes egszben ugyan az, mint az elz programban. Vltozott viszont a fggvnynk
szerkezete, s nhny utastsa. Az els sorban egy egyszer rtkadssal kikszbljk, a
vltoznevek hossz, s fradsgos begpelst. Ezek utn egy for ciklus segtsgvel
vgigmegynk az egsz string-en, s egyesvel levizsgljuk a karaktereket. A karakterek
elrshez a substring metdust hasznljuk a megfelel paramterezssel. Megadjuk neki a kezd
s vg indexet, amelyek kztti rszre kvncsiak vagyunk. A kivlaszts utn kvetkezik a mr
ismert vizsglat.

Ellenrzsek
A valdi internetes oldalak kialaktsakor ltalban szksg van adatok bevitelre a felhasznl
rszrl, azonban ezeket az adatok ellenrizni kell a feldolgozsuk eltt. Mivel itt kliens oldali
programozsrl runk, gy az adatok feldolgozsval nem, csak az ellenrzskkel foglalkozunk.
Ehhez szksg van HTML ismeretekre is, amit gyorsan tvesznk, hogy rthet legyen a
problma, s a megolds is.
Mr eddig is hoztunk ltre form-okat (magyarra fordtva taln rlapokat), de a valdi
jelentsgkrl mg nem, vagy csak alig esett sz. Ezek az rlapok biztostjk a felhasznl s a
szerver kztti adatcsert. Az gy kitlttt adatokat elkldjk a szerverre, ahol valamilyen CGI
(Common Gateway Interface) program feldolgozza azt. Az rlap klnbz beviteli elemekbl
ll, ezekbl mutatok be most rviden nhnyat:
tpus Tulajdonsgok
text Sortrsek nlkli szveg bevitelre alkalmas mez.
textarea Tbbsoros szveg bevitelekor hasznljuk
select Vlasztlista, tbb lehetsges, rgztett rtk kzl vlaszthatunk.
button Nyomgomb, ami a felhasznli interakcikat hivatott lekezelni.
submit Nyomgomb, ami a form adatainak elkldsre szolgl.
hidden Specilis rejtett mez, amiben a szerver oldali program szmra
fontos adatokat kezelhetnk.
Form nhny eleme, s tulajdonsgaik
A pldk sorn csak a text, s a submit, illetve a button objektumokkal fogunk megismerkedni,
mivel a feladatok nagy rsze ezek segtsgvel jl bemutathat. A ksbbiekben igyekszem majd
a tbbi elem bemutatsra is.
Egy egyszer form a kvetkez elemekbl ll: beviteli mezk s submit vagy button
nyomgomb. ltalban a submit gombot hasznljuk az adatok elkldsre, de kerl ton a
button gombbal is megoldhat ez a feladat.
Lssunk akkor egy form-ot, melynek csak annyi a feladata, hogy kt mez tartalmt elkldi a
szervernek (a <body> s <html> tagokat most elhagyjuk):
<form name="form" action="feldolgoz.cgi" method="post">
nv: <input type="text" name="nev"><br>
e-mail cm: <input type="text" name="email"><br>
<input type="submit" name="gomb" value="Elkld">
</form>
A form-nak krlbell ezek azok a paramterei amiket mindenkppen rdemes megadni. A name
rtelemszeren az rlap nevt jelenti, amivel hivatkozhatunk r. Az action jelenti annak a CGI
programnak a nevt, ami a feldolgozst vgzi majd. A method paramterben adhatjuk meg, hogy
milyen mdon kldjk az adatokat. A post rtk azt jelenti, hogy az adatokat egy "csomagknt"
kapja meg a szerver oldali program.
Amit rdemes megfigyelni az a submit gomb paramterezse. A name magtl rtetden az
elem nevt jelenti, a value pedig azt a szveget tartalmazza, ami a gomb felirataknt megjelenik.
Ha teht a gombra kattintunk, a mezk tartalma a feldogoz.cgi programnak addik t.
A klds eltt, mint mr emltettem, ellenrizni kell az adatokat, s itt hasznlhatjuk fel a
JavaScript-et.

"res szveg"
A feladatunk az lenne, hogy ellenrizzk le klds eltt, hogy valamelyik mez tartalmaz-e res
adatokat. Ha hinyos informcit adna meg valaki, akkor figyelmeztessk, s lltsuk le az
adatok kldst. Ehhez az elz form-ot kicsit t kell alaktanunk, s rni kell hozz egy ellenrz
fggvnyt:
<html>
<head>
<script>
function ellenoriz()
{
if (document.form.nev.value=="")
{
alert("Nem adtl meg nevet!");
return false;
}
if (document.form.email.value=="")
{
alert("Nem adtl meg e-mail cmet!");
return false;
}

return true;
}
</script>
</head>
<body>
<form name="form" action="feldolgoz.cgi" method="post">
nv: <input type="text" name="nev"><br>
e-mail cm: <input type="text" name="email"><br>
<input type="submit" name="gomb" value="Elkld" onClick="return
ellenoriz()">
</form>
</body>
</html>
Lssuk hogyan is mkdik a dolog. Elszr is meg kell mondanunk a bngsznek, hogy az
Elkld gombra trtn kattintskor hvja meg az ellenoriz() fggvnyt, s figyelje is hogy milyen
rtkkel tr vissza. A return kulcsszval mondhatjuk meg, hogy a visszatrsi rtket figyelembe
vve kldjk el a form-ot, vagy lltsuk le a folyamatot. Ha teht a meghvott fggvny true, azaz
igaz rtkkel tr vissza, a folyamat tovbb fut, ha azonban false, azaz hamis rtkkel tr vissza a
klds megszakad. Nincs ms dolgunk teht, csak megrni gy a fggvnyt, hogy ezeket az
rtkeket adja vissza. Egy egyszer if szerkezettel, pontosabban kettvel, vizsgljuk a mezk
tartalmt. A vizsglat trtnhet a benne lv tartalom, vagy a tartalom hossza szerint, n az
elbbit vlasztottam. Teht ha a mez res, akkor egy zenetet kldnk a felhasznl fel, majd
hamis rtkkel trnk vissza. Ha mindkt vizsglaton tljutottunk, az azt jelenti, hogy nem volt
hiba, s visszaadhatjuk az igaz rtket.
Itt szeretnm megemlteni, hogy az ellenrzst ms helyen is lehet vgezni, a msik eljrs
egybknt a form onSubmit esemnyt hasznlni.
Az elbbi pr oldaban prbltam meg bemutatni a JavaScript alapvet tulajdonsgait. A
JavaScriptben lv objektumok metdusainak pontos lersa a JavaScript referencikban telejs
mrtkben megtallhat.

Az XML

Bevezets
Az XML a World Wide Web Konzorcium (W3C) ajnlsa, amely kompatbilis egy sokkal
rgebbi, SGML (Standard Generalized Markup Language = szabvnyos ltalnostott
jellnyelv) nev ISO 8879/1986 szabvnnyal. Az SGML megfelelsg azt jelenti, hogy minden
XML dokumentum egyben SGML dokumentum is, de fordtva mr nem igaz, azaz van olyan
SGML lers, ami nem XML megfelel.
Az XML (Extensible Markup Language = bvthet jellnyelv) adatler nyelv ltrehozst a
nylt rendszerek trhdtsa s az Internet tette szksgess. A Java nyelv s az XML kztt van
egy rdekes hasonlsg: a Java a futtathat formban hordozhat programok nyelve, mg az
XML a hordozhat adat ksztsnek az eszkze.
Az XML dokumentumok (hasonlan a Java forrskdhoz) unicode alap szveges
karaktersorozatok, ahol az alaprtelmezs az UTF-8 (tmrtett unicode), de a dokumentum
elejn ettl eltr kdolsi eljrst is vlaszthatunk.
Az XML formtum dokumentumok fokozatosan kezdik levltani a jelenleg szles krben
elterjedt ASCII alap szvegfjl alkalmazsokat (plda: interface-ek, konfigurcis fjl-ok).
Ennek a tendencinak az az oka, hogy az ASCII fjl-ok semmilyen ler, kezel informcit
(meta adatot) nem tartalmaznak sajt magukrl (mg az az alapvet tulajdonsguk sem rzdik
meg, hogy melyik kdlapot hasznlta a fjl ksztje). Ezzel szemben az XML alap
dokumentumok a benne trolt adatok vagy hivatkozsok (szveg, kp, ) rtkein fell
rendelkeznek plusz informcikkal is, ugyanakkor lersuk hasonlan a HTML nyelvhez
tovbbra is rendelkezik azzal a kellemes tulajdonsggal, hogy szvegalap. Az XML
dokumentumokban az adatok rtkein tl olyan tovbbi cmkket s hivatkozsokat helyezhetnk
el, amik utalnak az adat termszetre, a dokumentum szerkezeti s tartalmi felptsre, tovbb
ezek az informcik felhasznlhatak a dokumentum rvnyessgnek vizsglathoz is.
Egy XML dokumentum nem tartalmaz utalst arra nzve, hogy egy alkalmazs (pldul Internet
Explorer 5, tovbbiakban: IE5), hogyan jelentse meg, de vannak kiegszt W3C ajnlsok,
amik ezt a hinyossgot megoldjk.
Az XML gy lett tervezve, hogy egy XML adatfolyamot ler, illetve rvnyessgt meghatroz
formlis nyelvtant knny legyen definilni, gy az XML adatfolyam szintaxisvezrelt elemzse
egyszer. Ez utbbi tulajdonsg az, ami miatt az XML ma szinte ez egyetlen szles krben
elterjedt, ltalnos eszkz arra, hogy adatainkat hordozhat formban troljuk s tovbbtsuk. Az
XML ebben a megkzeltsben a klnfle jellnyelvek ksztst ler nyelv (meta nyelv).
Amikor az XML segtsgvel megalkotunk egy j, konkrt jell nyelvet, akkor ennek az
eredmnyt XML alkalmazsnak nevezzk.

Az els XML dokumentumunk ltrehozsa


Annak rdekben, hogy az eddig lertak ne legyenek tlsgosan elvontak, nzznk egy konkrt
pldt! Legyen egy WEBADATOK adatbzisunk, amiben a VKONYV vendgknyv tbla
felptse a kvetkez:
NEV VARCHAR(50)
EMAIL VARCHAR(50)
DATUM DATE
SZOVEG VARCHAR(500)
Vizsgldsunk pillanatban a VKONYV tbla a kvetkez 2 bejegyzst tartalmazta:
X Y xy@freemail.hu 2002 01.31 dvzletem a WEB mesternek!
Z V valaki@mailbox.hu 2002.04.30 Tetszett a site :)
Az XML jellegzetessge, hogy az adatokat hierarchikus szerkezetben kpes brzolni
(reprezentlni), gy egy XML adatfolyam egyben mindig egy ft is definil. A VKONYV tbla
tartalmt a kvetkez XML formban llthatjuk el:
<?xml version="1.0" encoding="WINDOWS-1250" ?>
<VKONYV>
<VENDEG sorszam=1>
<NEV>X Y</NEV>
<EMAIL>xy@freemail.hu</EMAIL>
<DATUM>2002.01.31</DATUM>
<SZOVEG>dvzletem a WEB mesternek!</SZOVEG>
</VENDEG>
<VENDEG sorszam=2>
<NEV>Z V</NEV>
<EMAIL>valaki@mailbox.hu</EMAIL>
<DATUM>2002.04.30</DATUM>
<SZOVEG>Tetszett a site :) </SZOVEG>
</VENDEG>
</VKONYV>
A fenti XML adatfolyamot vizsglva lthatjuk, hogy eddig 2 vendg rt a vendgknyvbe. Itt az
ideje, hogy elgondolkodjunk azon, hogy mirt ppen ebben a formban hoztuk ltre a VKONYV
tbla tartalmnak XML-beli exportjt, hiszen ezt megtehettk volna pldul gy is:
<?xml version="1.0" encoding="WINDOWS-1250" ?>
<VKONYV>
<VENDEG sorszam=1 NEV=X Y DATUM=2002.01.31>
<EMAIL>xy@freemail.hu</EMAIL>
<SZOVEG>dvzletem a WEB mesternek!</SZOVEG>
</VENDEG>
<VENDEG sorszam=2 NEV=Z V DATUM=2002.04.30>
<EMAIL>valaki@mailbox.hu</EMAIL>
<SZOVEG>Tetszett a site :) </SZOVEG>
</VENDEG>
</VKONYV>
Ez a tbbfle lehetsg annak a kvetkezmnye, hogy az XML ajnls az adatok rtelmezst
(szemantikjt) s a hasznlhat tag-ek (megjell cmkk: VKONYV, NEV, ) krt nem
hatrozza meg, gy annak kialaktsa tervezsi megfontolsokon alapul. A msodik megolds
jobban pt a tag-ek tulajdonsg (attribtum) megadsi lehetsgeire, aminek kvetkeztben a
ler tag-ek szma cskkent. A fentiek alapjn belthat, hogy a VKONYV tbla tartalmt
sokfle XML adatfolyamknt el lehet lltani. A tervezs sorn ki kell vlasztani azt az XML
formtumot, amit az adott feladat szempontjbl jnak tartunk, majd el kell kszteni hozz
azokat a nyelvtani szablyokat, amik egyrtelmen rgztik azt, hogy pldul a tovbbiakban mi
a VKONYV els vltozat XML adatfolyamt szeretnnk hasznlni. A nyelvtani szablyok
megfogalmazsra a DTD (Document Type Definition = a dokument tpus definci) nyelv
szolgl, amit a ksbbiekben kerl ismertetsre. Pldbl meggyzdhettnk arrl is, hogy az
XML lers valban nem tartalmaz olyan nyelvi elemet, ami a dokumentum kinzett hatrozn
meg, hiszen az csak a dokumentum szerkezett, rtelmezst s konkrt adatait tartalmazta. Az
els XML dokumentumot egy vkonyv.xml fjl-ban trolva az Internet Explorer 5.0
alaprtelmezett esetknt egy fa formban jelenti meg, ahol a +/- jelekkel lehet a fa gait kinyitni
vagy becsukni. A fjl els sorban a version=1.0 megadsa ktelez, a kdols megadsa
vlaszthat, de ha nem adjuk meg, akkor az alaprtelmezett rtk UTF-8 lesz.

XML alkalmazsok
Az elzekben mr emltsre kerlt, hogy az XML segtsgvel megalkotott jellnyelveket
XML alkalmazsoknak nevezzk. Alaposan krbenzve az egyes applikcik (Linux,
Windows programok) kztt lthat, hogy az XML szinte mr alapvet konfigurcis s
adattrol eszkzz vlt. A Linux GNOME gnumeric, AbiWord a dokumentum trolsi
formjul az XML-t vlasztotta. Linux alatt az egyik legjobb grafikus elemkszlet a QT, amihez
ltezik egy QT Designer (a QT elemkszlet s a designer a Trolltech alkotsa). A QT Designer-
ben a Delphi vagy Visual Basic-hoz hasonlan - vizulisan lehet felhasznli interface-eket
kszteni, majd azokat szabvnyos *.ui fjl-okba menteni . Amikor a QT Designer hasznlatval
egy Teszt Form cmsor s frmTeszt nev formba egy OK felirat, btnOK nev gombot
terveznk, akkor a kvetkez XML fjl jn ltre:
<!DOCTYPE UI><UI>
<class>frmTeszt</class>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
<cstring>frmTeszt</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
<width>342</width>
<height>155</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<string>Teszt Form</string>
</property>
<widget>
<class>QPushButton</class>
<property stdset="1">
<name>name</name>
<cstring>btnOK</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>20</x>
<y>20</y>
<width>104</width>
<height>28</height>
</rect>
</property>
<property stdset="1">
<name>text</name>
<string>OK</string>
</property>
</widget>
</widget>
</UI>
A fenti kt pldn kvl most csak megemltek nhny tovbbi, elterjedt XML alkalmazst:
. projekt a Microsofttol, teljesen XML alap fejleszti eszkz, s ebbl kiindulva az j
Windowsokbl pldul az eddigi registry kezels helyre is egy XML alap mechanizmus lp.
XHTML nyelv: A HTML nyelvet rja le, illetve kiss mdostja annak rdekben,
hogy a HTML XML megfelel legyen.
XSQL nyelv: Adatbzis kezel mveletek XML megfelel lersra szolgl jell
nyelv
MathML (Mathematics Markup Language)
A szabvnyostott XML alkalmazsok kre egyre szlesebb, amit folyamatosan figyelemmel
kvethetnk a W3C honlapon. Az egyik legfontosabb XML alkalmazs az XSL (Extended Style
Language = bvtett stluslap ler nyelv), amivel a CSS alternatvjaknt az XML
dokumentumok kpi megjelentsnek kinzett lehet meghatrozni. Az XML ltalnos
informci ler kpessge miatt egyre gyakrabban tallkozunk XML alap konfigurcis fjl-
okkal is. Pldaknt mindenkinek ajnlom a Jakarta-Tomcat web.xml nev fjl-jt
tanulmnyozsra, ami a WEB hely aktulis kialaktsnak konfigurcijt tartalmazza.

Az XML adatfolyam felptse (XML fjl-ok)


Az XML adatfolyamot formai s nyelvtani szempontbl is vizsglhatjuk. Ebben a pontban a
formai elemzs szempontjait tekintjk t. Egy XML dokumentumot jl formzottnak (well
formed) neveznk, ha a kvetkezkben rszletezett XML formai feltteleinek eleget tesz.

Elemek (Elements)
Az elemek a legalapvetbb rszei az XML dokumentumoknak. A <NEV>X Y</NEV> rszlet
egy konkrt elem. Egy XML elem ltalban a kvetkez rszekettartalmazza:
Az elemet bevezet <ElemCimke> tag, amit cscsos zrjelek kztt kell megadni.
Az elemhez tartoz adat (Pl. X Y). Nem minden elem tartalmaz adatot.
Az elemet zr </ElemCimke> tag.
A nyit s zr tag-ek feladata az, hogy megjelljk s elnevezzk az ltaluk kzrefogott adatot.
Ezzel az adataink termszete s tartalma is nyomonkvethetv vlik, emiatt fontos, hogy a
cmke nevek kifejezk legyenek. Lnyeges kiemelni, hogy a hagyomnyos XML meghatrozs
nem ad olyan precz adatbrzol s kezel eszkzt a keznkbe, mint a programozsban
megismert tpus fogalma, azonban mr ltezik olyan W3C ajnls (XML Schema definci), ami
ennek a szigor kvetelmnynek is eleget tesz. Idnknt elfordul, hogy egy tag nem fog kzre
semmilyen adatot. Erre plda az, ha valakinek nincs e-mail cme: <EMAIL></EMAIL>. Ezt a
terjengs lerst az XML-ben a kvetkez mdon rvidthetjk: <EMAIL/>. A tag nevekre a
kvetkez szablyokat kell betartani:
Csak betvel vagy alhzs jellel kezddhet
Tartalmazhat bett, szmjegyet, pontot, ktjelet, alhzs jelet
A kis s nagybetk klnbznek szmtanak

Megjegyzs
Az XML dokumentumban a HTML nyelvben megszokott megjegyzst hasznlhatjuk.
<!
Ez egy XML megjegyzs, ami lexikailag olyan mint a HTML comment
-->
Ezeket a rszeket az XML feldolgoz (elemz, rvnyessg vizsgl, megjelent) alkalmazsok
figyelmen kvl hagyjk.

Tulajdonsgok (attributes)
Az XML elemek tetszleges szm tulajdonsggal is rendelkezhetnek. A VKONYV XML
msodik vltozatbl tekintsk a kvetkez rszletet:
<VENDEG sorszam=2 NEV=X V DATUM=2002.04.30>
Itt hrom tulajdonsgot hatroztunk, adtunk meg a VENDEG elem rszre: sorszam, NEV,
DATUM. A tulajdonsgok ltalban gy nznek ki:
<element nev1=rtk1 nev2=rtk2 >

</element>
Egyed hivatkozsok (entity references)
Az egyedek olyanok, mint a marhelyettestsek. Minden egyednek egy egyedi nvvel kell
rendelkeznie. Legyen az EgyedNev egy egyednv, ekkor ennek a meghvsa a kvetkez:
&EgyedNev;, azaz & jellel kezddik s ;-vel fejezdik be. Ha megnzzk az AbiWord
ltal ksztett XML dokumentum &#xf3; rszlett, akkor ott ez egy egyedhivatkozs az
betre.
Lteznek elre definilt egyedek, mint pldul a gt nev. Az &gt; hatsa olyan, mintha az
XML adatfolyamba egybl a > jelet rtuk volna. Az egyedek fogalma lehetv teszi azt is, hogy
brmilyen unicode karaktert helyezznk el a szvegbe. Ekkor az egyednv #szm vagy
#xszm alak, ahol az els a decimlis, a msodik a hexadecimlis megadsi md. A kis o
hexa unicode kdja 0x0151. Ezt mint egyedet a kvetkez mdon hvhatjuk meg: &#x0151;.
Az XML ajnls lehetv teszi, hogy sajt egyedeket is ltrehozzunk. Ez az <!ENTITY
myEgyed rtk> szintaxis-sal lehetsges, amit &myEgyed;-vel hvhatunk meg s az a
hatsa, mintha kzvetlenl az rtk karakterfzrt rtuk volna le. Az egyedek definilsa a
jell nyelv nyelvtani szablyait meghatroz DTD lers rsze, ezrt erre ott mg visszatrnk.

Feldolgozsi utastsok (processing intructions)


A feldolgozsi utastsok nem rszei az XML-nek. Szerepk a fordtprogramoknak kldtt
direktvkhoz hasonlthat. Ezek, a megjegyzsekhez hasonlan, nem rszei a dokumentum
szveges tartalmnak, de kvetelmny az XML feldolgozkkal szemben, hogy tovbbadjk
ezeket az utastsokat az alkalmazsok szmra. Megadsi mdjuk: <?target name?>. Egy
alkalmazs csak azokat az utastsokat veszi figyelembe, amelynek a cljt felismeri, az sszes
tbbit figyelmen kvl hagyja. A clt (target) kvet adatok az alkalmazsnak szlnak,
megadsuk opcionlis.

A CDATA szakaszok
Az ebben a szakaszban lv CDATA, azaz karakteres adat interpretls nlkl taddik az XML
adatfolyamot fogad alkalmazsnak. A szakasz szintaxisa a kvetkez:
<![CDATA[Itt van a tetszoleges string]]>. A megadott karakterfzr a ]]
kivtelvel brmi lehet.

Nvterek
Mi van akkor, ha tbb orszg iskolibl kapunk tanulmnyi eredmnyeket (termszetesen XML
formtumban), s ezeket szeretnnk egy nagy XML dokumentumba foglalni? Azonban az egyik
orszgban az 1-esnek rlnek a gyerekek, mg nlunk az 5-snek. Ha egyszeren sszefznnk
az adatokat, akkor lehetetlen lenne sszehasonltani a klnbz eredmnyeket. Valahogyan
definilni kellene az sszestett XML dokumentumban a szmok ktfle rtelmezst. Ezutn
minden ttelnl megjelljk, hogy melyik ttel melyik rtelmezshez kapcsoldik, gy ksbb
egyrtelmen kibnyszhatk az rdemjegyek. Az ilyen jelleg problmk feloldsra vezettk
be a nvtr (namespace) fogalmt az XML szabvnyban. A dokumentum elejn meghatrozzuk a
lerni kvnt tpusokat, s a tagoknl megjelljk, hogy azok melyikhez tartoznak. Nvtr
hasznlata nlkl gy nzne ki az sszevont rdemjegy tblzat:
<Osztlyzatok>
<oszt>4</oszt>
<oszt>2</oszt>
</Osztlyzatok>
Melyiknek rlne egy gyerek? Az attl fgg, hogy honnan kerltek bele az adatok. Tegyk
egyrtelmv az adatok rtelmezst:
<Osztlyzatok
xmlns:AztsaJ="http://iskola.hu/Ot"
xmlns:AzEgyesaJ="http://iskola.hu/Egy" >
<AztsaJ:oszt>4</AztsaJ:oszt>
<AztsaJ:oszt>5</AztsaJ:oszt>
<AzEgyesaJ:oszt>2</AzEgyesaJ:oszt>
</Osztlyzatok>
Mit lthattunk itt? Ksztettnk kt nvteret. Az egyiknek AztsaJ, a msiknak
AzEgyesaJ a neve. A nevek tetszlegesen vlaszthatk, lehetne Jancsi s Juliska is, de nem
rt, ha a vlasztott nvtr neve utal a funkcijra. Az xmlns:nvtrnv="valami egyedi"
segtsgvel definilhatunk nvteret egy taghoz. A valami egyedi-nek az egsz vilgon
egyedinek kell lenni, gy elvileg a vilg sszes XML dokumentumt konfliktus nlkl ssze
lehetne fzni, mert a valami egyedi egyrtelmen azonostja a forrst, gy nem lehetnek
nvtkzsek. A nvtrnv egy lnv (alias) a hossz, egyedi nvtr nvre. gy a tagokban
knnyebb rjuk hivatkozni. A nvtr rkldik, gy a gyermek tagok (mint az oszt) is
hasznlhatjk a szlben (Osztlyzatok), nagyszlben, ddszlben, satbbi definilt nvteret.
A nvterek egyedi elnevezsre kt mdszer addik kzenfekven: hasznljunk valamilyen URL-
t, vagy alkalmazzuk a Windows-os GUID-ot (Globally Unique Identifier). Mivel a W3C
konzorcium, az XML gazdja nem csak a Microsoft ltal befolysolt szervezet, ezrt a legtbb
nvtr deklarciban URL-t ltunk, s nem GUID-ot, mint egyedi nvtr azonostt. Amikor egy
program feldolgozza az gy sszestett adatokat, akkor minden egyes tag feldolgozsa sorn
megnzi, hogy az adott tag melyik nvtrhez tartozik. A nvtereket tudnia kell elre ahhoz, hogy
tudja a dokumentumban tallhat szmok, mint osztlyzatok rtelmt. Ha az adatok zme egyfle
rtelmezs, gy csak egy kis szzalka kellene, hogy valami ms nvtrbe tartozzon, akkor
rdemes kihasznlni az alaprtelmezett nvtr (default namespace) lehetsgt, hogy rvidebb
dokumentumot kapjunk. Ha az elbbi pldnk bejv adathalmazban a hazai (az ts a legjobb
jegy) rtelmezs a leggyakoribb, akkor tegyk azt az alaprtelmezett nvtrr, gy csak azokat az
adatokat kell megjellni, amelyeket nem gy kell rtelmezni. Az alaprtelmezett nvteret gy
deklarljuk, hogy nem adunk lnevet a kvnt nvtrazonostnak:
<Osztlyzatok
xmlns="http://iskola.hu/Ot"
xmlns:AzEgyesaJ="http://iskola.hu/egy" >
<oszt>4</oszt>
<oszt>5</oszt>
<AzEgyesaJ:oszt>2</AzEgyesaJ:oszt>
</Osztlyzatok>
Kivtelek persze mindig vannak. A nvtrrkldsi lncot megszakthatjuk brmely ponton gy,
hogy egy res nvtrdefincit alkalmazunk a gyermekelemre, s attl a szinttl lefel mr nem
lesz rvnyes az alaprtelmezett nvtr:
<Osztlyzatok
xmlns=http://iskola.hu/Ot >
<oszt xmlns="">
<o1/>
<o2/>
</oszt>
<oszt>5</oszt>
</Osztlyzatok>
A pldban a "http://iskola.hu/Ot" alaprtelmezett nvteret kapcsoljuk ki az els <oszt> elemre,
s az 2 gyermekre (<o1/> s <o2/>). Fontos, hogy az alaprtelmezett nvtr nem vonatkozik
az attribtumokra, csak a tagokra, azaz az <oszt megj="Okos gyerek"> esetn a megj attribtum
az nem tartozik az alaprtelmezett nvtrhez (semmilyen nvtrhez sem tartozik). Ha azt
szeretnnk, hogy ahhoz tartozzon, akkor minden egyes attribtum el is ki kell rni a nvtr
eltagot: <oszt AzEgyesaJ:megj="Okos gyerek">. Ezzel mg sokszor fogunk tallkozni az
adatbzis-XML kapcsolatok lersnl.

Az XML adatfolyam rvnyessgnek ellenrzse


Az elz rszben azt vizsgltuk, hogy egy XML dokumentum mikor jl formzott. A helyes
formzottsg tnyt nagyon knnyen ellenrizhetjk a klnfle XML feldolgoz programokkal,
pldul az IE5 bngszvel. A vkonyv.xml jl formzott, mert az IE5 elemezni tudta, amit a fa
szerkezet megjelentsvel is visszaigazolt. A jl formzottsg azonban mg nem jelenti azt,
hogy az XML dokumentum helyes, hiszen ha mi a VKONYV adathalmazt az els formtum
XML felptsben szeretnnk ltni, akkor pldul a msodik formtum nem rvnyes, ezrt azt az
elemz programok vissza fogjk utastani. A mai XML elemzk ltalban a jl formzottsg
mellett lehetv teszik az rvnyessg vizsglatt is. Az XML egyik legnagyobb erssge, hogy
sajt tag neveket hasznlhatunk, azonban a VKONYV pldja arra is rmutat, hogy szksg van
egy nyelvtani szablyokat meghatroz specifikcira is, amit az XML elemz program az
rvnyessg ellenrzshez tud felhasznlni. Az XML elemek egy fa szerkezetet ptenek fel,
aminek termszetesen mindig van egy gykr eleme. A VKONYV XML karaktersorozatban a
VKONYV elem a gykr. Ez az a pont, ahonnan az XML dokumentum nyelvtani elemzse indul
(a formlis nyelvtanok START szimblumnak felel meg). A DTD nyelven megfogalmazott
nyelvtani szablyok egy karaktersorozatot alkotnak, trolsukra kt lehetsg van:
Egy fjl-ban troljuk (Pl.: vkonyv.dtd)
Az XML dokumentum elejn troljuk
Tegyk fel, hogy valaki elksztette neknk (hiszen mi mg nem ismerjk az elkszts mdjt) a
VKONYV XML adatfolyam els vltozatnak, mint XML dokumentumtpusnak a DTD-ben
megfogalmazott nyelvtant s ezt a vkonyv.dtd fjl-ban tadta neknk. Ekkor az XML
dokumentumunk els sora utn a kvetkez sort lehet beszrni:
<?xml version="1.0" encoding="WINDOWS-1250" ?>
<!DOCTYPE VKONYV SYSTEM vkonyv.dtd>
<VKONYV>
<VENDEG sorszam=1>
...
</VKONYV>
A beszrt sor a <DOCTYPE rsszel kezddik, majd a kvetkez sz az XML dokumentum
gykreleme. A harmadik sz SYSTEM vagy PUBLIC lehet. A sor utols rsze megadja azt,
hogy melyik fjl-ban troldnak a nyelvtani szablyok. Amennyiben nem akarjuk a nyelvtant
kln fjl-ban trolni (pl.-ul azrt mert nagyon egyszer), akkor az eredeti XML adatfolyam
elejt gy kell kiegszteni:
<?xml version="1.0" encoding="WINDOWS-1250" ?>
<!DOCTYPE VKONYV [
Ide jn az a karaktersorozat, amit egybknt
a vkonyv.dtd-ben trolnnk
]>
<VKONYV>
<VENDEG sorszam=1>
...
</VKONYV>
A begyazott DTD szablyokat teht a fent lthat mdon [ ... ] zrjelek kztt adhatjuk meg.
Ennyi elzetes utn rviden tekintsk t azt, hogyan lehet a DTD szablyrendszereket
megfogalmazni.

Elem tpus deklarci (Element Type Declaration)


Az elem tpus deklarcik azonostjk az elemek neveit s tartalmukat. A DTD-ben ez az
azonosts nem ri el a programozsi nyelvek tpusfogalmnak megfelel rszletezettsg szintet.
A szemlletessg kedvrt nzzk meg a VKONYV XML adatfolyam els verzija
<VKONYV> elemnek tpus deklarcijt:
<!ELEMENT VKONYV (VENDEG)* >
A fenti sor szavakkal elmondva azt jelenti, hogy a VKONYV elem VENDEG tpus elemek
sorozata, ahol a * azt jelli, hogy 0 vagy tbb tagja lehet ennek a sorozatnak (a mi vkonyv.xml
fjl-unkban most 2 hossz ez a sorozat). A szmossg kifejezsre a *-on kvl mg a + (1
vagy tbb elem) s a ? (0 vagy 1 elem) jelek szerepelhetnek. Amikor egy nv mellett nincsenek
rsjelek, akkor pontosan egyszer kell elfordulnia. Most nzzk meg, hogy a <VENDEG>
elemre milyen nyelvtani szablyok llapthatak meg!
<!ELEMENT VENDEG (NEV, EMAIL?, DATUM, SZOVEG)>
Szavakban ez azt jelenti, hogy egy VENDEG elem a NEV, EMAIL, DATUM, SZOVEG elemek
ebben a sorrendben (s nem ms sorrendben!) vett szerkezetbl ll. Itt most egy fontos dolgot
lehet szrevenni, mert ez a nyelvtani szably mr kizrja azt, hogy a msodik tpus VKONYV
XML folyam rvnyes legyen, hiszen ott a VENDEG elem csak az EMAIL s a SZOVEG
elemeket tartalmazhatja. Az elem neveken fell van egy fenntartott specilis szimblum a
#PCDATA, ami a karakteres adatot jelli. Ez teszi lehetv, hogy pldul a NEV elem nyelvtani
szablyt megadjuk:
<!ELEMENT NEV (#PCDATA)>, azaz a NEV elem egy elemzett karakterfzr.
Mr lttuk, hogy lteznek res elemek is, azaz olyan tag-ek, amikhez nincs adat (tartalom)
rendelve. Amennyiben a <KEDVES_VENDEG/> egy res tag, akkor ehhez gy adhat meg a
nyelvtani szably:
<!ELEMENT KEDVES_VENDEG EPMTY>
Itt az EMPTY a kulcssz, ami azt jelzi az elemz programnak, hogy a KEDVES_VENDEG egy
res elem, gy nincs ennek az elemnek tovbbi szerkezeti felptse. Ebben a pldban ez
valsznleg egy jelzknt szerepel. Nzznk egy msik res elemet is:
<NEM_KEDVES_VENDEG/>. Ekkor elkpzelhet, hogy vendgknyvnkben fel akarjuk
tntetni ezt a logikai tulajdonsgot a kvetkez XML szerkezet segtsgvel:
<MINOSITES> <MINOSITES>
<KEDVES_VENDEG/> vagy <NEM_KEDVES_VENDEG/>
</MINOSITES> </MINOSITES>
Itt a <MINOSITES> elem nyelvtani szablya vlaszthat elemekbl ll, amit a tartalom
meghatrozskor a pipe karakterrel fejeznk ki:
<!ELEMENT MINOSITES (KEDVES_VENDEG | NEM_KEDVES_VENDEG)>

A tulajdonsglista (attributum lista) deklarcija


Az eddigiekbl mr tudjuk, hogy a tulajdonsglista az elem jellemzsre szolgl. Termszetesen
ennek felptse is a nyelvtan rsze. Itt adhatjuk meg, hogy az egyes elemek milyen jellemzket
tartalmazhatnak s azok milyen rtkeket vehetnek fel. Nem mindegyik elemnek van
tulajdonsglistja. A VKONYV XML folyam <VENDEG> elemnek pldul egy tulajdonsga
van, a sorszm. Az tulajdonsglistk ltalnos formja a kvetkez:
<!ATTLIST egy_elem_neve
tulajdonsg_nv1 tulajdonsg_jellege1 jelz
...
tulajdonsg_nv_n tulajdonsg_jellege_n jelz
>
A <VENDEG> elem pldjnl maradva, gy adhatjuk meg a sorszam tulajdonsg nyelvtant:
<!ATTLIST VENDEG sorszam CDATA #REQUIRED>
A fenti sor azt mondja meg az elemz program rszre, hogy a VENDEG elemnek van egy
sorszm nev tulajdonsga, ami CDATA jelleg s ktelezen szerepelnie kell az elem minden
elfordulsnl. Az egyes tulajdonsgok jellege (tpusa) a kvetkez hatfle lehet:
CDATA: Csak annyit akarunk ekkor lltani, hogy a tulajdonsg egy tetszleges
karaktersorozat.
ID: Az ID attribtum rtknek egy nvnek kell lennie.
IDREF vagy IDREFS
ENTITY vagy ENTITIES
NMTOKEN vagy NMTOKENS
Nvlista: Ez egy egyszer felsorols tpus. Pl.: (alma, krte, szilva)
A jelzbl a kvetkez ngy fajta ltezik:
#REQUIRED: Az elem minden dokumentumbeli elfordulsnl explicit mdon meg kell
adni az attribtum rtkt.
#IMPLIED: Az attribtum megadsa nem ktelez s nincs alaprtelmezett rtke. Ha nincs
rtk megadva, akkor az XML feldolgoznak nlkle kell tovbb haladnia.
Egy rtk: Ekkor ez egy alaprtelmezett rtke lesz az attribtumnak. Plda: 3.14
#FIXED rtk: Ekkor nem ktelez az attribtum, de ha megadjuk, akkor ennek az rtknek
kell lennie.

Egyed deklarci (Entity declaration)


Az XML adatfolyam jl formlt felptse szakaszban mr sz volt az egyedekrl, most lerjuk
azt is, hogyan s hol hozhatjuk ltre ket. A DTD lersban a kvetkez hromfajta egyed
ehetsges:
Bels egyedek
Kls egyedek
Paramter egyedek
A bels egyedek egy marhelyettest mechanizmust valstanak meg. Az
<!ENTITY BMGE Budapesti Mszaki s Gazdasgtudomnyi Egyetem>
sor ltrehoz egy BMGE nev egyedet, amit az XML szvegben &BMGE; alakban hvhatunk
meg, melynek hatsra megtrtnik a szveghelyettests. A Kls egyedek lehetv teszik, hogy
msik fjl tartalmra hivatkozzunk az XML dokumentumbl. gy tartalmazhatnak szveges s
binris adatot is. Ha a kls fjl szveges adatot tartalmaz, akkor az, az eredeti dokumentumba
illesztdik a referencia helyre s gy kerl feldolgozsra, mintha a hivatkoz dokumentum rsze
lenne. A binris adat rtelemszeren nem kerl elemzsre. Paramter egyedek csak a
dokumentum tpus deklarciban fordulhatnak el. A paramter egyedek deklarcija onnan
ismerhet meg, hogy nevk eltt szzalkjel % jel tallhat. A paramter egyed hivatkozsok a
dokumentum tpus deklarciban azonnal feloldsra kerlnek, gy a helyettestett szveg is rsze
a deklarcinak. Nzznk egy pldt, ahol kt elem szerkezett adjuk meg ezzel a mdszerrel:
<!ELEMENT KONYV (ELOLAP, LAPOK+, ZAROLAP)>
<!ELEMENT FUZET (ELOLAP, LAPOK+, ZAROLAP)>
Kihasznlva a hasonlsgot hozzunk ltre egy paramter egyedet:
<!ENTITY %TARTALOM ELOLAP, LAPOK+, ZAROLAP>
Az gy kapott egyeddel a KONYV s FUZET elemek nyelvtani szablyai megfogalmazhatak:
<!ELEMENT KONYV (%TARTALOM;)>
<!ELEMENT FUZET (%TARTALOM;)>

A VKONYV XML adatfolyam nyelvtani szablyai


A DTD-vel val ismerkedsnk befejezseknt alkossuk meg a VKONYV XML adatfolyam
nyelvtani szablyait, amit egy vkonyv.dtd fjl-ban trolhatunk, ezzel a tartalommal:
<!ELEMENT VKONYV (VENDEG)* >
<!ELEMENT VENDEG (NEV, EMAIL?, DATUM, SZOVEG)>
<!ATTLIST VENDEG sorszam CDATA #REQUIRED>
<!ELEMENT NEV (#PCDATA)>
<!ELEMENT EMAIL (#PCDATA)>
<!ELEMENT DATUM (#PCDATA)>
<!ELEMENT SZOVEG (#PCDATA)>
XDR, XSD
XDR, XML Data-Reduced:
Az XDR a nagyremny Microsoft DTD utd - volt. A Microsoft gyorsan lemondott a DTD
hasznlatrl, s gyors temben belekezdett egy XML formtum smaler nyelv
kidolgozsba, amelyet a Word Wide Web konzorciumnak is elkldtt szabvnyostsra.
Megszletett az XDR. Amellett, hogy XML formtum mg jval flexibilisebb is, mint a DTD.
A DTD-ben lert struktrnak maradktalanul meg kell felelni egy XML dokumentumnak. Az
XDR is tud ilyen szigor lenni, de emellett el lehet azt is rni, hogy az ellenrizend
dokumentum egyes rszeiben lehetnek tovbbi elemek is, amelyet a sma nem r le. Pldul egy
szemlyrl szl XML adatlapban ktelezv tesszk a nv, szletsi dtum s az anyja neve
elemeket, de ezen fell megengedjk, hogy egy buzg gazdi pldul a kutyja nevt s haja
sznt is beleszerkessze a dokumentumba. A hangsly nem azon van, hogy elrhatunk opcionlis
elemeket, hanem azon hogy megengedhetnk olyan elemeket is, amelyekrl a sma ksztsekor
mg nem is tudtuk, hogy lesznek. Ehhez kapcsold szolgltats, hogy XDR segtsgvel le lehet
szablyozni a dokumentum egy rszt is, nemcsak a teljes egszet. DTD-vel termszetesen csak
az egsz dokumentumra lehet szablyokat definilni. Emellett az XDR bvthet, azaz az ignyek
megvltozsakor nem kell a smt kidobni, csak azokat az XML dokumentumokat fogadjuk el
rvnyesnek, amelyek szerkezete megfelel a formlis lersban szerepl feltteleknek. Pldul
egy megrendelst ler XML dokumentumra valsznleg kiktnnk, hogy benne kell legyen a
megrendel neve, cme, adszma satbbi. Ha a kapott megrendels. xml-ben nem szerepel
minden kvnatos adat, akkor visszadobjuk a megrendelst, mert nem rvnyes. Az XML
dokumentum szerkezetnek, ms nven smjnak lersra tbb mdszer is a rendelkezsnkre
ll, melyek fokozatosan, a hasznlat sorn fejldtek ki. Nzzk meg milyen egy msik nvtr
bevezetsvel kiegszteni a meglevt. Utols, de nagyon fontos szolgltats az XDR-ben, hogy
az elemek s attribtumoknak meg lehet adni a tpust (egsz szm, dtum satbbi). A DTD-ben
minden szvegknt van deklarlva. A legtbb, a kzeli mltban fejlesztett Microsoft termk
XDR-t hasznl smalersra. Azonban mr a legjabb az XSD, XML Schema Definition ,amely
most a leginkbb aktulis smaler nyelv. A Biztalk Server, illetve a .NET XML osztlyok mr
tudjk tudni fogjk ezt a smalerst is kezelni (termszetesen az XDR mellett). A Visual
Studio 7 egyik alapszolgltatsa az XSD smk grafikus szerkesztse, konverzija XDR-bl
XSD-be, XML dokumentumbl XSD generlsa stb.

Az XML adatfolyam megjelentse


Az XML fjl-ok nem tartalmaznak semmilyen informcit arra nzve, hogy hogyan kell ket
megjelenteni. Azt lttuk, hogy az IE5 egy fa formban jelenti meg az XML dokumentcikat,
kihasznlva azt, hogy azok egy-egy ft rnak le. Ennek a hinyossgnak a megoldsra kt
szabvnyos megolds is ltezik:
CSS (Cascaded Style Sheets)
XSL (Extended Style Language)

A CSS
A CSS rszletes lerst lsd DHTML rszen bell, gy itt csak a hasznlatt mutatjuk be. A CSS
lersok jellemzen *.css fjl-okban tallhatak meg. Legyen adott egy vkonyv.css kinzet
lersunk. Ekkor az els vltozat VKONYV XML karakterfolyam megjelentsre a CSS
hasznlatot a kvetkez utastssal rhatjuk el a megjelent alkalmazs rszre:
<?xml version="1.0" encoding="WINDOWS-1250" ?>
<?xml-stylesheet type=text/css href=vkonyv.css ?>
<VKONYV>
<VENDEG sorszam=1>
...
</VKONYV>
A plda kedvrt nzznk egy nagyon egyszer CSS-t, amit a vkonyv.css fjl-ban tallhat el. A
fjl tartalma:
NEV { display: block; font-size: 20pt; font-weight: bold; }
EMAIL { display: block; font-size: 15pt; font-weight: bold; }
DATUM { display: block; font-size: 12pt; font-weight: bold; }
SZOVEG { display: block; font-size: 10pt; font-weight: bold; }
rdekessgkppen lerjuk, hogy ezt a formt azrt nevezi a szabvny cascade-nak, mert a
megjelentsi belltsok klnfle szintjeit egyms utn vizsglja meg a megjelent alkalmazs
(Ezek a szintek: a bngsz alaprtelmezsei, egy kls stluslap defincii, a <style>...</style>
tag ltal loklisan megadott lehetsg, direkt stlusjegyek: <B>, <FONT>).

Az XSL
Az XSL tbb, mint egy egyszer stluslap meghatroz nyelv, inkbb egy olyan
szvegfeldolgoznak tekinthet, mint a Perl vagy a UNIX-os AWK nyelvek. A feldolgozs
eredmny karaktersorozata termszetesen egy HTML dokumentum is lehet, amit a bngszk
meg tudnak jelenteni. Az XSL kt nll nyelvi rszbl ll:
a transzformcis nyelvbl (XSL Transformation) s
a formz (XSL Formatting Objects, XSL-FO) nyelvbl.
A transzformcis nyelv elemeivel olyan szablyokat definilhatunk, amelyek segtsgvel egy
XML dokumentumbl egy msik dokumentumot, illetve ltalnosabban fogalmazva brmilyen
byte-sorozatot hozhatunk ltre. Ennek kvetkeztben a ltrehozott dokumentum nem
szksgszeren lesz XML megfelel, hiszen ezzel a mdszerrel RTF, PDF, HTML,
dokumentumok is gyrthatk.
Az XSL Formatting Objects (XSL-FO) az XSL ajnls msodik rsze. Az XSL-FO egy olyan
rszletes modell, amellyel XML szintaxis stluslapokat hozhatunk ltre, amik a CSS-hez
hasonlan meghatrozzk, hogyan kell az XML dokumentumnak megjelennie. Az XSL
Formatting Objects (XSL-FO) a HTML+CSS formtum megjelentsnl sokkal tbbet nyjt.
Lehetsg van a klnbz tipogrfiai, a nyomdai kiadvnyoknl megszokott oldal s
szvegformzsi elemek (fejlc, lblc, tartalomjegyzk, ...) szablyainak lersra. Az XSLFO
dokumentumokat ltalban XSL transzformcival hozzuk ltre. A szemlletessg rdekben
elksztettnk egy vkonyv1.xsl fjl lerst, amit az albb lthat mdon a CSS-hez hasonlan
pthetnk be egy XML dokumentumba:
<?xml version="1.0" encoding="WINDOWS-1250" ?>
<?xml-stylesheet type="text/xsl" href="vkonyv1.xsl"?>
<VKONYV>
<VENDEG sorszam="1">
...
</VKONYV>
A teljessg kedvrt nzzk meg a vkonyv1.xsl fjl tartalmt is:
<?xml version="1.0" encoding="WINDOWS-1250" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html><body> <H1>VENDGKNYV</H1>
<xsl:apply-templates/>
</body></html>
</xsl:template>
<xsl:template match="VKONYV"> <br/> <xsl:apply-templates/> <hr/>
</xsl:template>
<xsl:template match="VKONYV/VENDEG"> <xsl:apply-templates/>
</xsl:template>
<xsl:template match="VKONYV/VENDEG/NEV">
<hr/>Neve: <b>
<xsl:value-of select="."/> </b>
</xsl:template>
<xsl:template match="VKONYV/VENDEG/EMAIL">
Email cme: <b>
<xsl:value-of select="."/> </b>
</xsl:template>
</xsl:stylesheet>
Az bra mutatja a VKONYV XML adatfolyam kinzett akkor, amikor a vkonyv1.xsl stluslapot
hasznltuk. szrevehet, hogy ez a mdszer a megjelentend adatok krt is knnyen kezelni
tudja (itt most csak a Nv s Email lett megjelentve). Az XSL stluslap nyelv egy XML
alkalmazs. Az XSL lapok a mintailleszts mdszert hasznljk az egyes elemek
megjelentshez. Itt a tag nevek xsl:-tal kezddnek, utalva arra, hogy itt olyan XML elemek
vannak, amiket az XSL alkalmazs keretben akarunk hasznlni. Ez a megolds egy XML nvtr
(namespace) szabvnyon alapul, aminek az a clja, hogy az egyes XML alkalmazsok tag-jei
kln-kln nvtrben legyenek (hasonlan a C++ nvtereihez). Itt az xsl:-ben az xsl sz a
nvtr neve. Rviden nzzk t, hogyan hatrozza meg a megjelenst a vkonyv1.xsl tartalma. A
fjl els sora arra utal, hogy ez a fjl egy XML adatfolyamot tartalmaz. A msodik sor az xsl
nvteret vezeti be. A 3-7 sor azt mondja, hogy az egyes elemek megjelentse eltt rjuk ki a az
eredmny karaktersorozatba a <html><body><H1>VENDGKNYV</H1> fzrt, majd
alkalmazva a mintalersokat (apply-templates) kezdjk el feldolgozni az XML fa egyes elemeit.
Az elem feldolgozsok utn a befejez lps az, hogy a ksztend html dokumentumot is
befejezzk, azaz kirjuk a </body></html> karakterfzrt. A kvetkez template szakaszok arrl
rendelkeznek, hogy mit kell csinlna a fa bejrsa sorn, illetve akkor, amikor egy konkrt XML
elemnl tart a feldolgozs. A <xsl:template match="VKONYV/VENDEG/NEV"> sorban a
"VKONYV/VENDEG/NEV" kifejezst XPath-nak hvjuk. Az XSL vezrl mkdst jobban
tgondolva vilgoss vlik, hogy az applytemplates kulcsszval egy rekurzv defincit tudunk
megadni a feldolgozsra. A <xsl:value-of select="."/> mindig az aktulis faelem (node)
rtkt adja vissza.

Egy XML adatfolyam elemzse (Parse)


Amint azt mr megtanultuk az XML dokumentumokhoz megadott nyelvtanok egyrszt egy j
dokumentum ltrehozsakor, msrszt egy ltez dokumentum rvnyessgnek ellenrzshez
szksgesek. Az XML dokumentumok elemzsre kt szabvnyos megolds terjedt el:
DOM (Document Object Modell) alap s
SAX (Simple API for XML) alap elemzk
A DOM felpti az XML adatfolyamnak megfelel, objektumokbl ll ft, aminek az elemeit
ezutn kzvetlenl el lehet rni (az objektumok metdusai s adattagjai hasznlhatak). A DOM
fogalma ismers lehet azoknak, akik a bngszkben mr rtak olyan JavaScript vagy Java
programot, amik elrik a Window, Document, Link, ... objetumokat, hiszen az is egy DOM
hierarchia. A SAX nem pt fel DOM szerkezetet, ugyanis itt az elemzs sorn mindig csak az
aktulis elemet ltjuk. A SAX emiatt nem teszi lehetv az XML elemek kzvetlen elrst,
azokat csak sorosan olvassa fel, aminek kvetkeztben esemnyek generldnak. Az elemz
alkalmazs ezekre az esemnyekre hatrozza meg az esemnykezel metdusokat. A DOM s
SAX API-k deklarcija a szabvnyos IDL nyelven van megfogalmazva, ezrt azokat C++, Java,
Pascal,... nyelveken implementlni kell. Az IBM, Oracle, Sun, Apache rendelkeznek Java-ban
megvalstott implementcikkal. A szemlltet pldkat az Oracle XML Developer's Kit for
Java csomag hasznlatval ksztettk el, ami letlthet az Oracle TechNet helyrol (itt C/C++
csomag is tallhat). A kt elemz mkdsi elvben tapasztalhat klnbsg miatt hasznljk
ket ms, ms clra. DOM elemzst ltalban kis mret XML llomnyok feldolgozsnl
hasznlnak, mert a DOM funkcijbl kvetkezleg az egsz dokumentumot beolvassa, s ez egy
nagy llomny esetn jelents memria terhelst jelent e rendszer szempontjbl. Pldul
webszervereknl amikor nagy XML-bl kell HTML kimenetet generlni esetleg prhuzamosan
Tbb felhasznl szmra, ekkor a DOM nem hatkony ilyenkor SAX elemzst rdemes
hasznlni. XML alap konfigurcis llomnyok feldolgozsnl viszont inkbb a DOM az ami
megfelel tmogatst nyjt.

Egy DOM elemz mkdse


Egy DOM elemz a VKONYV XML adatfolyambl az brn lthat objektum hierarchit pt
fel a memriban: A Java nyelv oldalrl vizsglva ez azt jelenti, hogy XMLElement, XMLAttr,
XMLNode tpus osztlyok objektumai vesznek rszt a DOM fa felptsben. A szemlletessg
rdekben tekintsnk egy egyszer Java programot, ami elemzi a VKONYV XML adatfolyamot,
illetve feldolgozsi tevkenysg gyannt a Java konzolon egyms alatt megjelenti a vendgek
neveit. A programban megjegyzsek magyarzzk el a feldolgoz algoritmus mkdst.
//
// Egy DOM elemz s feldolgoz
//
import java.net.*;
import org.w3c.dom.*;
import org.w3c.dom.Node;
import oracle.xml.parser.v2.*
//
public class TVendegLista
{
//---
// Main
//
public static void main(String[] args)
{
if ( arg.length != 1 )
{
System.out.println("Hasznlat: java TVendegLista xml_fjl");
}
try
{
// Az Elemzes egy referencit ad vissza
// a felptett DOM fra
XMLDocument doc = Elemzes( args[0] );
// Egy referencit kapunk a DOM gykrelemre
Element gyokerElem = doc.getDocumentElement();
// A felptett DOM fa feldolgozsa
DOMFaFeldolgozas( gyokerElem );
}
catch ( Exceptipon )
{
System.out.println("HIBA az elemzs sorn...");
}
} // end main
//---
// Az elemzo rutin elksztse
//
public XMLDocument Elemzes( String xml_fjl ) throws Exception
{
// Egy DOM parser objetum ltrehozsa
DOMParser parser = new DOMParser();
// Egy URL ltrehozsa
URL url = UrlFromFjl.createURL( xml_fjl );
// Elemzs, mikzben felpl a DOM fa
parser.parse( url );
return parser.getDocument();
} // end Elemzes
//---
// A feldolgozs most azt jelenti, hogy a neveket
// listzni kell a Java konzolra
//
public void DOMFaFeldolgozas( Node EgyFapont )
{
if ( EgyFapont.getNodeType() == Node.ELEMENT_NODE )
{
if ( EgyFapont.getNodeName().equals("NEV") )
{
NevFeldolgozas((Element)EgyFapont);
}
else
{
NodeList gyerekek = EgyFapont.getChildNodes();
for (int i=0; i < gyerekek.getLength(); i++ )
{
DOMFaFeldolgozas(gyerekek.item(i)); // Rekurzi!
}
} // end if
} // end if
} // end DOMFaFeldolgozas
//---
// A NEV fapont feldolgozsa
//
public void NevFeldolgozas( Element Fapont )
{
String nev = null;
Node gyerek = Fapont.getFirstChild();
Text text = (Text)gyerek;
nev = text.getData();
System.out.println( nev ); // Itt irjuk a konzolra
} // end NevFeldolgozas
} // end TVendegLista class
A java TVendegLista vkonyv.xml parancsra a program a konzolon ezt jelenti meg:
X Y
Z V

Egy SAX elemz mkdse


A SAX elemzk sorosan vgigolvassk a bemen XML adatfolyamot, mikzben klnfle
esemnyeket generlnak. Az elemz, feldolgoz alkalmazsok rsa sorn a f feladat a
megfelel esemnykezel rutinok megrsa s regisztrlsa. A knnyebb rthetsg rdekben
rjunk olyan Java SAX elemzt, ami kirja a konzolra azt, hogy mennyi vendg van az XML fjl-
ban trolva.
//
// Egy SAX elemz s feldolgoz
//
import java.net.*;
import org.xml.sax.*;
import oracle.xml.parser.v2.*
//
//
// Az osztly leszrmazottja az alaprtelmezett
// SAX esemnyeket kezelo osztlynak
//
public class TVendegListaSAX extends HandlerBase
{
public int vendeg_cnt = 0; // Itt szmoljuk a vendgeket
//---
// Ez egy esemnykezelo rutin, ami mindig az elemre lpskor
// automatikusan meghvdik
//
public void startElement( String name, AttribiteList attrlist )
{
if ( name.equals("VENDEG") )
{
vendeg_cnt++;
}
} // end startElement
//----
// main
//
public static void main(String[] args)
{
if ( arg.length != 1 )
{
System.out.println("Hasznlat: java TVendegListaSAX xml_fjl");
}
// Az esemnykezelo osztly ltrehozsa
TVendegListaSAX esemenykezelo = new TVendegListaSAX();
// Egy SAX parser objektum ltrehozsa
SAXParser parser = new SAXParser();
// Az esemnykezelo regisztrlsa a
// most ltrejtt parser objektumnl
parser.setDocumentHandler( esemenykezelo );
//Kezdjk az elemzst!
try
{
parser.parse( UrlFromFjl.createURL(args[0]));
}
catch (Exception)
{
System.out.println("HIBA az elemzs sorn!");
}
//--- Befejezsl kiirjuk az eredmnyt a konzolra
System.out.println("A vendgek szma: " + Integer(vendeg_cnt).toString() );
} // end main
} // end TVendegListaSAX class
A java TVendegListaSAX vkonyv.xml parancsra a program a konzolon ezt jelenti meg:
A vendgek szma: 2
XML technolgik lersnak hivatalos helyei:
http://www.w3c.org
Tovbbi rdekes XML technolgival is foglalkoz oldalak:
http://www.xml.org
http://xml.apache.org
Oracle TechNet:
http://otn.oracle.com

ASP (Active Server Pages).

Egy kis alapozs


Amikor annak idejn a HTML-t kitalltk, mg senki sem gondolt arra, mi lesz a dolog vge. A
HTML hipertext-lernyelv eredetileg arra val, hogy segtsgvel egyszer dokumentumokat
hozzunk ltre, amelyek egyes rszei esetleg hivatkoznak ms dokumentumok rszeire (ez a
hiperhivatkozs, hiperlink). Az eredeti HTML nyelv a hivatkozsokon kvl alig nhny elemet
tartalmazott, amelyek klnbz szint cmsorok, idzetek, esetleg listk ltrehozst segtettk.
A sors fintora, hogy az Internet megjelensvel ppen a HTML lett az internetes kommunikci
egyik alapja. (Nincs ezen mit csodlkozni: klnfle adatok s kzttk felptett kapcsolatok
lersra volt szksg, s a HTML ppen kapra jtt.) A ma hasznlatos HTML persze mr
jcskn tbb, mint egyszer dokumentumler nyelv pontosan annyi kze van az s HTML-
hez, mint a mai dokumentumoknak az akkoriakhoz. Rgen az adatok struktrja kpezte az
alapot, ma inkbb azok megjelentse. Ahogy telt az id, gy szivrogtak bele a nyelvbe a
tartalmat nem, azok megjelentst annl inkbb rint elemek: kpek, tblzatok, keretek
(framek), sznek, mretek, bettpusok, kls objektumok, scriptrszletek s ki tudja mg mi
minden. A HTML 4-es vltozatt tbbek kztt pontosan azrt alkottk meg, hogy valamelyest
(jra) sztvlaszthassuk a tartalmat a megjelentstl, ezzel is cskkentve a HTML oldalak
kdjban tallhat nem kis koszt. A tartalom s megjelents sztvlasztsa azta szinte minden
terleten hdt, fggetlenl attl, hogy a hlzaton tallhat HTML oldalak nagy rsze a mai
napig nem hasznlja ki a HTML 4 lehetsgeit (ksznhet ez egybknt a szabvnyokkal tbb-
kevsb hadilbon ll bngsz programoknak is).

Mozgsba lendl a kd
Az id mlsval egy msik terleten is sokat fejldtt a HTML, illetve annak felhasznlsa.
Kezdetben elg volt, ha egy dokumentumot ltrehoztunk, annak tartalma nem, vagycsak ritkn
vltozott. Ksbb felmerlt az igny arra, hogy a gyakran vltoz HTML oldalak tartalmt
dinamikusan hozzk ltre. Kezdettl kt irnyvonal ltezett, attl fggen, hogy a kiszolglra,
vagy pedig a dokumentumot felhasznl gyflprogramra bztk a feladatot. Ez utbbi megolds
nem biztos, hogy mkdik (senki sem garantlja, hogy az gyflprogram kpes ezt a feladatot
vgrehajtani), radsul tbb szempontbl elnytelen is: ha a cl az, hogy 100 dologbl csak egy
valami jelenjen meg az gyfl kpernyjn, felesleges mind a szzat elkldeni neki, majd ott
kivlasztani a szksges egyet egyszerbb, biztonsgosabb s olcsbb, ha mr eleve csak a
szmra rdekes adatok kerlnek hozz. Ehhez viszont a kiszolglnak kell erfesztseket
tennie. A kiszolgloldali megoldsok kzs tulajdonsga, hogy a kiszolgl mindig ksz,
feldolgozhat HTML kdot kld az gyflnek a kd tartalma viszont dinamikus, idrl idre
vltozik. Magyarn: a cl az, hogy HTML kdot generljunk. A legkzenfekvbb megolds az
volt, ha ksz, teljes programokat rtak az egyes feladatok vgrehajtsra. A programok
szabvnyos bemeneten (stdin) keresztl kaptk a bemen adatokat, majd a szabvnyos kimeneten
(stdout) tovbbtottk az ltaluk ltrehozott kdot. A webkiszolgl s a programok kztti
kapcsolatot az n. CGI (Common Gateway Interface) valstotta meg, gy a programok ltszlag
a kiszolgl rszeknt mkdtek (s mkdnek ma is). Ezt a mdszert CGI programozsnak
nevezzk, s br nhny terleten mg ma is hasznlatos, htrnyai miatt lassan kiszorul. Mert:
mit tehetnk, ha azt szeretnnk, hogy a CGI program mostantl ms kdot generljon? Egy:
jrarjuk, jrafordtjuk s kicserljk a programot. Kett: Eleve olyan CGI alkalmazst runk, ami
a bemen adatok segtsgvel paramterezhet. St, mi lenne, ha a bemen paramter egy
valamilyen formban meghatrozott parancssorozat, vagy akr egy valamilyen nyelven megrt
script kd lenne? A CGI program azt rtelmezi, vgrehajtja, s visszaadja az eredmnyt ez a
megolds a scriptnek ksznheten teljesen dinamikus s brmire hasznlhat lenne s az is. J
plda erre a Perl nyelv, ahol a webprogramozs lelke a perl.exe. Bemenete egy Perl nyelven rt
script, kimenete pedig a ksz HTML kd.

ASP a lthatron
A fenti megolds egy kicsit mgis knyelmetlen: milyen j lenne, ha a HTML oldalak ltalban
statikus rszt hagyomnyos mdon, akr egy knyelmes WYSIWYG szerkesztvel
kszthetnnk, s csak a dinamikus rszt kellene programozni! Az Active Server Pages (ASP)
elve pontosan ez: amikor azt mondjuk, ASP, tulajdonkppen egy HTML kdba gyazott,
specilis programozsi mdszerrl beszlnk. (Fontos, hogy az ASP nem egy programozsi
nyelv, hanem csak egy keretrendszer). Az ASP oldal vgrehajtsakor a webkiszolgl
vgigszalad az oldal tartalmn, s ha abban ASP scriptrszletet tall, vgrehajtja. A HTML oldal
s a script ltal esetleg visszaadott kdrszletek egyttesen kpezik az eredmnyt, amit azutn az
IIS elkld a bngsznek. Lssunk egy pldt:
<HTML><HEAD><TITLE></TITLE></HEAD>
<BODY>
<%
Response.Write("<center>Hello World!</center>")
%>
</BODY>
</HTML>
A HTML kd belsejben tallhat <% s %> jelzi az ASP kd kezdett s vgt. A kztk
tallhat kdrszlet elvileg soha nem jut el az gyflhez, csakis a kd futtatsa sorn keletkez
kimenet (ami esetnkben a Response.Write() metdusnak tadott szvegrsz). Az ASP scriptek
begyazsnak mdjrl kicsit ksbb mg lesz sz, most lssuk, mi lesz az eredmny:
<HTML><HEAD><TITLE></TITLE></HEAD>
<BODY>
<center>Hello World!</center>
</BODY>
</HTML>
Az ASP kd ltal generlt kimenet teht sszemosdott a HTML kddal. Ez j, hiszen rrnk az
oldalt teljes egszben elkszteni egy kls, knyelmes HTML szerkesztvel, majd utlag
begyazhatjuk az ASP kdot. Egy gondolat az ASP hasznlatrl: mint lthat, az ASP az IIS
webkiszolgl rsze. A Windows NT 4.0 Option Pack segtsgvel telepthet Internet
Information Server 4.0 (Windows NT 4.0 Workstation-n Personal Web Server) mr tartalmazza
az ASP kezelshez szksges komponenseket, amelyek a Windows 2000 IIS5
webkiszolgljban termszetesen alaprtelmezett tartozkok. Ha azt szeretnnk, hogy egy fjlt
az IIS tnyleg ASP oldalknt kezeljen, adjunk a fjlnak .asp kiterjesztst (ha ezt nem tesszk, a
kd vgrehajts nlkl eljut az gyflhez, mintha a HTML oldal tartalma lenne).

Az ASP kdok begyazsa


Az ASP scripte(ke)t az oldalba tbb mdon is begyazhatjuk. Lssuk mindenekeltt a HTML
szabvnynak megfelel mdot:
<HTML><HEAD><TITLE></TITLE></HEAD>
<BODY>
<SCRIPT runat="server" language="vbscript">
Response.Write("<center>Hello World!</center>")
</SCRIPT>
</BODY>
</HTML>
A SCRIPT HTML elem segtsgvel teht ugyangy gyazhatunk be kiszolgloldalon fut
kdot, mintha gyfloldali scriptet rnnk csak adjuk meg a runat="server" attribtumot.
Hasonlan az gyfloldali megoldshoz, termszetesen kiszolgloldalon sem muszly az
oldalon bell megrni a scriptet, megadhatunk fjlnevet is (src attribtum): <SCRIPT
runat="server" src="scfile.vbs"> Lthat, hogy itt elhagytuk a scriptnyelv meghatrozst. Ebben
az esetben a kiszolgl az alaprtelmezett scriptnyelvet hasznlja. Ezt kt helyen hatrozhatjuk
meg: egyrszt, az adott .asp oldal tetejre rt, gynevezett ASP direktva segtsgvel : <%@
Language=VBScript %> Ha pedig ez hinyzik, a kiszolgl a sajt belltsait hasznlja. A <%
s %> hasznlata rvidebb s knyelmesebb is, ezrt tovbbiakban hacsak kifejezetten nincs
szksg msra ezt hasznljuk. Termszetesen egy oldalon bell tbb scriptblokk is szerepelhet.
Az ASP oldal tartalmt az IIS ellrl htrafel haladva rtkeli ki, belertve magt a HTML
kdot is. Az ASP kd ltal visszaadott kd az eredmnyben ott jelenik meg, ahol maga a script
szerepel, pldul a :
<p>1<p><% Response.Write("a") %><p>2
<% Response.Write("b") %><p>3
eredmnye 1a2b3" s nem ab123" vagy 123ab". A fenti pldban lthatjuk azt is, hogy akr
soron bell is kszthetnk scriptblokkot (inline script), nem ritka az albbihoz hasonl megolds:
<INPUT type="textbox" value="<% =sTxt %>">
Ezutn a szvegmezben az sTxt vltoz tartalma jelenik meg. jabb jdonsggal tallkoztunk: a
<% utn rt = a Response.Write rvidtse, teht a <%="Hello!"%> egyenrtk a
<%Response.Write("Hello!")%> sorral. Mg egy fontos tudnival a tbb rszletben begyazott
scriptekrl: nem tilos az sem, hogy a script kzepn egyszer csak tiszta HTML kd jelenjen
meg. Ilyenkor az gy viselkedik, mintha a kd rsze lenne, azaz ha az adott szakaszra rkerl a
vezrls, az is megjelenik, klnben rejtve marad.
<% For i=1 To 10 %>
<center>Hello World!</center>
<% Next %>
A fentiek hatsra pldul a Hello World! felirat tzszer rdik ki, az albbi kdrszlet pedig a
csillagok pillanatnyi llstl fggen hol ezt, hol azt mondja (de sosem egyszerre a kettt!):
<% Randomize ' <- Fontos, klnben nem lenne ' vletlen! %>
<% If Int(Rnd()*10) > 5 Then %>
<center>Kkjszi</center>
<% Else %>
<center>Bobojsza</center>
<% End If %>
gy nagyszeren szegmentlhatjuk az oldalt. Ha pldul egy ASP oldalon tbb minden jelenhet
meg, de nem egyidben, akkor legjobb, ha HTML szerkesztvel ltrehozzuk az oldalt, benne az
sszes opcionlis rsszel, majd ezeket a rszeket utlag krbeptjk scripttel, ami majd
eldnti, hogy az adott szakasz ltsszon-e vagy sem. Br a <% s a %> nem szerepelnek a HTML
szabvnyban, mi btran hasznljuk, hiszen ezek a jelek soha nem hagyjk el a kiszolglt. Ha az
ASP script ltal generlt kimen kd HTML-kompatbilis, nyugodtak lehetnk abban, hogy mi
minden tlnk telhett megtettnk a szabvnyos kommunikci rdekben. gyfl-kiszolgl
kommunikci: a HTTP protokoll A HTML oldalak szmtgpek kztti tovbbtshoz ki
kellett dolgozni egy adattviteli szabvnyt. Ez lett a HTTP, azaz Hypertext Transfer Protocol. A
HTTP nem ms, mint egy jl definilt gyfl-kiszolgl kommunikci.
A HTTP kommunikcit az gyfl kezdemnyezi: hlzati kapcsolatot ltest a kiszolglval s
kzli vele ignyeit: ez a HTTP krs (HTTP Request). A krsre a kiszolgl vlaszt kld (HTTP
Response), majd az eredeti definci szerint megszaktja a kapcsolatot s szksg esetn minden
kezddik ellrl. A kapcsolat megszaktsra eredetileg azrt volt szksg, hogy a fenntartott,
hasznlaton kvli kapcsolatok ne terheljk feleslegesen a kiszolglt. Manapsg azonban ms a
helyzet: egy HTML oldalon kpek, objektumok tmege lehet, gy elvileg kln kapcsolatot kell
felpteni elszr a HTML kd, majd ksbb minden egyes begyazott kp s objektum
letltshez, s ma bizony ppen az jabb hlzati kapcsolatok ltrehozsa az, ami tlterhelheti a
kiszolglt (radsul ez nem is igazn hatkony). Ezrt a HTTP 1.1 verzijban bevezettk a
Keep-Alive opcit, amiben ha az gyfl s a kiszolgl megegyezik, a kapcsolat nem bomlik le
azonnal (magyarul egy kapcsolat sorn tbb krs s vlasz is elhangozhat). Ha brki hibt szlel,
termszetesen azonnal bontjk a kapcsolatot. Ma mr szinte minden bngsz gy prbl
kapcsoldni a kiszolglhoz, azok pedig ltalban elfogadjk ezt a krst. Alaprtelmezsben gy
tesz az IIS is, errl a HTTP Keep-Alives Enabled opci kikapcsolsval beszlhetjk le (ezt az
adott IIS web tulajdonsglapjn, a Web Site oldalon talljuk). A HTTP krs- s vlaszzenet
egyarnt hrom f rszbl ll:
Parancs, illetve sttuszinformci
Fejlcek, metaadatok
HTTP tartalom
Az els rszben (ami mindig az els sor) krskor a krt parancs, illetve annak paramterei,
valamint a verziszm utazik, vlasz esetn pedig a sttusz- vagy hibazenet kdja s
lersa. Az ezutn kvetkez fejlcek a kapcsolat s a ksbb kvetkez HTTP tartalom
jellemzt tartalmazzk, ezek vizsglatra ksbb rszletesebben kitrnk, hiszen ami
gyfl-kiszolgl kommunikci s nem a HTML kd rsze, az itt tallhat. Vgl a HTTP
tartalom, ami vlasz esetn maga a HTML oldal, vagy mondjuk egy kp tartalma, krs
esetn pedig ha van a kiszolglnak sznt bemen adatok tmege. A fejlceket a HTTP
tartalomtl egy res sor vlasztja el. Az ASP a HTML tartalom dinamikus ltrehozsa mellett
termszetesen lehetv teszi a fejrszben kapott adatok feldolgozst s a vlasz
fejrsznek manipullst is.

Az ASP objektummodell
Az .asp oldalak programozst, a HTTP kommunikci, a webkiszolgl egyes szolgltatsainak
elrst kln objektummodell segti. Az ASP objektummodelljnek minden elemt elrhetjk az
.asp oldalak kdjaibl. A ksbbiek sorn mindegyik ASP objektumot bemutatjuk rszletesen is,
most vessnk egy rpke pillantst a teljes objektummodellre s annak elemeire.

Ha a tranzakcis mveletekhez hasznlt ObjectContext objektumot nem szmtjuk, az


objektummodell hat (Windows NT 4.0-n t) objektumbl ll. A Windows 2000-ben megjelent j
objektum az ASPError, ami egy bekvetkezett hiba lerst tartalmazza, az .asp-be gyazott, sajt
hibakezelst segti. A Server objektum magt az IIS-t kpviseli, nhny kiszolglszint
belltssal s szolgltatssal. Az Application objektum egy webalkalmazst jelkpez. A
webalkalmazs klnll egysg, ltalban egy knyvtrban s annak alknyvtraiban tallhat
.asp kdok sszessge, kzs objektumokkal s belltsokkal. A Session objektum egy gyfl s
a kiszolgl kztt fennll kapcsolatot, munkamenetet jelkpez. A fennll kapcsolatot
azrt rtuk gy, mert valjban nem egy kapcsolatrl van sz. Az IIS (a httrben cookie-k
segtsgvel) azonostja a felhasznlt s a bngszt, gy az a bngsz bezrsig sajt
munkamenetbe trhet vissza. A Request objektum egy HTTP krst jelkpez, segtsgvel
kdbl hozzfrhetnk a krs minden elemhez, legyen az HTTP fejlc rtke, a bngszben
trolt cookie, vagy krdv tartama. A Response objektum pedig rtelemszeren a krdsre
kldend vlaszt jelkpezi. Termszetesen a Response objektum segtsgvel sem csak a vlasz
tartalmt, hanem a HTTP protokoll fejrszt is kezelhetjk. Egy IIS kiszolgln bell Server s
ASPError objektumbl egy-egy ltezik (utbbi csak akkor rhet el, ha hiba trtnt). Application
objektum minden webalkalmazs egyedi, globlis objektuma, Session objektum minden
munkamenethez (gyflhez) egy jn ltre, egyidejleg teht tbb is ltezhet. Request s
Response objektum pedig mindig az adott krsre s vlaszra vonatkozik, jabb krs esetn j
pldny jn ltre bellk is.

Egy HTTP vlasz a Response objektum


Kezdjk a vgn: a Response objektummal, ami egy HTTP krsre adott vlaszt hivatott
jelkpezni. A Response objektum legegyszerbb (s leggyakoribb) alkalmazst mr lthattuk
korbban: a Response.Write() metdus segtsgvel lltottuk el az oldal tartalmt. A Write()
hasznlata egyszer: minden, amit paramterknt tadunk neki, bekerl a vlaszknt
visszakldtt adatcsomagba. A Write() metdusrl egyetlen dolgot kell tudni: a kirt szveg nem
tartalmazhatja a %> jelsorozatot, helyette ezt kell rni: %\> Az ezt tartalmaz szveget IIS
automatikusan visszaalaktja majd az eredeti formra.

A vlaszpuffer
Az .asp oldal ellltsa termszetesen tbb lpsben trtnik, az oldalban tallhat scripttl
fggen elfordulhat az is, hogy az oldal tartalmnak egy rsze csak bizonyos vrakozsi id
utn ll rendelkezsre. Ilyenkor dnthetnk, hogy a mr ksz tartalmat elkldjk-e az gyflnek,
majd vrunk a folytatsra, vagy kivrjuk, amg a teljes oldal elkszl, s csak a munka legvgn
kldjk a komplett vlaszt. Ez utbbi esetben a kimenet egy pufferbe kerl. A pufferels az
IIS5-ben alaprtelmezsben mkdik, mg az IIS4-ben alaprtelmezsben ki van kapcsolva. A
Response objektum segtsgvel mi magunk is kezelhetjk a puffert: mindenekeltt, a
Response.Buffer property-nek False rtket adva letilthatjuk, True segtsgvel pedig
engedlyezhetjk a puffer hasznlatt.A Clear() metdus kirti a puffert (Legynk vatosak! A
kls HTML kd is a pufferbe kerl, trlskor az is elveszik!), a Flush() pedig elkldi azt, ami
addig a pufferbe kerlt, majd csak azutn trli a tartalmt. Az oldal feldolgozst brmikor
megszakthatjuk a Response.End() meghvsval. Ha az oldal vgrehajtsa befejezdik,
termszetesen a puffer teljes tartalma az gyflhez kerl. Ha nyom nlkl szeretnnk befejezni a
tnykedsnket, az End() meghvsa eltt hasznljuk a Response.Clear() metdust.

HTTP fejlcek kldse


A HTTP vlasz a tartalom mellett szmos HTTP fejlcet is tartalmaz. Mi magunk is kldhetnk
ilyen fejlcet a Response.AddHeader() metdus segtsgvel:
<%
Response.AddHeader("MyHeader", "MyData")
%>
A metdus kt argumentuma a fejlc neve s rtke termszetesen a fentinl rtelmesebb clra
is felhasznlhatjuk. Szmos dolog van, ami kzvetlenl programozhat a Response objektumon
keresztl s vgs soron egy-egy HTTP fejlc elkldshez vezet (a Response.ContentType
property belltsa pl. egy Content-Type HTTP fejlcet kld, stb.), de elfordulhat, hogy
olyasmit kell hasznlnunk, ami nincs gy kivezetve. A pufferels befolysolja a HTTP fejlcek
hasznlatt, kikapcsolt puffer esetn HTTP fejlcet termszetesen csak az oldal tartalma eltt
kldhetnk, teht a Response.AddHeader() metdus ekkor csak az .asp oldal elejn (az ASP
direktvk utn) llhat. Fontos tudni, hogy egy fejlc mr nem vonhat vissza: amit egyszer
ltrehoztunk, az a vlaszban mr benne lesz, mg akkor is, ha trljk a vlaszpuffert.

Tartalom s karakterkszlet
A HTTP vlasz sokfle tartalmat hordozhat magban. Egyltaln nem egyrtelm pldul, hogy
egy HTML dokumentum milyen karakterkszlettel rdott. St, mg az sem biztos, hogy a vlasz
egy HTML oldal. Response.Charset = az oldalban hasznlt karakterkszlet, kdtbla. Ha
normlis magyar betket is hasznlni szeretnnk, lltsuk ISO-8859-2"-re. Termszetesen
ugyanezt HTML-bl, a <META> elem segtsgvel is megtehetjk, az albbi kt plda teht
egyenrang (habr a fejlcben belltott karakterkszlet ltalban fellbrlja a HTML-ben
meghatrozottat ez a bngszn mlik):
<%
Response.Charset = "ISO-8859-2"
%>
<HTML><HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
</HEAD>
...
Response.ContentType = a vlasz MIME tpusa (a tartalom tpusa). HTML (s .asp) oldal esetn
az rtke text/html", ha nem lltjuk be, ez az alaprtelmezs is. Ennek a jellemznek az rtkt
akkor rdemes mdostani, ha a visszakldtt tartalom nem HTML, hanem mondjuk egy
kpfjl,mint albb:
<%
Set oStream = Server.CreateObject("ADODB.Stream")
oStream.Type = 1 ' adTypeBinary
oStream.Open
oStream.LoadFromFile(Server.MapPath("ms.jpg"))
Response.ContentType = "image/jpeg"
Response.BinaryWrite( oStream.Read )
%>
A fent hasznlt Response.BinaryWrite() metdus hasonl a .Write()-hoz, a klnbsg csak annyi,
hogy ez binrisan, minden megkts s konverzi nlkl rja a kimenetre az adatokat. A Server
objektum MapPath() metdusrl ksbb lesz sz, a lnyege az, hogy egy relatv fjlnvbl
ellltja a fjl fizikai elrsi tjt a webkiszolgln. Egy nlunk mg elhanyagolt jellemz
maradt utoljra: a Response.Pics jellemz rtke jelezheti, hogy egy adott oldal milyen
mrtkben s mennyisgben tartalmaz erszakra, szexre, meztelensgre s csnya nyelvre utal
jeleket. Ha ez az gynevezett PICS-Label (ami egybknt nem ms, mint egy specilis HTTP
fejlc) utazik az oldallal, a szrk kpesek lennnek kivlogatni a gyerekszobba nem val
tartalmat Ez az IIS belltsoknl egybknt webhelyenknt, knyvtranknt, vagy akr
fjlonknt is bellthat.ASP-ben, a fenti belltst kdbl a kvetkez mdon rhetjk el:
<%
Response.Pics( "PICS-1.0 ""http://www.rsac.org/ratingsv01.html"" l by ""[mICK]"" on
""2001. 01.08T21:26+0100"" exp ""2002.01.08T12:00 +0100"" r (v 3 s 0 n 0 l 0))" )%>

HTTP sttusz s tirnyts


Response.Status = A HTTP vlasz sttuszzenett (ami, ha minden rendben ment, 200 OK)
mdosthatjuk itt. A sttuszzeneteket a HTTP szabvny definilja, s mivel a legtbb funkci
ms mdon is elrhet a Response objektumon keresztl, ezt a megoldst viszonylag ritkn
hasznljuk. Hogy mgse maradjunk plda nlkl, lssunk egy tirnytst:
<%
Response.Status = "302 Object Moved" Response.AddHeader "Location",
"http://www.microsoft.com"
%>
A fenti kdrszlet egyenrang az albbival:
<%
Response.Redirect("http://www.microsoft.com")
%>
A Response.Redirect() metdus teht az gyfl krsnek azonnali tirnytsra val. A 302-es
kd HTTP zenetnek (teht az tirnytsnak) egyetlen htrnya van: nhny proxy bizonyos
krlmnyek kztt nem hajtja vgre az automatikus tirnytst, hanem ronda Object moved
hibazenetet kld vissza a bngszbe. Ez akkor kvetkezhet be, ha az tirnyts mellett az
adott oldal HTML tartalommal is br (magyarul, ha a vlaszban nem csak az tirnyt fejlcek
szerepelnek, hanem ms is). Hrom megolds knlkozik:
Redirect() eltt rtsk ki a puffert (Clear() metdus), vagy eleve ne rjunk bele semmit (a
Redirect() az olda elejn szerepeljen)
Ha kiszolgln bell kell tirnytani, akkor hasznljuk inkbb a Server objektum Transfer
metdust (IIS5-tl), ami kiszolgln belli tirnytst vgez anlkl, hogy az gyfl errl
tudomst szerezne
Hasznljuk a HTML-ben gyakori tirnytsi mdszert, ilyenkor maga a bngsz kezd
automatikus letltsbe, ami radsul idzthet:
<META http-equiv="refresh" content="0;URL=http://www.microsoft.com/">
A fenti pldban az idzts 0, azaz a bngsz azonnal belekezd az j cm letltsbe. A
<META> elemet a HTML oldal fejrszbe helyezzk el.

Ha sokig tart az oldal ellltsa


Ha egy oldal ellltsa sokig tart, vagy a webkiszolgl tlterhelt, elfordulhat, hogy a krs
kiszolglsa kzben (vagy eltt) az gyfl megunja a vrakozst s tovbbll. Az ilyenkor
elvgzett munka krba vsz, ezrt szksg esetn ellenrizhetjk, nem hiba dolgozunke. Ha a
Response.IsClientConnected property rtke hamis, akkor az gyfl megunta a vrakozst s
bontotta a kapcsolatot, ha viszont igaz, rdemes mg dolgozni. Termszetesen felesleges minden
sor eltt ellenrizni, ltalban csak hossz vgrehajtsi idej oldalaknl van erre szksg, akkor
is csak idkznknt. Az IIS5 olyan komolyan veszi ezt, hogy minden krs feldolgozsa esetn
ellenrzi, hogy a krs mennyi ideje rkezett. Ha a kiszolgl tlterhelt, s a krs tbb mint
hrom msodperce vrakozik, ellenrzi, hogy megvan-e mg az gyfl, s csak akkor kezd bele a
vgrehajtsba, ha van kinek elkldeni a vlaszt. Az IIS4 kicsit felems mdon viselkedik az
.IsClientConnected jellemz kirtkelsekor. Ha az oldalunk ilyen kiszolgln fut, tudnunk kell,
hogy az .IsClientConnected csak akkor hasznlhat biztonsgosan, ha az oldalbl valamit mr
elkldtnk az gyflnek (ha pldul a pufferelst bekapcsoltuk, csak a Flush() meghvsa utn
szmthatunk helyes eredmnyre).

Gyorsttrak a cache
Mivel ugyanarra a tartalomra sokan, sokszor kvncsiak, s nem szksges a dolgokat jra s jra
ltrehozni s letlteni az eredeti szrmazsi helykrl, ezrt hasznlnak cacheeket. Gyorsttrat
alkalmaz a bngsznk, sajt gyorsttrbl dolgozik az Internet-szolgltat, gynevezett
reverse-cache segti a webkiszolglkat a krsek gyors kiszolglsban. ltalnossgban
elmondhatjuk, hogy aki tud, tartalkolja a dolgokat, htha ksbb mg szksg lehet r. Ezzel
ltalban nincs is baj, de lehetnek dolgok, amelyeket felesleges elmenteni, mert a nevk, esetleg
mretk hiba vltozatlan, tartalmuk gyakran eltr. Kell-e jobb plda erre, mint a dinamikusan
ltrehozott weboldalak? Szerencsre a gyorsttrak tbbsge tvirnythat a tartalom nmaga
hordozhat olyan jeleket, amiket felismerve a gyorsttr nem prblkozik a trolsval. Ilyen
jelek (termszetesen HTTP fejlcek) ltrehozsban segt neknk a Response objektum albbi
nhny szolgltatsa: Response.CacheControl = Az oldal trolsnak szablyai. Ha rtke
private, akkor proxy kiszolglk nem, csak s kizrlag privt, bngszbeli gyorsttrak
trolhatjk az adatokat. Ez az alaprtelmezs is. Ha a jellemz rtke public, akkor az oldalt
brmelyik proxy kiszolgl trolhatja. Ha azt szeretnnk, hogy egyltaln senki ne trolja az
oldalunkat, a property-nek adjuk ezt az rtket: no-cache. Ha trolunk is valamit, idnknt
rdemes frissteni. Minden trolt tartalomnak van egy lejrati ideje, amit mi magunk llthatunk
be a Response.Expires s Response.ExpiresAbsolute jellemzk segtsgvel. Az elbbi az adott
pillanattl szmtott lejrati idt jelenti (percben), mg az utbbinak konkrt idpontot adhatunk
meg, pl.:
<% Response.ExpiresAbsolute= #May 31,2001 13:30:15# %>
Az oldal trolst elkerlhetjk gy is, ha a lejrati idt -1-re lltjuk:
<% Response.Expires = -1 %>
Rgebbi, a HTTP 1.1 szabvnnyal nem kompatbilis kiszolglk nem rtelmezik a CacheControl
rtkt, ezrt nha specilis HTTP fejlcre van szksg:
<% Response.AddHeader "Pragma", "no-cache" %>
A legbiztonsgosabb termszetesen az, ha mindhrom mdszert (CacheControl, Expires, Pragma)
kombinljuk. Ha nem akarunk ASP-t hasznlni, ezt a szoksos mdon, <META> elemek
segtsgvel tisztn HTML-bl is megtehetjk:
<META HTTP-EQUIV="CacheControl" CONTENT="no-cache">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">

HTTP krs a Request objektum


Adatklds a HTTP protokoll segtsgvel A dinamizmus, az interaktivits egyik mozgatrugja
termszetesen az, ha menet kzben adatokat kapunk az gyfl oldalrl. Ezeket az adatokat a
Request objektum segtsgvel rhetjk el. Adatok tadsa az URL-ben (QueryString) A
klasszikus adatbeviteli mdszer, amikor az adatokat a krs URL-jhez csatoljuk, ilymdon:
http://localhost/qs.asp?input1=val1&input2=val2
Ekkor ilyen HTTP krs indul a kiszolgl fel:
GET /request.asp?input1=value1&input2=value2&submit=Submit HTTP/1.1
Ennek a mdszernek tbb htrnya is van: egyrszt, a bemen adatok nvelik az URL hosszt, a
kiszolglnak elkldhet URL-ek mrete pedig biztonsgi okokbl ltalban korltozva van.
(Prbljunk meg az IIS-nek elkldeni egy tbbszz bjt hossz cmet! A vlasz szabvnyos
HTTP hibazenet: 404 Request URI too long"). Msrszt nemcsak knyelmetlen, de nem is
igazn biztonsgos, hogy az tadott adatok (amelyeket esetleg nem is mi rtunk be, hanem
mondjuk egy krdv rejtett rszei voltak) megjelennek a bngsz cmsorban. Az tadott
adatmezk nv=adat formjak (ld. fent: input1=val1), az egyes adatmezket & jel vlasztja el
egymstl, az egszet pedig krdjel a fjlnvtl. Egy adott mez rtkt a
Request.QueryString(meznv) fggvny adja vissza. Ha az adatok kztt ilyen mez nem
szerepel, a visszaadott rtk ().
<%
If Len( Request.QueryString("nev") ) Then
Response.Write( "Szia " &
Request.QueryString("nev") & "!" )
End If
%>
Haz elz kdot elmentjk pl. qs.asp nven akkor, ha nevnket megadjuk az URL-ben (pl.
qs.asp?nev=mick), akkor az oldal illenden ksznt minket. Egy mez megltt a
legegyszerbben gy ellenrizhetjk, ha lekrdezzk a hosszt (ezt teszi a Len() fggvny a
pldban). Ha ez nem 0, lehet dolgozni. Egy meznek azonban nem csak egy rtke lehet, a
HTTP krsben egy meznv egynl tbbszr is szerepelhet:
http://localhost/qs.asp?nev=Piroska&nev=Farkas Akkor ezt a kvetkez mdon lehet ezt
feldolgozni:
<%
Response.Write("Nevek szma: " & Request.QueryString("nev").Count & "<br>")
For i=1 To Request.QueryString("nev").Count
Response.Write( i & ": " &
Request.QueryString("nev")(i) & "<br>")
Next
%>
A Request.QueryString(meznv).Count rtk visszaadja az adott nev mezk szmt. Ha a
sok kzl egy konkrt rtkre vagyunk kvncsiak, akkor tadhatjuk az indexet is (a szmozs 1-
tl kezddik). Maradjunk a fenti pldnl, a Farkas-ra gy hivatkozhatunk:
Request.QueryString("nev")(2)
Ha egy meznek tbb rtke van, s mi mgis kzvetlenl krdezzk le (pl.
Request.QueryString(nev")), akkor az rtkek vesszvel elvlasztott listjt kapjuk vlaszknt:
Piroska, Farkas. Ha pedig egyszeren csak Request.QueryStringre hivatkozunk, akkor
visszakapjuk a teljes krdst: nev=Piroska&nev=Farkas. Ez volt teht az URL-be gyazott
lekrdezs feldolgozsa. Egy fontos s sokszor zavar tnyezre mg szeretnm felhvni a
figyelmet: az URL-ek formtuma kttt, s mivel a lekrdezs (s fleg az tadott adatok)
ilyenkor az URL rszt kpezik, ezeknek az adatoknak is meg kell felelnik bizonyos
szablyoknak: pldul, minden rsjel, kezetes karakter csakis kdolt formban (pl.
egyenlsgjel: %3D) szerepelhet az URL-ben. Ez a kdols pedig sokszor krlmnyes s
knyelmetlen.

Adatfeltlts a POST HTTP paranccsal


Szerencsre a HTTP protokoll tartalmaz egy, a fentinl fejlettebb megoldst is. A POST parancs
hasznlata esetn a feltltend adatok a HTTP zenet trzsrszbe kerlnek. Az adatok kdolst
persze gy sem sszuk meg, de az esetek tbbsgben ezt a munkt nem mi, hanem a bngsz
vgzi. Krdv (Form) kitltse esetn pldul, ha a FORM elem method attribtumt postra
lltottuk, a kvetkez krs indul a kiszolgl fel:
POST /request.asp HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 41
Connection: Keep-Alive
input1=value1&input2=value2&submit=Submit
Lthatjuk, hogy a kiszolglnak sznt adatok nem a POST parancs paramterben, hanem a
HTTP zenet trzsrszben utaznak. rdemes megfigyelni a trzs kdolsra vonatkoz Content-
Type HTTP fejlc rtkt is. Aki ismeri a HTML nyelvet, az tudhatja, hogy a HTML krdv
elemnek (FORM) method attribtuma hatrozza meg az adatok kldsnek mdjt. Ha a method
attribtum rtke get, a krdv tartalmt az URLbe gyazva, ha viszont az attribtum rtke
post, akkor a HTTP krs trzsben kldi el a bngsz a kiszolglnak. A krdv egyes
mezinek rtkt a Request.Form kollekci tartalmazza. Az elz pldhoz hasonlan minden
mez rtkt lekrdezhetjk, ha a meznek tbb rtke van, akkor itt is hasznlhatjuk a .Count
jellemzt s az indexeket is, pl.:
Request.Form("nev")
Request.Form("nev").Count
Request.Form("nev")(5)
rdekessg: Krdv feldolgozsa esetn a Submit nyomgomb rtke (felirata) is eljut a
kiszolglhoz, de ha tbb ilyen van, akkor csak annak az egynek, amelyikre kattintottunk. gy
megtehetjk azt, hogy ha egy krdvbe kt Submit nyomgombot tesznk:
<INPUT type="submit" name="submit" value="Egyl">
<INPUT type="submit" name="submit" value="Igyl">
a feldolgozskor knnyen kitallhatjuk, mit szeretne a kedves gyfl:
<%
If Request.Form("submit") = "Egyl" Then
Eszem
Else
Iszom
End If
%>
A For Each utasts segtsgvel (a tbbi kollekcihoz hasonlan) a .Form kollekci elemeit is
kilistzhatjuk:
<%
For Each mezo In Request.Form
a mezo-be a mezonev kerul
Response.Write( "<b>" & mezo & " = </b>" & Request.Form(mezo) & "<br>" )
Next
%>

A HTTP tartalom kiolvassa


Nem ktelez a Request objektum kollekciira tmaszkodnunk, ha ki szeretnnk olvasni a HTTP
krs trzsben elkldtt adatokat:
<%
bytes = Request.TotalBytes
data = Request.BinaryRead(bytes)
%>
A Request.TotalBytes jellemz visszaadja a trzsben tallhat adatok mrett, a
Request.BinaryRead() metdus pedig adott mennyisg adatot olvas be, termszetesen minden
talakts s konverzi nlkl. Fontos! A Request.BinaryRead() metdus hasznlata utn mr
nem hasznlhatjuk a Request.Form kollekcit, s fordtva: ha a Request.Form-hoz mr
hozznyltunk, a Request.BinaryRead() mr hibt okoz.

Cookie
A cookie kis adatcsomag, amit a kiszolgl krsre a bngsz az gyfl szmtgpn trol, s
szksg esetn visszakldi azt. Alapjban vve kt klnbz tpus cookie ltezik: az els tpus
csak addig l, amg a bngszvel egy kiszolglnl tartzkodunk. A bngsz bezrsval az
ilyen cookie tartalma elveszik. Ezeket a cookie-kat elssorban tmeneti clra hasznljuk (pldul
az ASP Session fenntartsra). A msik fajta, felhasznli szemmel gyakrabban megfigyelt
cookie annyiban klnbzik az elztl, hogy a bngsz bezrsakor nem veszik el, hanem a
szmtgp lemezre kerl. Az ilyen cookie-knak rvnyessgi idejk van. Amg ez az
rvnyessgi id le nem jr, addig a bngsz megrzi az rtkket, s tartalmukat minden egyes
ltogatskor visszakldi a kiszolglnak. A kt cookie-fajtt csak a lejrati id klnbzteti meg
egymstl. Lssuk teht, hogyan kldhetnk egyszer, tmeneti clra hasznlhat cookie-t a
bngsznek:
<%
Response.Cookies("nev") = "ertek"
%>
Ha a felhasznl legkzelebb felnk jr, ezt az adatot gy olvashatjuk ki:
<%
s = Request.Cookies("nev")
%>
Egy cookie nem csak egy szveget tartalmazhat, hanem tbbet is, egyfajta tblzatot, almezket:
<%
Response.Cookies("nev")("mezo1") = "ertek1"
Response.Cookies("nev")("mezo2") = "ertek2"
%>
A .HasKeys metdus segtsgvel eldnthetjk, hogy egy cookie egyszer szveg, vagy almezk
gyjtemnye, s ettl fggen kezelhetjk is:
<%
If Request.Cookies("nev").HasKeys Then
For Each mezo In Request.Cookies("nev")
Response.Write( Request.Cookies("nev")(mezo))
Next
Else
Response.Write( Request.Cookies("nev") )
End If
%>
A .HasKeys elrhet a Response objektumon keresztl is. Erre azrt van szksg, mert ha egy
szveges tpus cookieban almezket hozunk ltre, elveszik a szveges rtk s fordtva, ha
almezkkel rendelkez cookie-nak szveges rtket adnnk, elvesznnek az almezk s azok
rtkei. A cookie rvnyessgt a Response objektum segtsgvel korltozhatjuk idben s
trben:
<%
Response.Cookies("nev").Expires = "01-Jan-2003"
Response.Cookies("nev").Domain = "erise.hu"
Response.Cookies("nev").Path = "/dir1/dir2"
%>
Az .Expires jellemz rtke hatrozza meg, hogy az cookie meddig marad letben. Ha nem adjuk
meg, a bngsz lezrsakor elveszik. A .Domain jellemz segtsgvel bellthatjuk, hogy a
bngsz milyen domainek elrse esetn kldje vissza a cookie-t. A .Path pedig kiszolgln
belli rszletezst jelent: ha kt azonos nev cookie ltezik, ugyanarra a domain-re, akkor annak
az rtkt fogjuk visszakapni, ahol a .Path rtke kzelebb van a valsghoz. Ha teht az oldal a
/dir1/dir2 knyvtrak mlyn tallhat, a kt cookie .Path rtke pedig a /dir1 s a /dir1/dir2,
akkor az utbbit fogjuk viszontltni. Ha azt szeretnnk, hogy egy cookie az adott pillanattl
szmtott
egy vig legyen rvnyes, hasznljuk a DateAdd() s a Now fggvnyt:
<%
Response.Cookies("egyevigjo").Expires = DateAdd( "yyyy", 1, Now)
%>

Az IIS napljnnak rsa


Ha nagyon akarunk rhatunk, de krltekintnek kell lennnk. A Response.AppendToLog()
metdusnak tadott szvegrsz bekerl az IIS naplfjljba (teht nem az Esemnynaplba!). A
szveg nem tartalmazhat vesszt, mert a naplfjl egyes mezit vesszk vlasztjk el, s ez
megzavarhatn a naplk ksbbi feldolgozst. A bejegyzs csak akkor kerl be a naplba, ha az
IIS naplzs belltsai kztt bekattintottuk az URI Query mezt. Bnjunk vatosan ezzel a
lehetsggel. Ha az IIS naplja W3C vagy NCSA formtumban kszl, az ltalunk tadott
szveg a naplban a krt URL helyn (W3C formtum esetn), vagy ahhoz hozzfzve (NCSA)
jelenik meg. Ennek nyilvnvalan sok rtelme nincsen, ezrt javaslot a kvetkez alternatva,
hogy az ilyen bejegyzseket rjuk inkbb szvegfjlba, vagy ha mindenkppen ennl a
megoldsnl akarunk maradni hasznljuk a Microsoft IIS naplformtumot.

Felhasznlazonosts nvvel s jelszval


A webkiszolgl tartalmnak elrst sokszor korltozni szeretnnk. Elfordulhat, hogy bizonyos
adatokhoz val hozzfrs eltt szksg van a felhasznlk azonostsra. A HTTP
termszetesen magban hordozza ennek lehetsgt is. Elszr is, a bngsz egy hagyomnyos
krst kld a kiszolglnak. Amikor az alaprtelmezett anonymous felhasznl (aki az IIS esetn
egybknt megfelel az IUSR_szmtgpnv felhasznlnak) nem jogosult egy krt erforrs
elrsre, a kiszolgl egy 401 Unauthorized zenettel vlaszol:
HTTP/1.1 401 Unauthorized
Server: Microsoft-IIS/5.0
Date: Mon, 05 Feb 2001 21:05:25 GMT
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="localhost"
Content-Length: 0
Content-Type: text/html
Cache-control: private
A lnyeg mindenekeltt, termszetesen a 401-es kd HTTP vlaszzenet, ami azt jelzi az
gyflnek, hogy a hozzfrst megtagadtuk. A WWW-Authenticate HTTP fejlcek a lehetsges
felhasznlazonostsi mdszereket jelzik. Ezekbl termszetesen tbb is van, br az Internet
Explorer kivtelvel szinte mindegyik bngsz csak a Basic azonostst ismeri. A Basic
azonostssal viszont kt nagy baj van:
1. A Basic felhasznlazonosts sorn a jelsz kdolatlanul utazik a hlzaton mindaddig, amig
valamilyen kiegszt megoldssal (pl. https://) ezt t nem hidaljuk
2. Az IIS5 alaprtelmezsben nem engedlyezi a Basic tpus azonostst; ez termszetesen azt
jelenti, hogy az Internet Explorer-en kvl ms bngszvel csak az anonymous ltal egybknt
is elrhet oldalakhoz frhetnk hozz.
Alaprtelmezs, hogy felhasznlazonostsra akkor van szksg, ha az anonymous felhasznl
hozzfrsi jogai egy adott feladathoz mr nem elegendk. Felhasznlazonostst teht
legegyszerbben gy knyszerthetnk ki, ha az NTFS fjlrendszerre teleptett IIS knyvtra alatt
(ez az \inetpub\wwwroot) a kvnt fjlo(ko)n vagy knyvtr(ak)on korltozzuk az
IUSR_szmtgpnv felhasznl hozzfrsi jogait. Az IIS ilyenkor automatikus
felhasznlazonostsba kezd, s csak akkor engedi be a felhasznlt, ha t a megadott jelsz
segtsgvel a felhasznli adatbzisban sikeresen azonostotta. Ha ezt nem akarjuk, az
azonostst krhetjk kdbl is: mint mr tudjuk, a felhasznlazonostst tulajdonkppen egy
401-es kd HTTP vlaszzenet vltja ki. Vajon mi trtnik, ha a Response.Status segtsgvel
mi magunk kldjk vissza ezt az zenetet, valahogy gy:
<% Response.Status = "401 Unauthorized" %>
A sttuszzenet mell az IIS automatikusan mellkeli a megfelel WWW-Authenticate mezket
s elvgzi helyettnk a felhasznlazonostst. A felhasznl neve, jelszava (ha elrhet) s a
felhasznlazonosts tpusa brmikor megtallhat a ServerVariables kollekciban:
Request.ServerVariables("AUTH_TYPE")
Request.ServerVariables("AUTH_USER")
Request.ServerVariables("AUTH_PASSWORD")
A jelsz csak akkor lthat, ha a tpus basic; ms esetekben az AUTH_PASSWORD mez
rtke res. Ha nem volt felhasznlazonosts (pl. mert anonymous mdon rtk el az adott
scriptet), az AUTH_USER rtke is res lesz. Lssunk ezutn egy pldt, ami
felhasznlazonostst kr, majd ha az sikeres volt (azaz ha az IIS a Windows 2000/NT
felhasznli adatbzisban a felhasznlt megtallta), kirja a fenti adatokat:
<%
If Request.ServerVariables("AUTH_USER")="" Then Response.Status = "401 Unauthorized"
Response.End
End If
%>
<HTML>
<HEAD><TITLE>User LogOn Page</TITLE></HEAD>
<BODY>
AuthType: <% = Request.ServerVariables("AUTH_TYPE") %><BR>
Username: <% = Request.ServerVariables("AUTH_USER") %><BR>
Password: <% = Request.ServerVariables("AUTH_PASSWORD")%>
<BR>
</BODY>
</HTML>
A fenti kd els rsze ellenrzi, hogy a felhasznl azonostotta-e mr magt. Ha nem (a felhasznlnv res),
visszakldi a sttuszzenetet, majd befejezi az oldal vgrehajtst. Miutn a felhasznl bejelentkezett, a vezrls
mr eljut a valdi tartalomhoz: kirjuk a felhasznlazonosts tpust, a nevt s jelszavt. rdemes megfigyelni,
hogy a klnfle bngszk s azonostsi mdszerek hogyan befolysoljk az adatokat: Basic azonosts esetn
pldul lthat a jelsz, mg a Negotiate mdon azonostott felhasznl nevben benne van a tartomny neve is (a \
jel eltti rsz).

A Request kollekcik
A Request objektum lehetv teszi, hogy a klnbz kollekcikban tallhat adatokat a forrs
megadsa (pl. Request.Form(nev)) nlkl, kzvetlenl a Request(nev) hvssal rjk el.
Ilyenkor az IIS az sszes kollekcin vgigfut, s visszaadja az adott nev elem els elfordulst.
A sorrend a kvetkez:
QueryString
Form
Cookies
ClientCertificate
ServerVariables
Nha hasznos lehet, de ltalban nem j, ha ezt a kzvetlen hivatkozst hasznljuk: egyrszt,
feleslegesen terheljk vele a kiszolglt, msrszt pedig, nem lehetnk biztosak abban, hogy az
adat onnan jtt, ahonnan mi vrtuk. Kpzeljk el, hogy egy krdv nv mezjt szeretnnk
beolvasni, ehelyett azt kapjuk, amit a felhasznl kzzel begpelt az URL vgre!

Az ASP alkalmazs s munkamenet


Lssuk csak jra az elz szmban bemutatott brt az IIS objektumhierarchijrl:

Jl lthat, hogy az eddig trgyalt objektumok, a Request s a Response mindig egy aktulis
HTTP krst s az arra adott vlaszt jelkpezik. A kvetkez krs esetn mindkt objektumbl
j keletkezik. A kvetkezkben az alkalmazs (Application) s a munkamenet (Session)
objektumokrl lesz sz. Ezek az objektumok mr nem tnnek el ilyen egyknnyen az IIS
memrijbl, hiszen feladatuk pontosan az, hogy tbb krst is tfog mveleteket, kzponti
adattrolst tegyenek lehetv.

Az ASP munkamenet
Az ASP munkamenet (Session) clja teljesen hasonl, csakhogy ez az Application-nel ellenttben
nem felhasznlk kztti, hanem egy adott felhasznl mveletei fltti globlis objektum. Ha
gy tetszik, szmos Request s Response fltt uralkod valami, ami megmarad egszen addig,
amig a felhasznl el nem hagyja a webhelyet, vagy be nem csukja a bngszjt. Termszetesen
Session objektumbl mr nem csak egy van: ahny felhasznl, annyi Session. Az IIS egy kis
cookiet kld minden felhasznlnak, akit azutn felismer mindaddig, amig a cookie megmarad
(mrpedig az csak addig marad meg, amig a bngszt be nem zrjuk). Nzzk csak meg, mit
mond az IIS egy teljesen tlagos krsre:
GET /default.asp HTTP/1.1

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Mon, 12 Feb 2001 22:21:53 GMT
Content-Length: 2354
Content-Type: text/html
Set-Cookie:ASPSESSIONIDGQGQGVDQ=IBGLAICAJDOELPGDLNDPODPM;path=/Cache-
control: private

Kapunk egy rdekes nev cookie-t: az (egybknt vltoz) ASPSESSIONIDxxxxxxxx nev


cookie tartalmnak segtsgvel az IIS egyrtelmen azonostja a visszatr bngszt, s
ugyanabba a krnyezetbe helyezi (azaz, mindenki az els ltogatskor rszre ltrehozott,
klnbejrat Session objektumba pottyan). Termszetesen kell, hogy legyen egy bizonyos
idkorlt is: ha valaki 20 percen bell nem jelentkezik, a rszre ltrehozott Session objektum
elveszik, s legkzelebb jra tiszta lappal indul. Ez az idkorlt is bellthat. s akr oldalanknt
is kikapcsolhatjuk, az oldal tetejre rt ASP direktva segtsgvel:
<%@ENABLESESSIONSTATE="False"%>

A Session objektum
A Session.SessionID jellemz visszaadja a Session azonostjt. Ez az azonost sokszor j
szolglatot tehet, hiszen segtsgvel azonostani lehet a visszatr felhasznlt. (Mieltt valaki
flrerten: visszatr alatt most azt rtjk, aki a Session idkorlt lejrta eltt visszatr, vagy
azalatt barangol oldalainkon). A Session.LCID s a Session.CodePage jellemzk a szoksos
locale s karaktertbla-azonostk; az objektum negyedik, s egyben utols jellemzje pedig a
Session.TimeOut, amit tlltva egy adott munkamenet erejig fellbrlhatjuk az alaprtelmezett
20 perces idkorltot. Sokkal rdekesebb ennl az, amire a Session objektumot eredetileg
kitalltk: rhatunk bele s olvashatunk belle, gyakorlatilag brmit; a belert rtk pedig
termszetesen megmarad mindaddig, amg az objektum letben van. Lssuk, hogyan trolhatunk
el egy rtket, hogy azutn ksbb felhasznlhassuk:
Session("counter") = 1
Session("counter") = Session("counter") + 1
x = Session("counter")
A Session.Contents egy kollekci, aminek segtsgvel visszanyerhetjk mindazt, amit sikerlt az
objektumba belaptolnunk (anlkl, hogy tudnnk a nevt), valahogy gy:
For Each oItem In Session.Contents
Response.Write(Session(" & oItem & ") = " & Session(oItem) & "<br>" )
Next
Ebbl a kollekcibl persze trlni is lehet. Az albbi plda els kt sora egy-egy elemet (pl. a
counter nevt, vagy ppen a msodikat), mg a harmadik a teljes tartalmat trli:
Session.Contents.Remove("counter")
Session.Contents.Remove(2)
Session.Contents.RemoveAll()
A tartalom teht ilyenkor elveszik, de az objektum megmarad. Azrt fontos ezt megemlteni, mert
a Session objektumot nmagt is lehet trlni:
Session.Abandon()
A Session.Abandon() hvs utn (termszetesen miutn az adott oldalt mr vgleg kikldtk) a
Session objektum trldik a memribl. A felhasznl legkzelebbi jelentkezsekor j, res
objektum jn majd ltre. Termszetesen nem csak szmot s szveget trolhatunk a Session-ben,
hanem akr komplett objektumokat is. Valahogy gy:
<%
Set oStream = Server.CreateObject("ADODB.Stream")
oStream.Type = 1 ' adTypeBinary
oStream.Open
oStream.LoadFromFile( Server.MapPath("ms.jpg") )
Set Session("mypic") = oStream
%>
A kiolvass kd,a mi kiolvassa kpet s elkldi a bngsznek:
<%
If IsObject( Session("mypic") ) Then
Set oStream = Session("mypic")
Response.ContentType = "image/jpeg"
Response.BinaryWrite( oStream.Read )
Else
%>
<HTML><HEAD></HEAD>
<BODY>A kp nem tallhat.</BODY>
</HTML>
<%
End If
%>
A kd elejn tallhat ellenrzs azrt kell, mert ha a Session(mypic) nem tartalmazza mg az
objektumot, akkor az rtkads azonnal hibt jelezne. Az IsObject() fggvny rtke akkor igaz,
ha a neki paramterknt tadott vltoz tnyleg egy objektum ha nem az, a kp helyett egy
egyszer HTML hibazenetet kldnk vissza. Figyeljk meg, hogy az objektumok kezelsnl
a ms tpus vltozkkal ellenttben hasznlnunk kell a Set utastst:
Set oStream = Server.CreateObject("ADODB.Stream")
Set Session("mypic") = oStream
Set oMyObj = Session("mypic")

A global.asa fjl
A global.asa fjl tulajdonkppen az Application objektum lersnl kellene, hogy elkerljn. A
fjl azonban tartalmazhat a Session objektumra vonatkoz rszeket is, ezrt a trgyalstl nem
tekinthetnk el. A global.asa fjl egy specilis llomny, amit az ASP alkalmazs
gykrknyvtrban lehet elhelyezni (az alaprtelmezett ASP alkalmazs gykrknyvtra
pldul termszetesen az \inetpub\wwwroot). A fjl arra val, hogy ebben helyezhessk el a
globlis objektumokat ltrehoz s esemnyeket kezel kdrszleteket, gyismint:
Az Application objektum esemnyeit (ltrehozst, megsemmistst) kezel rutinok
(Application_OnStart s Application_OnEnd)
A Session objektumok ltrehozst s megsemmistst kezel eljrsok (Session_OnStart s
Session_OnEnd)
Globlis objektumok ltrehozsa az <OBJECT> elem segtsgvel
Tpusknyvtrak (type libraries) betltse
A Session_OnStart szubrutin rtelemszeren az adott Session ltrejttekor, a Session_OnEnd
pedig az objektum megsemmislse eltt fut le. Ezeket a rutinokat a global.asa fjlba
<SCRIPT></SCRIPT> elemek kz kell megrnunk, pldul:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnStart
Session("starttime") = Now
Set Session("oFSO") = Server.CreateObject("Scripting.FileSystemObject")
End Sub
Sub Session_OnEnd
Set Session("oFSO") = Nothing
End Sub
</SCRIPT>
A fenti pldban a Session ltrejttekor belerjuk a pontos idt, s ltrehozunk egy
FileSystemObject objektumot, amit a tovbbiak sorn majd knyelmesen hasznlhatunk, a
Session_OnEnd szubrutinban pedig felszabadtjuk az FileSystemObject objektum ltal lefoglalt
memriaterletet. Objektumokat globlisan is ltrehozhatunk, az <OBJECT> elem segtsgvel,
pldul:
<OBJECT RUNAT=Server SCOPE=Session ID="oGlobFSO"
PROGID="Scripting.FileSystemObject">
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
...
</SCRIPT>
Az gy ltrehozott objektumokra azutn alkalmazsszerte a .asp oldalakban kzvetlen nevkkel
hivatkozhatunk:
<%
If oGlobFSO.FileExists(strFileName) Then
...
End If
%>
Az <OBJECT> elem SCOPE paramtere hatrozza meg, hogy az objektum hny pldnyban
jjjn ltre. A paramter rtke esetnkben termszetesen session, ami azt jelenti, hogy minden
egyes Session ltrejttekor jabb FileSystemObject keletkezik. A StaticObjects kollekci
Egyetlen kollekci maradt a vgre: a Session.StaticObjects kollekci a global.asa-ban session
scope-pal ltrehozott objektumokat tartalmazza. A kollekci tartalmt a szoksos mdon rhetjk
el:
For Each oItem In Session.StaticObjects
Response.Write( "Session(" & oItem & ") = " & Session(oItem) & "<br>" )
Next

Az ASP alkalmazs
Egy ASP alkalmazs tulajdonkppen nem ms, mint egy adott knyvtrban s az sszes
alknyvtrban tallhat .asp kdok halmaza. Csakhogy a valsgban ennl kicsit bonyolultabb a
helyzet, hiszen ha csak errl lenne sz, nem lett volna szksg az alkalmazsok ltrehozsra.
Mint tudjuk, a HTTP eredetileg llapotmentes vilg: jn egy krs, mi kiszolgljuk, azutn jn a
kvetkez, s a kiszolglnak vglis fogalma sincs arrl, hogy melyik krst ppen ki kldte.
Lehet, hogy ugyanaz a felhasznl, lehet, hogy a vilg kt vgrl kt olvas jelentkezett. Mgis,
milyen j lenne, ha lenne egy globlis valami, amiben adatokat, st, akr ksz objektumokat
trolhatunk, s brmikor szksg van r, csak fel kell nylnunk rte, s hopp, mris a
rendelkezsnkre ll! Nos, pontosan erre val az Application objektum. Segtsgvel a
felhasznlk, krsek kztt adatokat oszthatunk meg egyszeren, anlkl, hogy pldul lemezre
kellene rnunk azokat. Az Application objektumba rt informci mindaddig megmarad, amg az
adott alkalmazst (gyakorlatilag az IIS-t) jra nem indtjuk. Amint az brn is lthat, az ASP
alkalmazs egy globlis objektum a felhasznlk krsei s az azokra adott vlaszok fltt.
Fontos, hogy Application objektum minden ASP alkalmazsban csak egy van.
Egy Applicationhoz vlaszthat futtatsi jogosultsgok:
None: Csak statikus mkds engedlyezett. Scriptek s programok nem futtathatk. Ezt
hasznljuk akkor, ha nem hasznlunk aktv komponenseket
Scripts only: Scriptfjlok vgrehajtsa engedlyezett, de klnll programok tovbbra sem
futtathatk. Ez az alaprtelmezett s ajnlott bellts
Scripts and Executables: A legveszlyesebb, CGI-kompatibilits miatt megtartott opci.
Ilyenkor a scriptek mellett a knyvtrakban tallhat programok is lefuthatnak.

Az alkalmazs vdelme
A meghatrozs tulajdonkppen hibs, ugyanis nem a webalkalmazsunkat, hanem magt az IIS-t
vdjk a sajt a tbbi webalkalmazstl). Hogy mirt kell ez a vdekezs? A webalkalmazsok
sajt tjaikat jrjk. Az esetek tbbsgben (pldul .dll fjlokban megrt) kls komponenseket
hasznlnak, hibtlan program pedig, mint tudjuk, nincsen. A .dll-ek kzismert tulajdonsga, hogy
a szlprocessz cmtartomnyba tltdnek be, s ha a .dll kszl elhallozni, a szlprocesszt is
magval rntja. gy lehet egyetlen .dll segtsgvel a nullval egyenlv tenni a webkiszolglt.
Pontosan az ilyen esetek elkerlsre talltk ki az alkalmazsok vdelme (Application
Protection) opcit. Egy (.dll-eket tltget) webalkalmazs (kvzi maga a .dll) hrom mdon
tltdhet be:
(Low): az IIS processzbe. Ez gyors, de veszlyes mkdst eredmnyez, hiszen ha a .dll
kipukkan, megy vele az IIS is.
(Medium Pooled): egy, az IIS processztl elvlasztva fut processzbe. A processz neve
dllhost.exe, megleshetjk a Task Managerben. Minden Medium szint webalkalmazst
ugyanaz a dllhost.exe futtat, teht ha a tbb Medium szint alkalmazsbl egy elhasal,
magval rntja a tbbit is az IIS viszont talpon marad. Ez az alaprtelmezs, mert
viszonylag biztonsgos, s nem ignyel sok erforrst.
(High Isolated) A High szintre helyezett webalkalmazsok mindegyike sajt dllhost.exe-t
kap, amibe annyira s annyiszor rghat bele, ahnyszor csak akar, nmagn kvl senkinek
sem rthat vele. Akit rdekel, kiprblhatja: nyisson meg egy Task Manager-t, lltsa a fut
processzeket nv szerint sorba, s megltja, hogy n darab dllhost.exe fut. Majd lltson egy
webalkalmazst High szintre, s nyisson meg egy oldalt belle: a fut dllhost.exe-k szma
n+1- re n (az Unload hatsra pedig rtelemszeren eggyel cskken). Ez a
legbiztonsgosabb megolds, de a gyakori kontextusvlts miatt sok erforrst ignyel, ezrt
a Microsoft nem ajnlja, hogy egy kiszolglra 2-3-nl tbb ilyen szint alkalmazs kerljn.

Az Application objektum
Az Application objektum teht nem ms, mint egy kzs trolhely, amit az adott webalkalmazs
minden scriptje elr. Az Application objektumban adatokat, objektumokat trolhatunk el, hogy
majd ksbb kiolvassuk onnan (csakgy, mint a Session objektumnl):
Application("counter") = 12
Set Application("myObject") = oMyObject
Set oMyObject2 = Application("myObject")
Amint az a fenti pldban is lthat, az Application objektumban is trolhatunk ms
objektumokat. Nem szabad elfelejtkezni azonban kt nagyon fontos dologrl:
Az objektumokat Set rtkads segtsgvel kell az Application objektumba betlteni, s a
kiolvassuk is a Set parancs segtsgvel trtnik.
Nem minden objektum alkalmas arra, hogy az Application objektumba tltsk! Az IIS
ugyanis tbbszl alkalmazs, egyidben tbb felhasznlt szolgl ki. Az Application
objektumba csak olyan objektumokat tlthetnk be, amelyek tbbszl (FreeThreaded)
vgrehajtsi mdban kpesek mkdni s gynevezett Both threading-modellt alkalmaznak.
Az albbi plda az Application objektumot hasznlja egy primitv szmll ltrehozshoz:
<%
Application.Lock
Application("count") = Application("count") + 1
Application.Unlock
Response.Write("dv! Te vagy az IIS jraindtsa ta a(z) " & Application("counter") &
ltogat.")
%>
A plda a valsgban azrt hasznlhatatlan, mert a webalkalmazs jraindulsnak pillanatban
reboot vagy unload esetn az Application objektum tartalma, ezzel pedig a szmll rtke is
elveszik. Az els s a harmadik sorban lthat Application.Lock() s Application.Unlock()
metdus hasznlatra azrt van szksg, mert az Application globlis objektum, s elfordulhat,
hogy egyszerre tbb felhasznl szeretn rni ugyanazokat az adatokat. Az tkzsek elkerlse
vgett minden rsmvelet eltt az objektumot zrolni kell, majd a lehet legrvidebb idn bell
az Unlock() metdus segtsgvel fel kell oldani, ugyanis mg az Application objektum zrolva
van, senki ms nem frhet hozz, mint az, aki eredetileg zrolta azt. Ha mi nem oldannk fel a
zrolst, az IIS az oldal vgrehajtsa utn, de legksbb a scriptfuttats idtllpsekor
felszabadtja azt. Termszetesen az Application objektum tartalmt is elrhetjk kollekcikon
keresztl, erre szolgl az Application.Contents kollekci:
For Each oItem In Application.Contents
Response.Write(Application(" & oItem & ") = " &Application(oItem) & "<br>" )
Next
Ebbl a kollekcibl is pontosan ugyangy lehet trlni elemeket, mint a Session-bl:
Application.Contents.Remove("counter")
Application.Contents.Remove(2)
Application.Contents.RemoveAll()
Az els sor a "counter" rtkt, a msodik sor az Application objektumon belli msodik
vltozt, mg a legutols sor az Application objektum teljes tartalmt trlte. Az
Application.StaticObjects kollekci a global.asa fjlban az <OBJECT> elem segtsgvel,
Application scope-ban ltrehozott vltozkat tartalmazza. A kollekci pontosan gy
hasznlhat, mint az Application.Contents:
For Each oItem In Application.StaticObjects
Response.Write(Application(" & oItem & ") = " &Application(oItem) & "<br>" )
Next
Az egyetlen klnbsg az, hogy ebbl a kollekcibl nem trlhetnk elemeket (azok elvesznek
maguktl a webalkalmazs jraindtsakor).

A global.asa fjl mgegyszer


Mint azt mr a Session objektum ismertetsekor rviden lertam, a global.asa fjl egy specilis
llomny, amit az ASP alkalmazs gykrknyvtrban kell elhelyezni (de a hasznlata nem
ktelez). A fjl arra val, hogy ebben helyezzk el a globlis objektumokat ltrehoz s
esemnyeket kezel kdrszleteket, gyis mint:
az Application objektum esemnyeit (ltrehozst, megsemmistst) kezel rutinok
(Application_OnStart s Application_OnEnd)
a Session objektumok ltrehozst s megsemmistst kezel eljrsok (Session_OnStart s
Session_OnEnd)
globlis objektumok ltrehozsa az <OBJECT> elem segtsgvel
tpusknyvtrak (type libraries) betltse
A global.asa fjlban tallhat rutinokat <SCRIPT></SCRIPT> elemek kz kell
elhelyezni. A statikus objektumok ltrehozsra szolgl <OBJECT> elemet a
<SCRIPT> blokkon kvlre kell elhelyezni, mg a tpusknyvtr-defincik a
blokkon kvlre s bellre egyarnt kerlhetnek, de rdemes azt is mr a fjl
elejn, a <SCRIPT> blokkon kvl letudni. Ha a global.asa fjl tartalma
megvltozik, az IIS minden mr megkezdett kapcsolatot kiszolgl, s csak
azok lezrsa utn tlti be az j vltozatot. Ez termszetesen az sszes
Session s az Application objektum lezrst s jbli megnyitst is jelenti.
A global.asa betltse s feldolgozsa sorn az IIS nem fogad j
kapcsolatokat, a felhasznlk ezid alatt csinos kis hibazenettel tallkoznak
(a krs nem szolglhat ki, az alkalmazs jraindul). Esemnyek a
global.asa-ban A global.asa-ban ngy klnfle esemnyt kezel rutint
definilhatunk, ezek az Application_OnStart, Application_OnEnd,
Session_OnStart, s a Session_OnEnd. Lssunk egy mintt:
<SCRIPT LANGUAGE='VBScript' RUNAT='Server'>
Sub Application_OnStart
Application("appstarttime") = Now
End Sub
Sub Application_OnEnd
' ...
End Sub
Sub Session_OnStart
Session("starttime") = Now
Set Session("oFS") = Server.CreateObject("Scripting.FileSystemObject")
End Sub
Sub Session_OnEnd
Set Session("oFS") = Nothing
End Sub
</SCRIPT>
Application_OnStart: a webalkalmazs indulsakor, egyszeri alkalommal fut le.
Application_OnEnd: az alkalmazs lelltsakor fut le, az alkalmazs letben ugyancsak
egyszer
Session_OnStart: Session objektum ltrehozsakor, gyakorlatilag minden j felhasznl
belpsekor hajtdik vgre
Session_OnEnd: ez pedig a Session lezrsakor lp mkdsbe. (pldul ha idtllps vagy
Session.Abandon() hvsa miatt az IIS megsznteti a session-t)
runk az Application objektumba, s mgsem zroljuk eltte, ugyanis ez az esemny egyszer s
csakis egyszer kvetkezik be, mgpedig az alkalmazs lettartama legelejn, amikor msnak mg
eslye sincs az Application objektumhoz hozzfrni. Ez az egyetlen hely, ahol nem ktelez
hasznlni a Lock/Unlock metdust.

Objektumok s tpusknyvtrak
Az objektumok ltrehozsnak mdjt a Session lersnl mr megismertk:
<OBJECT RUNAT=Server SCOPE=Application ID="oGFSO"
PROGID="Scripting.FileSystemObject">
A klnbsg csak annyi, hogy a scope (futsi, ltrehozsi krnyezet) most nem Session, hanem
Application lesz. Ezutn az oGFSO objektumot a webalkalmazs minden scriptjben kzvetlen
hivatkozssal elrhetjk, s az megjelenik az Application.StaticObjects kollekciban is. Nagyon
kell gyelni arra, hogy az Application objektumban csak Both, free threaded objektumokat
troljunk (ha <OBJECT> segtsgvel szeretnnk rossz objektumot ltrehozni, az IIS hibt jelez,
a dinamikus ltrehozsnl viszont nem, ott csak ksbb, a fura mkds sorn derlhet fny a
problmra). A COM objektumok ltalban tpusknyvtrakat is tartalmaznak. Ezekbl a
tpusknyvtrakbl lehet kiolvasni az objektum metdusainak, jellemzinek a listjt, de sokszor
mindenfle konstansokat is. Ha pldul egy fjlt meg szeretnnk nyitni olvassra a
FileSystemObject segtsgvel, a kvetkezt kell rnunk:
Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.OpenTextFile(file.txt", 1)
Ehhez tudnunk kell, hogy az OpenTextFile metdus msodik paramternek 1 rtke az olvasst
jelenti (ForReading). Ha azonban a global.asa tetejn megadjuk a kvetkez defincit:
<!--METADATA TYPE="TypeLib" FILE="scrrun.dll"-->
(az scrrun.dll tartalmazza tbbek kztt a FileSystemObject objektumot), akkor gy is rhatjuk::
Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.OpenTextFile("file.txt",ForReading)
A szmrtk helyett teht hasznlhatk a tpusknyvtrban definilt konstansok, amelyek sokszor
(nagyon sokszor) megknnytik az ember munkjt.

A Server objektum
A Server objektum is egy s oszthatatlan, s fleg knyelmi szolgltatsai miatt hasznos.
Gondoltunk-e mr pldul arra, hogy ezt rjuk ki a felhasznl bngszjbe: Vzszintes vonal:
<HR>. Ha ezt elkldjk a bngszbe, megjelenik a felirat, majd maga a vzszintes vonal,
hiszen a bngsz rtelmezi a kdban tallhat HTML tagot. Ha a HTML elemet magt
szeretnnk megjelenteni, a < jelet &lt; a >-t pedig &gt; entity-vel kell helyettestennk, teht
valahogy gy: Vzszintes vonal: &lt;HR&gt;. Ezen kvl mg sok ms elemet is kdolni kell,
nem beszlve a specilis karakterekrl. Szerencsre itt van a Server.HTMLEncode() metdus,
ami elvgzi ezt a kdolst:
Response.Write( Server.HTMLEncode("Nesze <HR>") )
A HTMLEncode() azrt is nagyon fontos, mert okos hasznlatval elkerlhetjk az gynevezett
Cross Site Scripting hibt. Ezt a fontos biztonsgi hibt az okozza, hogy egyes weboldalak (akr
hibazenet formjban is) vlogats nlkl, s kdolatlanul visszakldenek bizonyos, rszkre
elzleg tadott szvegrszeket.
A msik hasznos kdol metdus a Server.URLEncode(). Mint azt taln mindenki tudja, az
URL-ekben nem szerepelhet akrmilyen karakter. Ami nem megszokott, azt kdolni kell,
ltalban %xx formban, ahol xx a karakter hexadecimlis kdja. (Mg a szkzt is helyettestik,
+ jellel). Ha URL-eket ptnk fel az ASP oldalainkban, mindig hasznljuk ezt a metdust is.
A Server.MapPath() nagyon gyakran hasznlt metdus. Arra val, hogy a virtulis knyvtr- s
fjlneveket (pl. http://localhost/asp4/default.asp) vals fjlnevekk alaktsa (pl.
C:\inetpub\wwwroot\asp4\default.asp). Ha a MapPath()-nek tadott virtulis nv / vagy \
karakterrel kezddik, akkor a virtulis gykrknyvtrtl, ellenkez esetben pedig a hvs
helytl relatv fjlnevekkel dolgozik (nem lesz ugyanaz az eredmnye teht a default.asp s a
/default.asp kdolsnak kivve ha ppen a gykrknyvtrban llunk). Termszetesen
hasznlhatk a . s .. karakterek, azaz mozoghatunk a virtulis knyvtrak ltal alkotott
trben (a . az aktulis, a .. pedig a virtulis szlknyvtrra mutat). A Server.MapPath()
metdust nem hasznlhatjuk a global.asa Application_OnEnd esemnynek kezelse kzben,
egybknt pedig legynk vatosak, mert a global.asa-ban meghvott MapPath() nem a global.asa,
hanem a felhasznl ltal megnyitni kvnt fjl alapjn dolgozik.
A Server.ScriptTimeOut belltsval a scriptek idtllpsnek hatrt nvelhetjk meg (ez az
rtk nem lehet alacsonyabb, mint a tulajdonsglapokon belltott alaprtelmezs), illetve
krdezhetjk le.
A Server.Transfer() s a Server.Execute() kt, az IIS5-ben j szolgltats. A Server.Transfer()
metdus egyszeren tadja a vezrlst az alkalmazsban tallhat msik .asp kdnak. Minden
tvett adat megmarad, tbbek kztt a Request objektum teljes tartalma is. A Server.Transfer()
kivlthatja a Response Redirect() hasznlatt, mert ehhez nincs szksg a bngsz
kzremkdsre (s gy felesleges hlzati forgalomra). Termszetesen ez a megolds csak
akkor mkdik, ha webkiszolgln bell szeretnnk tirnytani a felhasznlt. A
Server.Execute() szubrutinszeren vgrehajtja az adott oldalt, majd a vgrehajts befejezsre utn
visszatr az eredetihez (mintha csak beszrtuk volna a kdot). Ennek elnye az <!-- include -->
kittellel szemben az, hogy itt akr dinamikusan is generlhatjuk a futtatand oldal nevt.
A Server.GetLastError() visszaadja az utols ASP hibnak adatait tartalmaz ASPError
objektumot.
Vgl, de egyltaln nem utolssorban: a Server.CreateObject() metdus ltrehoz egy adott
objektumot. Ezt mr nagyon sokat hasznltuk, anlkl, hogy tudtuk volna, pontosan mit jelent.
Ha a ltrehozott objektum tartalmaz OnStartPage metdust, azt is meghvja. A
Server.CreateObject() mellett objektumok ltrehozsra hasznlhatnnk egyszeren a
CreateObject() hvst is. Ez utbbi nem az IIS, hanem a scriptmotor szolgltatsa, ezrt
hasznlata az ASP oldalakban nhny kivteltl eltekintve nem ajnlott. Az objektum addig
marad letben, amg azt nem trljk, illetve az ASP oldal vgrehajtsa vget nem r. Ha az
objektumot a Session vagy Application objektumba tltttk, akkor az objektum lete csak az
adott Session vagy Application objektum megsznsekor r vget. Egy ltrehozott objektumot
gy trlhetnk, ha a vltoznak ms rtket adunk (akr szveget is, de elterjedt s szp
megolds a Nothing):
Ltrehozzuk:
Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
Megszntetjk:
Set oFSO = Nothing

Naplzs az esemnynaplba
Ezeltt bemutattuk a Response.AppendToLog() metdust, amelynek segtsgvel rni lehet az IIS
szveges napljba. Az ilyen bejegyzsek feldolgozsa viszonylag nehzkes, radsul ha mg
emlksznk vannak olyan naplformtumok is, amikor ez a mdszer nem vezet eredmnyre.
Szerencsre a Windows Scripting Host-nak ksznheten a feladatot sokkal elegnsabban is
megoldhatjuk. A Windows Scripting Host (s vele egytt termszetesen a teljes WSH
objektummodell) mr az Option Pack 4-gyel bekerl(hetet)t a Windows NT 4.0-ba, s azta
termszetesen a Windows 2000 scriptprogramozsnak lelkt kpezi. A WSH objektummodelljt
szerencsre ASP oldalakbl is elrhetjk A WScript.Shell objektum LogEvent() metdusa
lehetv teszi, hogy belekontrkodjunk a Windows NT/2000 esemnynapljba. (Windows 9x
esetn a bejegyzsek a Windows knyvtrban, a wsh.log fjlban jnnek ltre). A LogEvent()
metdus hrom paramtert vr, amibl az els kettt ktelez megadni, a harmadiknak pedig
csak Windows NT/2000-n van rtelme:
A bejegyzs tpusa (0: Success, 1: Error, 2: Warning, 4: Information, 8: Audit Success, 16:
Audit Error)
A bejegyzs szvege
Opcionlisan a Windows NT/2000 szmtgp neve, ahol a bejegyzst ltre kell hozni
(termszetesen csak a megfelel jogosultsgok meglte esetn)
<%
Set oShell = Server.CreateObject("WScript.Shell")
oShell.LogEvent 0, "Hello from ASP!"
oShell.LogEvent 1, "ERROR from ASP!"
oShell.LogEvent 2, "Warning from ASP!"
oShell.LogEvent 4, "Info from ASP!"
oShell.LogEvent 8, "Audit Success from ASP!"
oShell.LogEvent 16, "Audit Error from ASP!"
Set oShell = Nothing
%>
A fenti pldban a Server.CreateObject() metdus segtsgvel ltrehoztunk egy Shell
objektumot, elksztettnk nhny bejegyzst, majd j kiscserksz mdjra kitakartottunk
magunk utn (az objektumvltoz rtkt Nothing-ra lltva felszabadtjuk az objektum ltal
lefoglalt erforrsokat). A generlt naplbejegyzsek (az audit log is) az esemnynapl
Application Log-jba kerlnek, a Source mezben a WSH felirat szerepel. Ha a bejegyzst
megnyitjuk, a lers mezben lthatjuk az ltalunk megadott szveget.

Specilis karakterek a HTML kdban


Trjnk vissza kicsit a HTML s ASP mezsgyjhez. A HTML dokumentumokban a klnleges
karaktereket specilis mdon, gynevezett entity-k segtsgvel rtk le. A (kalapos) hossz
kdja pldul &ucirc; a (hullmos) hossz pedig &otilde;. Sokan a mai napig hasznljk ezt a
kdolst, pedig egyrszt hossz, knyelmetlen, msrszt pedig felesleges. A bngszk mr
rgta kpesek feldolgozni a klnfle kdtblkban rt HTML dokumentumokat azokba pedig
egyszeren csak bele kell rni a betket. Itt jegyeznm meg, hogy bizonyos jeleket mg mindig
rdemes entity-k segtsgvel lerni. Ilyen pldul a (&trade;), a (&copy;),az (&reg;),
illetve a matematikai jelek, s ms specilis karakterek (&euro; &yen; &frac12; &sect;). Ha egy
bngszben megkeressk az Encoding vagy Character Set menpontot, lthatjuk, hogy mely
kdtblkat kpes felismerni s hasznlni. A HTML oldal kdjban pedig a kszt megadhatja a
hasznlt kdtbla azonostjt, az oldal nyelvt, de ha ez elmarad, akkor is van r esly, hogy a
bngsz helyesen ismeri fel azt.

rvztr tkrfrgp
A fenti mondat tartalmazza az sszes specilis magyar bett:
<html>
<head></head>
<body>
rvztr tkrfrgp - RVZTR TKRFRGP
</body>
</html>
Ha ezt az oldalt megjelentjk, a bngsz a kdtbla megadsa hjn megprblja felismerni a
hasznlt vltozatot. Ha gy dnt, hogy nyugat-eurpai kdolst vlaszt, jnnek a kalapos
kezetek. (Az ppen hasznlt kdtblt az Encoding menben lthatjuk kivlasztva. Ha ezt kzzel
mdostjuk, a kdols helyrell.) A tallgatsok elkerlse rdekben a bngszt kifejezetten
utasthatjuk egy adott kdtbla hasznlatra:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body>
rvztr tkrfrgp - RVZTR TKRFRGP
</body>
</html>
A lnyeg az gynevezett Content-Type fejlcben van, ahol nemcsak az oldal HTML mibenltt
hatrozzuk meg, hanem a hasznlt kdtblt is. ASP-ben hasznlhatjuk a mr emltett
Response.Charset tulajdonsgot. Ha azt hasznljuk, ugyanezt a hatst rjk el, mikzben az ASP
oldalon bell elkerlhetjk a META elem hasznlatt :
<% Response.Charset = "iso-8859-2" %>
<html>
<head></head>
<body>
rvztr tkrfrgp - RVZTR TKRFRGP
</body>
</html>

Tovbbi META elemek


Ha mr itt tartunk, felsorolnk nhny, eddig mg nem emltett hasznos metainformcit, amit a
weboldalakba gyazva klnfle hatst rhetnk el.
<META name="author" content="X Y">
<META name="date" content="12/27/02">
<META name="description" content="ASP">
<META name="keywords" content="ASP">
<META name="robots" content="noindex, nofollow">
<META http-equiv="Content-Language" content="hu">
A fenti informcik nagy rsze egyelre igazn csak a webes keresk szmra rdekes. Az author
(szerz), date, keywords, description mezk tartalmt a jobb keresk feldolgozzk, keress sorn
a keywords mezben megjelen kulcsszavak pldul nagyobb sllyal brnak, mint a dokumentum
szvegbl kivonatolt minta. A description mez rtkt a keressre adott vlaszban szoks
megjelenteni. Ha oldalunk tartalmaz ilyen mezt, akkor a rvid lers nem a dokumentum els
nhny sora lesz, hanem a description-knt megadott szveg. A robots metaelem a keresk
feldert-egysgeinek (ezek a robotok) mkdst szablyozza, a noindex rtk arra utastja a
robotot, hogy az oldalt ne indexelje, ne trolja az adatbzisba, a nofollow pedig azt jelenti, hogy
az oldalon tallhat hivatkozsokat nem kell kvetni. A legfontosabb mgis a Content-Language,
ami nem is metainformci, hanem HTTP fejlc. rtke a dokumentum nyelvre utal rvidts,
magyar esetn termszetesen a hu.

Kdtblk
A klnfle kdtblk hasznlata azonban nem oldott meg minden gondot. Nem nagyon
hasznlhatunk egy dokumentumon bell tbb kdtblt (a HTML codepage fejlc az egsz
dokumentumra vonatkozik). Ennl is nagyobb gond az, hogy a legtbb tvol-keleti nyelv
tbbezer klnbz karaktert tartalmaz, ezt pedig nehezen lehet lerni egy 8 bites azonostval.
Ezeken a terleteken termszetesen 16 bites kdtblk alakultak ki, ahol egy jelet kt bjt hatroz
meg. Persze ilyen kdtblbl is tbb fajta ltezik, ezrt kzenfekv volt, hogy a kdtblk
kztti koszt szablyozni kell. Tbb vezet szmtstechnikai, informatikai cg, nyelvszek,
knyvtrosok szervezetei, s mg sokan msok ezrt megalaptottk a Unicode Consortiumot. A
szervezet clja az volt, hogy olyan szablyrendszert dolgozzanak ki, amivel vgre egysgesen le
lehet rni a vilgon beszlt (s mr vagy mg nem hasznlt) sszes nyelv minden karaktert,
grafikai szimblumokat, nyelvi elemeket. A Unicode szerint is minden karaktert kt bjt azonost,
gy 65535 klnbz jel lersra van lehetsg. A tblzat mg napjainkban is frissl, st, van
olyan terlete is, ahova mi magunk definilhatunk karaktereket (a 0xE000-tl 0xF8FF-ig). Ha
van kznl egy Windows 2000, eudcedit.exe! A Unicode azonban nem kdolsi szabvny. A
karakterek ktbjtos rtkt tbbflekppen is felhasznlhatjuk a dokumentumokban. Tbbfle
kdolsi md terjedt el, termszetesen mindegyik alapja maga a Unicode tblzat. Az egyik
mdszer szerint a dokumentum minden egyes karaktert kt bjton brzoljk, ezzel
termszetesen megduplzva a mrett. Az alternatv kdolsi mdok kzl az UTF-7 s az UTF-
8 terjedt el, ezek kzl az UTF-8 lett a gyakoribb.

Az UTF-8 kdols
Kdols, s nem kdtbla, hiszen itt mr sz sincs tblrl. Kdtblaknt maga a Unicode
funkcionl. Lssuk, mit tud az UTF-8. Ebben a kdban egy karakter kdjnak hossza 1 s 3 bjt
kztt mozog. Az ASCII karaktereket, teht az els 127 jelet hagyomnyosan, egy bjton
kezeljk. Ennek ksznhet, hogy az UTF-8 dokumentumok, ha nem tartalmaznak tl sok extra
karaktert, emberi szemmel mg jl olvashatk. A 128 feletti rtkek mr nem frnek el egy
bjton, ezrt azok esetn mr hosszabb lerra van szksg. Mirt nem fr bele az els bjtba 255
karakter? Ht azrt, mert akkor nem tudnnk megklnbztetni a 0x6161-es kdot a 0x61 0x61-
tl. Ezrt aztn, ha egy UTF-8 bjt rtke:
0x00-0x7F: az egybjtos ASCII karakter kdja
0x80-0xBF: tbb-bjtos rtk tovbbi bjtjai
0xC2-0xDF: ktbjtos rtk els bjtja
0xE0-0xEF: hrombjtos rtk els bjtja
Teht minl messzebb van a Unicode tblban egy karakter, annl hosszabban kell lerni (de
legfeljebb hrom bjton). Ha egy karakter kdja
0x0001-0x007F, akkor 1 bjt (0x01-0x7F)
0x0080-0x07FF, akkor 2 bjt (0xC280-0xDFBF)
0x0800 felett, akkor 3 bjt (0xE0A080-0xEFBFBF)
A tvol-keleten teht az UTF-8 kdols kicsit pocskol, hiszen ott a legtbb hasznlt karakter az
utols tartomnyba esik. A vilg nagy rszn viszont, ahol az rs alapjt valahol mgiscsak a
latin betk kpezik, az UTF-8 sok helyet megsprol. A kdtblk hasznlathoz mindssze egy
dolgunk van: a Control Panel / Regional Settings dialgus General ablaknak aljn piplgassuk
be a megclzott terleteket, s nmi teleptgets utn birtokunkba vehetjk a teljes Unicode
univerzumot.

Lokalizls
Lokalizls alatt nem csak az adott orszg vagy nyelv betkszletnek hasznlatt rtjk, hanem
sok minden mst is. Nhny plda, a teljessg ignye nlkl: dtumformtum, hnapok, napok
nevei, 12/24 rs idszmts, AM/PM helyi elnevezse, a dtum s id elemeit elvlaszt
karakterek, az elemek sorrendje, a fizeteszkz jele s rsnak mdja, a szmok rsnak mdja,
a szmjegyek csoportostsa, a csoportostsra szolgl jel, a tizedesjel, a ht els napja, a
hasznlt naptr, a sorbarendezs alapja, satbbi. Minderre fel kell kszlnnk, amikor lokalizlt
alkalmazst ksztnk, s nincs ez mskpp az ASP alkalmazsok esetn sem. A Windows teljes
mrtkben tmogatja ezeket a lokalizcis megoldsokat, ezrt tulajdonkppen nincsen nehz
dolgunk. Maga a Windows is a Regional Settings lokalizcis belltsai alapjn mkdik, gy
jelennek meg a dtumok, idpontok, szmok, de mg a numerikus billentyzet . gombjnak
jelentse is (magyar bellts esetn ugyanis helyesen nem tizedespontot, hanem
tizedesvesszt r). A GetLocale() fggvny pldul meghvsa utn visszaadja a szmtgpen
hasznlt alaprtelmezett bellts kdjt, a SetLocale() segtsgvel pedig bellthatunk egy ms
rtket. Ha az adott nyelv tmogatsa nincs teleptve, a SetLocale() meghvsa hibt okoz. A
FormatCurrency(), FormatDateTime(), FormatNumber(), FormatPercent() fggvnyek pedig az
ppen rvnyes belltsnak megfelelen ksztik el a fizeteszkz, dtum s id, szm s
szzalkrtkeket (szveges formban, persze).

Hibakezels az ASP oldalban


Az ASP alkalmazsokban fellp hibk rendszerint kellemes hibazenet formjban jelennek
meg a felhasznlnl. Termszetesen nem felttlenl egszsges, ha egy-egy ilyen hibazenet,
esetleg kdrszlet nyilvnossgra kerl, ezrt megvan a mdja annak, hogy mikzben mi a hiba
kezelst vgezzk a felhasznlt megkmljk a knos rszletektl. Az IIS alaprtelmezse
szerint a \winnt\help\iisHelp\common\500-100.asp oldalt hvja meg. Mikzben nyilvn nagyon
hasznos a rszletes hibazenet, les krnyezetben ez nem felttlenl igny. Az ASP scriptek
vgrehajtsa sorn fellp hibk esetn a teendt a virtulis knyvtr tulajdonsglapjnak Custom
Errors oldaln az 500;100 sorhoz tartoz belltsa hatrozza meg. A hibk kezelshez a z IIS
Server-tlaz albbi tmogatst kapjuk: egyrszt a hiba esetn trtn tirnyts lehetsgt,
msrszt pedig a hiba felismershez, feldolgozshoz szksges informcikat, az ASPError
objektum formjban. Mieltt mg sajt hibakezel oldalt runk elttea megfelel knyvtrban be
kell lltani a hibakezel oldalt a sajtunkra. Mindenekeltt, ha a pufferba mr rtak, amikor a
hiba bekvetkezett, itt az ideje, hogy kirtsk, s a hibakezel oldal tiszta lappal indulhasson:
<%
If Response.Buffer Then
Response.Clear
Azutn: a vlasz sttuszt lltsuk be hibazenetre, nehogy valaki azt higgye, hogy ez a valdi oldal:
Response.Status = "500 Internal Server Error"
Majd lltsuk be az oldal tartalmt HTML-re, a lejrati idt 0-ra (gy a gyorsttrak nem fogjk
az oldalt letrolni):
Response.ContentType = "text/html"
Response.Expires = 0
End If
A kvetkez lps a hibt ler ASPError objektum elcsalogatsa, amit a kvetkezkppen
tehetnk meg:
Set objASPError = Server.GetLastError
Miutn az objektum megvan, belekezdhetnk a jellemzk lekrdezsbe. Az egyes jellemzk
jelentse a kvetkez:
.Category: a hiba kategrija, szveges jellemz, pl. Microsoft VBScript compilation
.Number: a hiba kdja, hexadecimlisan megjelentve sokatmond lehet (r lehet keresni a
tudsbzisban)
.Description: a hiba lersa, maga a hibazenet
.File: a fjl neve, ahol a hiba keletkezett
.Line, .Column: a hiba felismersnek sora s oszlopa (ez az adat nem mindig ll
rendelkezsre, ilyenkor az egyes jellemzk rtke 1). Vigyzzunk, a hiba felismersnek
helye nem felttlenl egyezik meg a hiba helyvel!
.Source: a hibt okoz sor kdja. Nem mindig ll rendelkezsre
.ASPCode, .ASPDescription: a hiba ASP hibakdja s lersa viszonylag ritkn kapnak
rtket
lltsunk ssze ezekbl az adatokbl egy hibazenetet, egyenlre egy szveges vltozban. Azrt
ne rjuk ki a kpernyre, mert egyltaln nem biztos, hogy a felhasznlra tartozik a hiba lersa,
jellege s fleg a helye. Miutn a hibazenetet sszelltottuk, eldnthetjk, hogy kirjuk-e a
bngszbe, vagy egy illend bocsnatkr szveg keretben elintzzk a dolgot a sznfalak
mgtt. n azt a megoldst vlasztottam, hogy a felhasznl lthatja a hibazenetet, de csak
akkor, ha a bngsz a kiszolgln fut, azaz a kliens s a szerver IP cme megegyezik. Az
ellenrzs pillanatban a hibazenet szvegt mr az sErrorText vltoz tartalmazza:
<%
If Request.ServerVariables("LOCAL_ADDR") = _
Request.ServerVariables("REMOTE_ADDR") Or _
Request.ServerVariables("REMOTE_ADDR") = _
"127.0.0.1" Then
%>
<HR>
<PRE>
<% Response.Write Server.HTMLEncode(sErrorText) %>
</PRE>
<% Else %>
<P>A hibt naplztuk. Krjk, prblkozzon jra
nhny perc mlva.</P>
<% End If %>
Vegyk szre a hibazenet kirsnl hasznlt Server.HTMLEncode() fggvnyt. Mint mindig,
ismeretlen szveg kirsnl hasznlnunk kell, klnben az esetleg (scriptkdban nagy esllyel)
elfordul specilis karakterek megzavarhatjk a HTML kdot gondoljunk csak nhny
rtalmatlan kacsacsrre, ami scriptkorban mg matematikai mveletet jelkpezett, most pedig
flksz HTML elemeknek rtelmeznnk ket. Kvetkez lpsknt a korbban bemutatott
mdszerrel a hibt eltroljuk az Esemnynaplba:
Set oShell = Server.CreateObject("WScript.Shell")
oShell.LogEvent 1, "ASP HIBA!" & vbCRLF & sErrorText
Set oShell = Nothing
Vgl, biztos, ami biztos, a hibt naplzzuk le egy kznsges szvegfjlba is:
Set oFSO = Server.Createobject
A ("Scripting.FileSystemObject")
Set oFile = oFSO.OpenTextFile
A ("C:\asperror.txt", 8, True)
oFile.Write sErrorText & vbCRLF & vbCRLF
oFile.Close
Set oFSO = Nothing
Ezzel kszen is vagyunk. Felmerlhet (s remlem, van mr, akiben a kd olvassa sorn fel is
merlt), hogy a kd gy nem teljes: mi trtnik pldul akkor, ha a naplfjlt valamilyen okbl
nem lehet megnyitni (pldul mert ppen ms valaki r bele)? Ilyenkor termszetesen hiba
keletkezik. A hibakezel rutinban keletkez hiba megoldsa klasszikus feladat. Ilyenkor a
hibakezel oldal mr nyilvn nem kpes a szlakat tovbb a kezben tartani, szksg van egy
felsbb beavatkozsra. Ezt maga az IIS vgzi el, mi ilyenkor legjobb tudsa szerint a felhasznl
el trja a hibt.
A hiba nem mindig vgzetes: az esetek tbbsgben fel tudunk kszlni arra az esetre, ha valami
baj trtnne a lnyeg csak a hiba biztonsgos felismerse. A scriptnyelvek ppen ezrt
ltalban beptett hibakezelsi elemeket tartalmaznak, amelyeket hasznlva a kisebb hibkat
mg a nagyobb problmk bekvetkezte eltt kivdhetjk. A futs kzbeni hibakezel eszkzk
kzs tulajdonsga, hogy a hiba kezelse utn a program futtatsa folytatdik. A futs kzbeni
hibakezels mr elgg scriptnyelv-specifikus, a kt beptett nyelv, a VBScript s
a JScript elemei a kvetkez.
Kezdjk a VBScript-tel: itt a futs kzbeni hibakezelst mindenekeltt be kell kapcsolni, ha ezt
nem tesszk meg, mindenkppen hiba keletkezik. A hibakezels bekapcsolsra a kvetkez
parancs hasznlhat:
On Error Resume Next
Azaz kb. Hiba esetn folytasd a vgrehajtst. Ezutn rajtunk ll, hogy kijavtjuk-e a hibt, vagy
egyltaln foglalkozunk vele. Mindaddig amg ez a parancs rvnyes (mrpedig abban a
procedrban ahol kiadtuk, valamint az abbl hvott procedrkban, rvnyes), a hiba miatt a
VBScript nem fog lellni. ppen ezrt a fenti parancsot globlisan kiadni nem tl sszer, a
hibakezels bekapcsolst korltozzuk knyes helyekre oda, ahol fel tudunk kszlni a hibk
javtsra. A hiba kezelsre (s felismersre) az Err objektum hasznlhat, amelynek fontosabb
jellemzi a kvetkezk:
.Number a hiba kdja, az Err objektum taln legfontosabb jellemzje. rtke 0, ha minden
rendben van, ettl eltr, ha hiba trtnt.
.Description a hiba szveges lersa
.Source a hibt okoz objektum azonostja
Az elz pldt teht ki kell bvteni:
On Error Resume Next
hibt okoz rsz
If Err.Number <> 0 Then
Hiba a hibakezelben
Err.Clear()
End If
Miutn egy hibt kezeltnk, az Err objektumot vissza kell lltani a kezdrtkekre, klnben a
hibt a kvetkez ellenrz rutin is elkapn. Az Err.Clear() metdust pontosan erre talltk ki. Mi
is meghvhatjuk (clszeren a hibakezel rutin vgn), de a VBScript automatikusan meghvja a
kvetkez utastsok vgrehajtsa sorn:
On Error Resume Next
Exit Sub
Exit Function
azaz, a procedrkbl, fggvnybl trtn visszatrskor, valamint a hibakezels
bekapcsolsakor. Ha elegnk volt a knanbl, a futs kzbeni hibk kezelst
visszakapcsolhatjuk az:
On Error Goto 0
paranccsal. Ilyenkor hiba esetn ismt a jl ismert hibakezelsi megoldsok veszik t az
irnytst. Az objektumnak van mg egy rdekes metdusa, ez pedig az Err.Raise(). Ez a
fggvny arra val, hogy hibt vltsunk ki a rendszerben. Az Err.Raise() ltal generlt hibk
teljes rtkek.
trycatchfinally
A JScript hibakezelse mskpp mkdik, inkbb hasonlt a C nyelvben tallhat trycatch
utastsprra. A szintaxis a kvetkez:
try {
// hibt okoz mvelet
}
catch(hibaobjektum) {
// hibakezels
}
finally {
// mindenkpp lefut utastsok
}
JScriptben teht minden hibt okoz mvelet(-csoport) esetn kln fel kell kszlnnk az
esetleg elfordul hibk kezelsre, ami azt is jelenti, hogy minden egyes esetben kln meg kell
rnunk a hibakezel rutint is. A gyans sorokat a try{} blokkba kell rni. Ha az utastsok
vgrehajtsa sorn brmilyen hiba keletkezne, a vgrehajts a catch{} blokkban folytatdik. A
catch paramtereknt megadott vltoz tartalmazza a hiba lerst, egy Error objektumot.
Pldakppen lssuk, hogyan kaphatjuk el a FileSystemObject ltal visszaadott hibt:
var oFSO = new ActiveXObject ("Scripting.FileSystemObject");
try {
oFSO.CopyFile("qweqweq.txt", "eqwewqe.txt");
}
catch(e) {
Response.Write("Error: " + e);
Response.Write("<br>Error Number: " + (e.number & 0xFFFF) );
Response.Write("<br>Description: " + e.description);
}
A hiba oka nyilvnval: az aktulis knyvtrban valsznleg nincsen qweqweq.txt nev fjl,
amit msolhatnnk, ezrt hiba trtnik. A catch-ben megkapott vltoz egy Error objektumot
tartalmaz, errl mr az els sorban kirt [object Error] is tjkoztat minket. A JScript Error
objektumnak kt jellemzje van: az Error.number a hiba kdjt, az Error.description a hiba
lerst tartalmazza. A hibakd elcsalogatshoz az Error.number ltal visszaadott szmot
dekdolnunk kell, erre val a pldban ltott (Error.number & 0xFFFF) kifejezs. A
trycatchfinally hrmas utols tagjnak az az rtelme, hogy olyan utastsokat is
megadhassunk, amelyek lefutnak fggetlenl attl, hogy a try blokkban trtnt-e hiba, vagy sem.
Hiszen gondoljunk bele: hiba esetn a try blokkbl azonnal kiugrunk, az esetleg htralv
utastsok mennek a sllyesztbe. Ez a helye az erforrsok, pldul adatbziskapcsolatok
felszabadtsnak, lezrsnak. JScriptben is idzhetnk el hibt: a throw() fggvny hvsval
hasonl eredmnyt rnk el, mint a VBScript-beli .Raise metdussal. A throw() paramtere a
hiba maga, ami lehet egy hibakd, egy szveg, vagy egy elzleg ellltott, s megfelelen
kitlttt Error objektum is:
var oErr = new Error();
oErr.number = 1234;
oErr.description = "User Error";
try {
throw(oErr);
}
catch(e) {

Ha a catch blokkban, a hiba kezelse sorn zskutcba jutunk, s feladjuk a harcot, a munkt tovbb
passzolhatjuk az eggyel magasabb szinten tallhat hibakezelnek a throw() fggvnnyel. Paramterknt
adjuk neki a catch()-ben tvett vltozt, valahogy gy:
catch(e) {
Response.Write("Error: " + e);
Response.Write("<br>Error Number: " +
A (e.number & 0xFFFF) );
Response.Write("<br>Description: " + e.description);
throw(e);
}
A msodik throw() hvs segtsgvel a hibt tovbb passzoltuk az IIS-nek, kzdjn vele . A
kzdelem eredmnye a belltsoknak megfelel IIS hibazenet lesz, mintha csak nem is lett
volna a trycatch blokk.

VBScipt rviden

Adatpusok
A VBScript egyetlen adattpust definil s ez a Variant. A Variant tpus egy specilis adattpus,
amely klnfle informcik trolsra szolgl. A Variant tpusnak attl fggen, hogy milyen
tpus adatokat trol a kvetkez altpusai lehetnak.
Altpus Lers
Empty Variant tpus nincs inicializlva. rtke 0 ha szmot jelent, s 0 hosszsg
szveg ha szveg vltoz
Null Variant nem tartalmaz adatot
Boolean rtke vagy True vagy False.
Byte rtke 0-255-ig terjed egsz szm
Integer rtke -32,768-32,767 kztti egsz szm.
Currency rtke -922,337,203,685,477.5808- 922,337,203,685,477.5807 kztt
Long rtke -2,147,483,648-2,147,483,647 egsz
Single Egyszeres pontossg lebegpontos szm -3.402823E38-tl -1.401298E-45-ig
negatv rtkek esetn; s 1.401298E-45-tl 3.402823E38-ig pozitv rtkrk
esetn
Double Dupla pontossg lebegpontos szm -1.79769313486232E308-tl -
4.94065645841247E-324-ig negatv szmok esetn s 4.94065645841247E-
324-tl 1.79769313486232E308-ig pozitv szmok esetn
Date (Time) Egy szm, ami 100 Janur 1-tl , 9999. December 31-ig terjed idpontot jell.
String Szveg ami maximum 2 millird karakter hossz lehet
Object Objektum tartalma van
Error Egy hiba szmot tartalmaz

Konstans definils
VBScriptben a Const kulcsszval lehet konstansokat definilni. Pldul:
Const MyString = "This is my string."
Const MyAge = 49
Const CutoffDate = #6-1-97#
Dtumok definilsnl a # karaktert kell hasznlni, mit az utols plda mutatja.

VBScript opertorok:
aritmetikai
Lers Szimblum
Hatvnyozs ^
Negls -
Szorzs *
Oszts /
Egsz oszts \
Modulus Mod
sszeads +
Kivons -
Szveg sszefzs &
sszehasonlt
Lers Szimblum
Egyenl =
Nem egyenl <>
Kisebb <
Nagyobb >
Kisebb egyenl <=
Nagyobb egyenl >=
Objektum egyezsg Is
Logikai
Lers Szimblum
Logikai tagads Not
Logikai s And
Logikai vagy Or
Logikai kizr vagy Xor
Logikai ekvivalencia Eqv
Logikai implikci Imp

VBScript vltozk:

Vltoz deklarls:
A vltozk deklarlsa VBScripben a kvetkez mdon trtnik:
Dim Names(9) ' Declare an array with 10 elements.
Dim Names() ' Declare a dynamic array.
Dim MyVar, MyNum ' Declare two variables.
Private MyNumber ' Private Variant variable.
Private MyArray(9) ' Private array variable.
' Multiple Private declarations of Variant variables.
Private MyNumber, MyVar, YourNumber
Public MyNumber ' Public Variant variable.
Public MyArray(9) ' Public array variable.
' Multiple Public declarations of Variant variables.
Public MyNumber, MyVar, YourNumber
A msodik sor bemutatta, hogyan lehet egyszerre tbb vltozt deklarlni. Egyszeren vesszvel
elvlasztva fel kell sorolni a vltozk neveit.
Public kulcsszval deklarlt vltoz az sszes eljrsban s az sszes scriptben lthat lesz
Dim kulcsszval deklarlt vltoz scroipt szinten lthat az sszes eljrsbl, ljrs szinten
csak a deklarl eljrsbl lthat
Private kulcszval deklarlt vltoz csak abbl scriptbl lthat amelyikben definilva
voltak
Elgazsok
Plda:
If myDate < Now Then myDate = Now
If value = 0 Then
AlertLabel.ForeColor = vbRed
AlertLabel.Font.Bold = True
AlertLabel.Font.Italic = True
End If
If value = 0 Then
AlertLabel.ForeColor = vbRed
AlertLabel.Font.Bold = True
AlertLabel.Font.Italic = True
Else
AlertLabel.Forecolor = vbBlack
AlertLabel.Font.Bold = False
AlertLabel.Font.Italic = False
End If
If value = 0 Then
MsgBox value
ElseIf value = 1 Then
MsgBox value
ElseIf value = 2 then
Msgbox value
Else
Msgbox "Value out of range!"
End If
Select Case Document.Form1.CardType.Options(SelectedIndex).Text
Case "MasterCard"
DisplayMCLogo
ValidateMCAccount
Case "Visa"
DisplayVisaLogo
ValidateVisaAccount
Case "American Express"
DisplayAMEXCOLogo
ValidateAMEXCOAccount
Case Else
DisplayUnknownImage
PromptAgain
End Select

Ciklusok:

Elltesztel cilus amg igaz:


Dim counter, myNum
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum 1
counter = counter + 1
Loop
MsgBox "The loop made " & counter & " repetitions."
Htultesztel ciklus amg igaz:
Dim counter, myNum
counter = 0
myNum = 9
Do
myNum = myNum 1
counter = counter + 1
Loop While myNum > 10
MsgBox "The loop made " & counter & " repetitions."

Elltesztel ciklus amg igaz nem lesz:


Dim counter, myNum
counter = 0
myNum = 20
Do Until myNum = 10
myNum = myNum 1
counter = counter + 1
Loop
MsgBox "The loop made " & counter & " repetitions."

Htultesztel ciklus amg igaz nem lesz:


Dim counter, myNum
counter = 0
myNum = 1
Do
myNum = myNum + 1
counter = counter + 1
Loop Until myNum = 10
MsgBox "The loop made " & counter & " repetitions."

Kilps ciklusbl EXIT DO segtsgvel:


Do Until myNum = 10
myNum = myNum 1
counter = counter + 1
If myNum < 10 Then Exit Do
Loop

FOR ciklus:
Egyenknt lptet:
Dim x
For x = 1 To 50
MyProc
Next
Step-ben megadott rtk szerint lptet, ha ez az rtk negatv akkor visszafel szmll a ciklus:
Dim j, total
For j = 2 To 10 Step 2
total = total + j
Next
Dim d 'Create a variable
Set d = CreateObject("Scripting.Dictionary")
d.Add "0", "Athens" 'Add some keys and items
d.Add "1", "Belgrade"
d.Add "2", "Cairo"
For Each I in d
Document.frmForm.Elements(I).Value = D.Item(I)
Next

CGI
A CGI (Common Gateway Interface, ltalnos tjr fellet) nevben is benne van, hogy -
mindenfle tvhittel ellenttben - nem egy programnyelvrl van sz, hanem egy felletrl, amely
sszekti programunkat a HTTP szerverrel, ezen keresztl a felhasznlval. Belthat, hogy CGI
programok rshoz akrmelyik programnyelv felhasznlhat, egyetlen megkts, hogy az adott
opercis rendszer tmogassa azt, s emellett clszer viszonylag gyorsnak lennie. Az gy
elksztett alkalmazsaink a WWW-n -World Wide Web- keresztl vlnak elrhetv, gy
gyakorlatilag brhonnan hasznlhatk, ahol hozzfrhet a Vilghl. A technika lnyege a
dinamikus adatok megjelentse, trolsa. Fontos rla tudni, hogy az ilyen programok a szerver
oldalon hajtdnak vgre, teht nem vetdhet fel olyan problma, hogy a kliens program -a
felhasznl bngszje- nem tmogatja ezeket. A honlapokba val integrlsra tbbfle md is
van, a leggyakrabban csak egy egyszer hivatkozst tesznk r, pldul egy link elhelyezsvel -
ugyangy, mintha az egy HTML dokumentum lenne-, de szintn mindennapos az rlapok
feldolgozsnl val alkalmazs. Ezekben az esetekben a programunk feladata az adatok
feldolgozsa, s/vagy trolsa, valamint tovbbtsa mellett egy megfelel HTML lap ellltsa
lesz. Tudni kell azonban, hogy a CGI fellet alkalmas brmilyen formtum kimenet
ellltsra, gy akr grafikus kimenetet is kszthetnk, teht ilyen programokat kpknt is
beilleszthetnk HTML lapokba. Ebbl kikvetkeztethet, hogy a kimenet generlsakor nem
csak magt a tartalmat, hanem egy vlasz-fejlcet is el kell kszteni. Ez ltalban egy "Content-
type: [mime tpus]" sorbl ll, mellyel meghatrozhatjuk a kimenet tartalmnak tpust (MIME,
Multipurpose Internet Mail Extension). Egy msik hasonl fejlc a Location, mely egy msik
fjlra, vagy URL-re irnytja t a szrfprogramot. Fontos mg tudni, hogy a fejlcet el kell
vlasztani a tbbi adattl, ezt kt jsor karakterrel tehetjk meg (\n). A tpus megadsa egy f, s
egy altpussal trtnik. Nhny gyakran hasznltak kzl:

text/html HTML tartalom (.htm, .html)


text/plain egyszer szveg (.txt)
image/jpeg JPEG grafika (.jpg, .jpeg, .jpe)
image/gif GIF kp (.gif)
video/mpeg MPEG vide (.mpeg, .mpg, .mpe)
video/quicktime QuickTime vide (.mov, .qt)
application/zip ZIP archv (.zip)
application/octet- az ilyen tartalmat a bngsz nem jelenti meg, hanem
stream felknlja lementsre
Az esetek nagy rszben a programot tartalmaz fjl els sorban meg kell adnunk a szervernek a
fordt elrsi tjt egy "#!/elrsi/t/fordt" sorral, mely Unix rendszereknl ltalban
/usr/bin/perl, vagy /usr/local/bin/perl - az elrsi trl a szerver webmestertl kaphatunk
felvilgostst.
Ha mr Unix rendszereknl tartunk, akkor a jogosultsgokat is meg kell emltenem. A
programokat futtathatv kell tenni, s mivel nem elre lefordtott programrl van sz, az
olvassi jog is szksges, teht a "chmod 755 programnv.cgi" utastst kell kiadnunk -gy
neknk az olvass, s a vgrehajts mellett rsi jogunk is lesz.
A legfbb tudnivalk most mr a birtokunkban vannak, ksztsnk el egy igen egyszer CGI
programot! A plda programokhoz most a kvetkez fejezetben ismertetett Perl nyelvet
hasznljuk fel, de lehetne akr PHP-ban vagy akr C nyelven is megrni ezeket.
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hell, Vilg...\n";
exit;
Most pedig futtassuk le egy webszerveren keresztl! Ennek a kimenete egy Hell,
Vilg... felirat lesz. Persze ha megnzzk az oldal forrst akkor lthatjuk, hogy ez
nem egy szablyos HTML oldal, ezrt bvtsk tovbb programunkat, ksztsnk dinamikus
kimenetet!
#!/usr/bin/perl
$hanyadika = (localtime(time))[3];
print "Content-type: text/html\n\n";
print <<VEGE;
<HTML>
<HEAD>
<TITLE>CGI plda</TITLE>
</HEAD>
<BODY BGCOLOR="#CCCCCC" TEXT="#666666">
<H1>CGI plda</H1>
<HR NOSHADE>
<H3>"Hell, Vilg!"</H3>
<P><FONT COLOR="#000099">Ma <B>$hanyadika</B>-e/a van.</FONT>
</BODY>
</HTML>
VEGE
exit;
A kimenet gy mr szablyos HTML kd, s dinamikus is, hiszen minden nap ms szmot r ki.
A kvetkez kis porgram a CGI krnyezeti vltozit iratja ki, amik hasznos informcikkal
rendelkeznek a a programunk futsi krnyezetrl.
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print <<VEGE;
<HTML>
<HEAD>
<TITLE>CGI krnyezeti vltozk</TITLE>
</HEAD>
<BODY>
<H1>CGI krnyezeti vltozk</H1>
<PRE>
VEGE
foreach (keys %ENV) {
print "<B>$_:</B> $ENV{$_}\n";
}
print "</PRE>\n</BODY>\n</HTML>";
exit;
Vegyk sorra a fontosabb kulcs-rtk prokat.
SERVER_SOFTWARE A szerver-program neve, s verzija.
A gateway (a webszerver s a program kztti fellet)
GATEWAY_INTERFACE
neve s verzija, ltalban "CGI/1.1".
DOCUMENT_ROOT Az a knyvtr, amit a kliens a gykrknyvtrnak lt.
REMOTE_ADDR A kliens, vagy az ltala hasznlt proxy szerver IP cme.
A kliens host neve, ltalban nem ll rendelkezsre (a
REMOTE_HOST
szerver nem hatrozza meg, vagy egyltaln nincs).
SERVER_PROTOCOL A hasznlt protokoll, s annak verzija.
REQUEST_METHOD A HTTP krs tpusa (ld. ksbb).
QUERY_STRING GET tpus hvs esetn ebbl nyerhetk ki az adatok.
POST tpus hvs esetn az elkldtt bjtok szma (ld.
CONTENT_LENGTH
ksbb).
A kliens bngszprogramjnak a neve s verzija,
HTTP_USER_AGENT
ltalban az opercis rendszerrel kiegsztve.
A kliens ltal elfogadott mime tpusok listja, ltalban
HTTP_ACCEPT szerepel benne a */*, mivel gy a szerver minden tpust
elkld, s a bngsz dnti el, hogy mit kezd vele.
HTTP_ACCEPT_LANGU Azokat a nyelveket talljuk itt, amelyeket a bngsz
AGE tulajdonosa belltott, hogy elfogad, el tud olvasni.
Programunk virtulis helye (azrt virtulis, mert itt az a
SCRIPT_NAME knyvtr szmt a gykrknyvtrnak, amelyet a kliens
is annak lt).
Programunk helye a szerveren (a valdi
SCRIPT_FILENAME
gykrknyvtrbl szmolva)
SERVER_NAME A szerver neve, vagy IP cme.
REQUEST_URI Ezt az URI-t krte a kliens.
SERVER_PORT A port szma, ahol a krs rkezett.
HTTP_HOST A szerver host neve.
A CGI program virtulis knyvtrknt is hasznlhat,
PATH_INFO ebben a vltozban a programnv utni, tovbbi
alknyvtrak tallhatk.
PATH_TRANSLATED Az elz teljes vltozata.
CONTENT_TYPE A krshez csatolt informci mime tpusa (ld. ksbb)
A SCRIPT_NAME, s a SCRIPT_FILENAME alapjn megklnbztetnk ktfle elrsi utat,
egy valdit, s egy virtulisat. Tudni kell, hogy HTTP-n keresztl nem lthat a szerver
httrtrnak a teljes tartalma. Amit a kliens gykrknyvtrnak lt, az nem a szerver
gykrknyvtra, csak egy, a szerver program konfigurlsnl megadott mappa. Az albbi
program a krnyezeti vltozkat felhasznlva meghatrozza valdi, s virtulis helyt a szerveren
(utbbi el a szerver host-jt is kirja, gy kapjuk meg a teljes url-t):
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print <<VEGE;
n <B>http://$ENV{"HTTP_HOST"}$ENV{"SCRIPT_NAME"}</B> vagyok, de valjban
a(z) <B>$ENV{"SCRIPT_FILENAME"}</B> elrsi ton vagyok megtallhat.
VEGE
exit;
A vgeredmnyrl leolvashat, hogy a ltszlag /cgi-bin/pelda.cgi fjl valjban hol is tallhat a
szerveren:
Mint mr emltettem, a bemeneti adatok nagy rszt a CGI programok a krnyezeti vltozkon
keresztl kapjk meg a bngsztl. Kt lehetsges mdon kldhetnk adatokat, ezek a GET, s
a POST eljrsok. A GET esetn a sztring az url-ben kerl elkldsre, melyet egy krdjel
vlaszt el a program nevtl, pldul: http://www.szerver.hu/cgi-bin/program.cgi?adatok. A
QUERY_STRING vltoz tartalmazza az gy elkldtt sztringet. A POST eljrs ebbl a
szempontbl kivtelnek szmt, mivel ebben az esetben a kldtt karaktereket nem egy
krnyezeti vltozbl, hanem a standard bemenetrl (STDIN) olvashatjuk be. Azonban tudni
kell, hogy a sztring utn nincs fjlvge karakter, ezrt az gy elkldtt adatok beolvassnl
szksgnk van az elkldtt karakterek szmra. Erre szolgl a CONTENT_LENGTH krnyezeti
vltoz, mely ezt a szmot tartalmazza. Ezek utn belthat, hogy hogyan olvashatjuk be a POST
metdussal kldtt adatokat egy vltozba:
read(STDIN, $adatok, $ENV{"CONTENT_LENGTH"});
Az, hogy GET, vagy POST metdust hasznltunk-e, megtudhat a REQUEST_METHOD
vltozbl, gy a program akr maga is el tudja dnteni, hogy honnan kell beolvasnia az adatokat.
Most pedig nzznk meg egy programot, mely egy HTML rlapot llt el, majd a visszaklds
utn megjelenti a kapott adatokat.
#!/usr/bin/perl
read STDIN, $buffer, $ENV{"CONTENT_LENGTH"};
print <<END;
Content-type: text/html
<HTML>
<HEAD>
<TITLE>CGI plda</TITLE>
</HEAD>
<BODY BGCOLOR="#EEEEEE" TEXT="#006699">
<H3>?rlap</H3>
<FORM ACTION="$ENV{"SCRIPT_NAME"}" METHOD="post">
Nv: <INPUT TYPE="text" NAME="nev">
<BR>letkor: <SELECT NAME="kor">
<OPTION>Krem, vlasszon...
<OPTION VALUE="-14">14 v alatt
<OPTION VALUE="15-24">15-24 v
<OPTION VALUE="25-39">25-39 v
<OPTION VALUE="40-">40 vnl tbb</SELECT>
<BR><INPUT TYPE="checkbox" NAME="mobil" VALUE="igen"> Van mobiltelefonom.
<INPUT TYPE="checkbox" NAME="auto" VALUE="igen"> Van autm.
<BR><INPUT TYPE="submit" VALUE="Mehet!"></FORM>
<H3>Url-ben kapott adatok:</H3>
<PRE>
$ENV{"QUERY_STRING"}
</PRE>
<H3>Standard bemenetre kapott adatok:</H3>
<PRE>
$buffer
</PRE>
</BODY>
</HTML>
END
exit;
Ezek utn lssuk magt a PERL nyelvet.

Perl

Perl 5 nyelv rvid sszefoglalsa


A Perl nyelv egy interpretlt - illetve betltskor fordtott - nyelv. Eredetileg
rendszeradminisztrcis feladatok megknnytsre rta Larry Wall, mert nem volt kedve a
meglv eszkzk korltaival bajldni. A nyelv meglv eszkzkre lett alapozva: C, sed, awk
s sh programokra. Perl-ben csak a szmtgp hardware korltai rvnyeslnek: egy teljes file-t
kpes beolvasni egy string vltozba (ha van elg memria), tetszleges mlysg rekurzi
futtathat benne (ha van trelmnk s memrink). Asszociatv tmbk elrst hash tblkkal
gyorstja (ami meglepen hatkony programok rst teszi lehetv). Nagyon gyors s rugalmas
mintailleszt algoritmusa van szvegek keressre s cserjre (eredetileg szvegfile-ok
feldolgozsra talltk ki, mint azt a neve is mutatja: Practical Extraction and Report Language).
Kpes binris adatokkal is dolgozni, s ezekbl bonyolult adatstruktrkat felpteni. Az
adminisztrcis feladatok megknnytsre az asszociatv tmbkhz adatbzis file-okat
rendelhetnk, melyek szerkezett egy gyakorlott programoz maga is megadhatja. Az 5-s
verzitl kezdve mr hasznlhatjuk a modulris programozst tmogat nyelvi konstrukcikat,
st mr Objektum Orientlt eszkzket is. A Perl-ben setuid programok sokkal biztonsgosabban
rhatk, mint C nyelvben az adatfolyam kvetst biztost funkcik miatt (ld.: -T kapcsol).
Elkerlhetnk egy csom egyszer hibt, amit a C programban csak debuggolssal fedeznnk fel.
Egyszeren sokkal jobb a fejlesztsi id/futtatsi id arny ha egy ritkn hasznlt, vagy futsi
idben nem kritikus (pl. CGI program) program rsnl. Ez a lers UNIX rendszert hasznl
gpeken hasznlhat fel igazn. A konkrt nyelvi rszek a DOS, OS/2 s Windows alatt fut Perl
interpreterekre is igaz, de a krnyezetfgg rszek s a pldk csak UNIX alap rendszereken
mennek.

Induls
Kezdetnek mindjrt megnzhetjk a minimlis Perl programot, ami a "Hello World!!!" szveg
kirshoz kell:
#!/usr/local/bin/perl
print "Hello World!!!\n";

A Perl program egy egyszer szvegfile, s kveti a shell scriptek gyakorlatt a "#" karaktert
hasznlva a megjegyzsek jellsre. Itt ez az els sorban egy specilis jelentssel is br, hiszen
az els sorba rt "!" kezdet megjegyzs a script interpretert hatrozza meg. Ha ez nem lenne ott,
akkor a perl <programnv> paranccsal lehetne lefuttatni. Lthat, hogy a kirats egy egyszer
print utastssal megadhat, s az utastst mindg egy ";" zrja be. A szvegek egy C
programhoz hasonlan itt sem tartalmaznak implicit sorvge jelet - ezt a megszokott mdon
neknk kell kirni. (Sor beolvassakor viszont nem vgja le a sorvge jelet, gy azt is a
programoznak kell kezelnie.)

Adatstruktrk
Hrom alapvet adatstruktra tallhat a nyelvben: skalr, skalrok tmbje s az asszocitv tmb.
Ezeket - mint azt ksbbiekben ltni fogjuk - mutatkkal is lehet kombinlni, gy lnyegben
mindenfle adatstruktrt megalkothatunk. A norml tmbk indexe - ltalban - 0-val kezddik.
Az asszociatv tmbket szvegekkel kell indexelni. A vltoz nevnek els karaktere hatrozza
meg annak tpust:
$ skalrokat,
@ szmmal indexelt s a
% asszociatv tmbket jell.
Ez az els karakter a vltoznak a kifejezsben betlttt szerept kell, hogy takarja.
Pldk:
$days # egyszer skalr
$days[3] # days nev tmb negyedik eleme
@days # az egsz tmb ($days[0], .. , $days[$#days])
$days{'Feb'} # days nev asszociatv tmb egy eleme
%days # az egsz asszociatv tmb (kulcs, rtk prok)
$#days # days tmb utols indexe
Az alprogramokat mg a & jellel is megjellhetjk. Erre akkor lehet szksg, ha az alprogramot
deklarcija eltt szeretnnk hasznlni. Fggvnyre a deklarcija utn mr a & szimblum
nlkl is hivatkozhatunk (ez - a nyelv elz verzijtl eltren - minden fggvnyre
alkalmazhat). A vltozk nevei egybknt a tpusuknak megfelel kln szimblumtblba
kerlnek, teht hasznlhatunk azonos nev tmbt, asszociatv tmbt s skalrt. (Ekkor $ize[0]
az @ize tmb rsze, nem pedig az $ize vltozt helyettesti.) A vltozk nevei betvel kell hogy
kezddjenek, s tetszleges alfanumerikus karakterrel, illetve alhzsjellel folytathat. A
vltoz neve nem kell, hogy megadott legyen, akr egy kifejezs is llhat helyette, melynek
aktulis rtke lesz a valdi nv! Vannak specilis vltoznevek alapvet paramterek jellsre.
Ezek az Elre definilt vltozk rszben megtallhatak.

Krnyezet
A kifejezs tpusa a kifejezs krnyezettl is fgghet! Pldul az int(<STDIN>) eredmnye egy
egsz szm lesz, amit a bemenet egy sorbl llt el az int fggvny, de a sort(<STDIN>)
eredmnye egy lista lesz, amit a bemenet sszes sornak beolvassa utn a sort fggvny
rendezssel llt el!

Skalrok
Skalr vltozk sokfle rtket trolhatnak: szm, szveg, binris adat vagy mutat. A tartalom a
hasznlat sorn mindg szksges formra alakul, azaz kirhatunk egy szmot szvegknt egy
vltozba, majd ezt a vltozt megszorozhatjuk kettvel. Az aritmetikai mveleteknl a szmok
binris formra konvertldnak, gy ezek pontossgt a processzor korltozza. Vannak persze
kiegszt modulok tetszleges pontossg szmok kezelsre is. Felttelek vizsglatnl csak az
res szveg, illetve a 0 rtk jelent hamisat. A skalr vltozknak alapveten kt llapota lehet:
definilt, vagy definilatlan. Ezeket a defined, illetve undefined fggvnyekkel krdezhetjk le.
Egy vltoz addig definilatlan, amg valaki nem ad neki rtket, vagy nem definilja explicit
mdon. Definilatlan vltoznak - a krnyezettl fggen - 0 vagy res szveg rtke van.
Pldk:
$i = 2; # egsz
$f = 2.3; # racionlis
$szam = 1_000_000_000; # ez egy nagy egsz
$hexa = 0xffeedd; # hexadecimlis szm
$szoveg = "Ez egy szoveg"; # egy szveg
print "Valami\n"; # egy szveg megjelentse
print <<VEGE; # hosszabb szveg megjelentse
Valami # "Itt a dokumentum" stlusu
VEGE # adatbevitellel (VEGE a zrszimblum)
$szoveg = <<VEGE; # $szoveg = "ez is szoveg\n"
ez is szovega # ez is megy
VEGE
fv(<<EGY, <<KETTO); # st ez is!
elso parameter
EGY
masodik parameter
KETTO

Tmbk
A Perl-ben hasznlt tmbket inkbb indexelt listknak kne nevezni a kiterjeszthetsgk miatt.
Ha brmelyik tpusban egy eddig nem ltez elemnek adunk rtket az automatikusan
definildik. A tmbket persze nem csak elemenknt lehet feltlteni:
@tomb = ('elso', 2, $harom); # hromelem tmb
%szinek = ( # asszociatv tmb
'piros' => 0x00f,
'kk' => 0x0f0,
'zld' => 0xf00,
);
s az utbbival ekvivalens alak:
%szinek = (
'piros' , 0x00f,
'kk' , 0x0f0,
'zld' , 0xf00,
); #egyszer felsorols, prosval
rtkadsokban (rsz)tmbket is rtkl adhatunk. Ezekben az esetekben a balrtk listja az
els elemtl kezdve addig tltdik fel, amg van j elem a jobb oldalon. Az rtkads akkor s
csak akkor rvnyes, ha a baloldalon leglis balrtkek szerepelnek.
($a,$b,$c)=(1,2,3) #a vltozk sorban rtket kapnak
($a,$b,@maradek)=@valami #ez is helyes
Tmb balrtkknt hasznlata csak utols elemnek rdemes, mert egy korbbi tmb az sszes
jobboldalt magba olvassa. Ez j a loklis paramterek tvtelnl. A $[ vltoz mutatja, hogy a
tmbk melyik indexen kezddnek ( ez a C-ben 0 ). Ennek rtke mdosthat ,ezrt a kvetkez
kt rtkads ekvivalens:
@tomb=() #ress teszi a tmbt
$#tomb=$[-1; #a tmb hosszt -1-re lltja
Skalr krnyezetben a tmb felhasznlsa a tmb aktulis hosszt adja vissza. rtkadsnl a
rsztmbk automatikusan elemenknt bemsoldnak, gy a keletkez tmb homogn lesz.
@tomb=(@lista1,@lista2,&alprg)
Egy asszociatv tmb skalr krnyezetben visszaadja, hogy van-e benne kulcs-rtk pr. Ez
csupn arra j, hogy a hash-el algoritmus hatkonysgt vizsgljuk.

Szintaxis ... utastsok


A Perl program utastsok s dekralcik egymsutnja, amelybe megjegyzseket a # jel
hasznlatval tehetnk. Ennek hatsra a Perl interpreter a sor vgig lv szvegrszt
megjegyzsnek tekinti. Annak ellenre, hogy a nyelv UNIX-szr jelleg nyelvi elemeket is
tartalmaz, minden utasts csak egyszer kerl vgrehajtsra, kivve, ha ciklusban szerepel. A
nyelvben az utastsok s dekralcik szabadon - akr keverve is, mint egy C++ programban -
kvethetik egymst. Megkts csak az alprogramok hvsra van: a mg nem deklarlt
alprogramot csak a & szimblum hasznlatval lehet meghvni.
Egyszer utasts
Egy utasts egy pontosvesszvel lezrt jelsorozat lehet. Ezekbl tbb is szerepelhet egy sorban.
Egy utasts utn egy mdost kifejezs llhat, amely ennek az egyetlen utastsnak a hatst
befolysolja:
utasts if EXPR
utasts unless EXPR
utasts while EXPR
utasts until EXPR
Egy zenet kirsa feltteltl fggen:
print "Hello kedves olvas!\n" if $bobeszedu_program;

sszetett utasts
Itt kell megemlteni a BLOKK fogalmt, amely { s } jelekkel kzbezrt utastssorozat. (Itt
fontosak a { s } jelek, mg egyetlen utastsnl is!) Ez alapjn a lehetsges formk:
if (EXPR) BLOKK
# BLOKK vgrehajtdik ha az EXPR igaz
if (EXPR) BLOKK1 else BLOKK2
# ha EXPR igaz akkor BLOKK1, egybknt BLOKK2
# lesz vgrehajtva
if (EXPR) BLOKK elsif (EXPR) BLOKK ... else BLOKK
Az if utasts szintaxisa itt egyrtelm lesz, mivel a BLOKK nem llhat egyetlen utastsbl.
CIMKE while (EXPR) BLOKK
CIMKE while (EXPR) BLOKK continue BLOKK
A while ciklus trzsben vgrehajtott next utasts hatsra a vezrls a continue BLOKK-ra
kerl, majd jra elindul a ciklusmag.
CIMKE for (EXPR1; EXPR2; EXPR3) BLOKK
Ez a szoksos C-beli ciklus formja. A kvetkez kt forma ekvivalens:
for($i = 1; $i < 10; $i++) { $i = 1;
... while($i < 10) {
} ...
} continue {
$i++;
}
CIMKE foreach vltoz (TOMB) BLOKK
Ez a shell-ekben meglv ciklus egy vltozata. Itt a vltoz sorban felveszi a TOMB elemeit
rtkl, s gy indul el a ciklusmag.
CIMKE BLOKK continue BLOKK
Ez a vgtelen ciklus volt...
A ciklusokban hasznlhat a next, a last s a redo utasts, melyek a ciklusbeli utastsok
vgrehajtst vezrlik. A fent emltett next hatsra a futs a ciklus elejre kerl, s a felttel
jratesztelsvel folytatdik a mkds. A redo ehhez hasonl, csak itt a felttel tesztelse nlkl
kerl a vgrehajts a ciklus els utastsra. A last pedig a ciklusbl kiugrik, s az utna
kvetkez els utastson folyik tovbb a program vgrehajtsa. A hrom utasts hasznlatban
rdekessg, hogy mindegyiket cmkzni is lehet s ekkor az ugrsok az adott cmkvel elltott
ciklusra vonatkoznak. Mivel a blokk egy egyszer lefut ciklusnak tekinthet, ezrt ezek az
utastsok blokkban is hasznlhatak. A switch utastsra nincs kln forma, de van r egypr
lehetsges megolds, pldul:
SWITCH: {
/^abc/ && do { $abc = 1; last SWITCH; };
/^def/ && do { $def = 1; last SWITCH; };
/^xyz/ && do { $xyz = 1; last SWITCH; };
$nothing = 1;
}
A /^abc/ alak felttelek mintaillesztsre szolglnak. Ha egy minta illeszkedik a $_ vltoz
tartalmhoz, akkor a hozz tartoz felttel msodik tagja is kirtkelsre kerl, azaz a do blokk is
vgrehajtdik.

Opertorok s precedencijuk
A C nyelvben rvnyes szablyok rvnyesek, s mg van egypr - shell script-ekbl ismers - j opertor.
Opertor kirtkels irnya lers
lista (,) balrl jobbra kifejezsek listja
-> balrl jobbra hivatkozs
++,-- nem asszociatv nvels, cskkents
** jobbrl balra hatvnyozs
!,~,\ s unris +,- jobbrl balra nem, binris nem, cmopertor,
+, -
=~,!~ balrl jobbra szveg illeszkeds, nem
illeszkeds
*,/,%,x balrl jobbra szorzs, oszts, modulus,
ismtls
+, -, . balrl jobbra sszeads, kivons,
konkatenci
<<,>> balrl jobbra balra, illetve jobbra shift
unris opertorok nem asszociativ pl. file tesztels -f
<,>,<=,>=,lt,gt,le,ge nem asszociatv szm illetve szveg
sszehasonltsa
==,!=,<=>,eq,ne,cmp nem asszociatv szm illetve szveg
sszehasonltsa
& balrl jobbra binris AND
|,^ balrl jobbra binris OR s XOR
&& balrl jobbra logikai AND
|| balrl jobbra logikai OR
.. nem asszociatv tartomny
?: jobbrl balra feltteles rtkads
=, +=, -=, *= ... jobbrl balra rtkads opertorai
, => balrl jobbra vessz s kulcs opertor
lista opertorok nem asszociatv lista manipulcik
Not balrl jobbra logikai NEM
And balrl jobbra logikai S
or, xor balrl jobbra logikai VAGY-ok
Itt csak az ismeretlennek tn opertorokat fogom kiemelni:
cmopertor
olyan mint a C nyelv & opertora; visszaadja az operandus objektum cmt (alprogramokra is
megy!)

ismtls
egy szveget meg lehet ismtelni nhnyszor, pl.: "ha"x3 == "hahaha"

konkatenc
szvegek sszefzse, pl.: "ha"."ha" == "haha"

file tesztels
ezek a shell programokban megszokott file tesztel opertorok, pl.: -f "hello.c" akkor igaz, ha a
hello.c file ltezik

szveg sszehasonlts
Erre a lt,gt,le,ge,eq,ne opertorok szolglnak. Ha szvegeket az == opertorokkal hasonltgatjuk,
akkor azok memriabeli cmei kerlnek sszehasonltsra, nem tartalmai! cmp rtke -1, 0, vagy
1 lehet a szvegektl fggen.

szm sszehasonlts
Szoksos opertorokon kvl a <=> szerepel itt. Ennek -1 az rtke, ha az els szm nagyobb, 1,
ha a msodik, s 0, ha egyenl a kt szm. Ez az opertor - az elbb emltett cmp opertorhoz
hasonlan - fleg rendezseknl hasznlhat jl.

I/O
Az alapvet s legfontosabb I/O opertor a < s a >. Ha egy file lerjt ilyen jelek kz rakjuk,
akkor egy sort olvashatunk belle. A beolvasott sor automatikusan a $_ vltozhoz rendeldik, ha
nem adunk meg mst. Egy egyszer cat (UNIX cat parancs) gy is lerhat:
while(<STDIN>)
{
print $_; # print; is lehetne, hiszen az $_ az
# alapertelemezett argumentum
}
Megjegyezend mg, hogy a C nyelv hrom operatora nem szerepel a nyelvben, ezek a
kvetkezk:
& - cm-opertor, helyette a \ hasznlhat,
- dereferencia-opertor, erre valk a $,@,%,& opertorok
(TYPE) - tpus-knyszerts

A szvegekhez mg jrul egypr "idzjel" opertor


ltalban hivatalos jells rtelme megjegyzs
'' q{} szveg literl ez a "sz szerinti"
szveg literl
"" qq{} szveg literl vltozkat helyettesti
a szvegben
`` qx{} parancs az adott szveget, mint
egy shell parancssort
vgrehajtja
qw{} a szvegbl egy pl.: paramtertads
szlistt csinl
// m{} mintailleszts vltozkat rtkkkel
helyettesti
s{}{} csere vltozkat rtkkkel
helyettesti
tr{}{} betcsere az szvegeket mint
cseretblt hasznlja

Mintailleszts

Hasznlat
A mintaillesztst tbb dologra is lehet hasznlni a =~ vagy a !~ opertorokkal:
Szvegrszek felismersre: egy szvegben a grep programhoz hasonlan kereshetnk
szvegeket.
Pl.: $sor =~ /keresettszo/;
Szvegekben a sed-hez hasonlan lecserlhetnk egyes rszeket.
Pl.:$sor =~ s/eredeti/ujszo/;
Szvegekbl kikereshetnk minket rdekl rszeket, s azokat szelektven ki is nyerhetjk (mint
az awk-ban). Pl.:($erdekes_szo) = /\s+(\w+)$/;

Mdostk
A // utn ltalban rhatunk valamilyen karaktert, ami a keresst egy kicsit mdostja:
i kis- s nagybetket nem klnbzteti meg
m tbbsoros szvegben keres
s a szveget egyetlen sorknt kezeli
x kibvtett keressi md
Az i mdost hasznlatval gy a /perl/i kifejezs a PeRL szvegre is illeszkedni fog.
Az x mdost tulajdonkppen arra j, hogy egy kicsit lazbb szintaxszissal rhassuk le a keres
kifejezseket. Ezzel mr lehetsg van tbbsoros, st megjegyzsekkel tzdelt kifejezs rsra
is!

Regular Expressions, regulris kifejezsek


Egy ilyen kifejezsben egy szveghez illeszthet mintt lehet lerni. Ebbe a mintba persze
belevehetnk extra dolgokat is, hogy a neknk szksges rszt nyerjk ki a szvegbl. (A UNIX
grep parancsban megszokott dolgok a () csoportost opertortl eltekintve.)

Az alapok
\ a kvetkez karakter specilis
^ a sor elejhez illeszkedik
. egy tetszleges karakterhez illeszkedik (kivve az jsort)
$ sor vghez illeszkedik
| alternatvk jellse
() csoportosts
[] karakter-osztly kijellse

A . csak akkor fog az jsor karakterhez illeszkedni, ha erre az s mdostval kln megkrjk,
pl.:
$szoveg = <<VEGE;
Tobbsoros szoveg, amelyben a PERL
perl szavakat kell majd megtalalni.
VEGE
print "illeszkedik/s\n" if $szoveg =~ /PERL.perl/s; # igaz
print "illeszkedik/\n" if $szoveg =~ /PERL.perl/; # hamis
A sor eleje s vge inkbb rekord elejt s vgt jelenti, hiszen a nyelvben meg lehet hatrozni,
hogy mi vlassza el a sorokat ($*). Alapesetben ez persze az jsor karakter, de ezt meg lehet
vltoztatni...

Karaktersorozatok
Egy egyszer kifejezs ismtldst a kvetkezkkel lehet jellni:
* 0 vagy tbb
+ 1 vagy tbb
? 0 vagy 1
{n} pontosan n-szer
{n,} n-szer vagy tbbszr
{n,m} n <= ismtldsek szma <= m

Alaprtelmezs szerint ekkor a leghosszabb ismtlds fog illeszkedni ezekhez a rszekhez. Ha


minimlis szm illeszkedst szeretnnk, akkor mindegyik utn odatehetjk a ? jelet:
"hhhhhh" =~ /h{2,4}/; # itt "hhhh" fog illeszkedni
"hhhhhh" =~ /h{2,4}?/; # itt csak "hh"

Specilis karakterek
\t tabultorjel
\n jsor
\r return
\f form feed
\v vertical tab
\a cseng
\e escape
\033 oktlis szmrendszerben megadott karakter
\x1b karakter hexadecimlisan
\c[ kontrol karakter
\l kisbet
\u nagybet
\L kisbet \E-ig
\U nagybet \E-ig
\E ...
\Q metakarakterek normlisak \E-ig
\w "sz" karakter (alfanumerikus s _)
\W nem-sz karakter
\s whitespace
\S nem whitespace
\d szmjegy
\D nem szmjegy
\b szhatrhoz illeszkedik
\B nem szhatr
\A string elejhez illeszkedik
\Z string vge
\G oda illeszkedik, ahol az elz illeszts vgetrt

Az x mdost hasznlatval mg lehet hasznlni ms dolgokat is, de ezek szerintem mr csak


igen-igen ritkn kerlnek el.

Csoportosts
Ha egy szvegbl rszeket ki akarunk nyerni, akkor a () karaktereket kell hasznlnunk. Ha
ezekkel bezrunk egy karaktersorozatot a regulris kifejezsben, akkor az ahhoz illeszked
karakterekre a kiejezsen kvl is hivatkozhatunk. Ha egy csere krnyezetben hasznljuk, akkor
az gy kapott karaktersorozatokra a $1, $2, $3 ... vltozkkal lehet hivatkozni:
s/^([^ ]*) *([^ ]*)/$2 $1/; # els kt sz felcserlse
if(`date` =~ /(..):(..):(..)/) { # id kirsa
print "ora: $1, perc: $2, masodperc: $3\n";
}
Ha lista krnyezetben hasznljuk az illesztst, akkor a kivlasztott rtkeket kzvetlenl is
megkaphatjuk:
($ora, $perc, $masodperc) = (`date` =~ /(..):(..):(..)/);

Opertorok tlapolsa
A Perl opertorainak nagyrsze tlapolhat. Ehhez a %OVERLOAD tmbt kell hasznlni, mely
az tlapolt opertorokhoz tartoz fggvnyeket trolja.
package Valami;
%OVERLOAD = (
'+' => \&myadd,
'-' => \&mysub;
# stb.
);
...
package main;
$a = new Valami 57;
$b = $a + 5;
Elkpzelhet az az eset is, hogy nincsen definilt opertor az adott tpus vltozhoz. Ennek
kezelsre szolgl az %OVERLOAD tmbnek "fallback" nev eleme. A "fallback" rtktl
fggen hrom eset lehetsges:
definilatlan
Ekkor a Perl elszr elindtja a MAGIC AUTOGENERATION nev eljrst, mely egy
fggvnyt prbl generlni az adott opertorhoz. Ha ez nem megy, akkor a felhasznl ltal
definilt "nomethod"-ot hvja, ami ezekre az esetekre lett ltrehozva. Ha ez sem mkdik, akkor
exception lp fel.

TRUE
Minden az elz esetnek megfelelen zajlik, csak exception nem lp fel, hanem minden gy
folytatdik, mintha nem is lett volna tlapols.

FALSE
A definilatlan esettl abban tr el, hogy az autogenerlst nem prblja meg.

Beptett fggvnyek
Ez a rsz iszony nagy, s csom olyan informcit tartalmaz, amit mr amgy is ismer az ember
(legalbbis a C programokban hasznlta mr ket). Itt csak nhny specilis dolgot fogok
ismertetni, ami Perl jellegzetessg.
Ha valaki ismeri a szoksos C fggvnyeket, akkor azokat btran hasznlhatja, bizosan megvan.
Ha nem gy viselkedik, ahogy vrta, akkor rdemes ignybe venni a POSIX modult:
use POSIX;
Ezek utn mr bitosan meglesz az sszes POSIX fggvny.
Ha valakinek mg ez sem elg, akkor ignybeveheti a klnbz modulokat. Mr a nyelvvel
egytt lehet tallni adatbziskezel kiterjesztsektl kezdve a terminlkezel fggvnyekig sok
mindent. Ezeken kvl az Internetben legalbb szz j modul knl kiterjesztseket klnfle
nyelvek s knyvtrak fel (pl.: SQL adatbzikezels, X11 grafikus fellet, Prolog...).

nhny fggvny...
bless REF,PACKAGE
A REF referencit egy PACKAGE modulban lert objektumknt fogja kezelni. Lnyegben ez az
tja egy j objektum ltrehozsnak.
caller
Megmonja, hogy ki hvta az aktulis kdrszletet...
($package, $filename, $line) = caller;
chop
Levgja a '\n' jelet a sor vgrl. Ez sorok olvassa utn hasznos.
while(<>) {
chop; # $_ vgrl vg
...
}
chop($cwd = `pwd`); # aktulis knyvtr
defined EXPR
Megmondja, hogy egy EXPR vltoz definilt-e.
delete EXPR
Egy elem trlse egy asszociatv tmbbl, pl.: delete $tomb{"eleme"};
die LIST
Ez lnyegben a C knyvtri exit() fggvny, csak a LIST tartalmt mg kirja mieltt kilp a
programbl.
do BLOCK
Vgrehajtja a BLOCK-ot majd az utols utasts rtkt adja vissza. Ha ciklusmdostval
hasznljuk, akkor a ciklusmag mg a tesztels eltt biztos lefut.
do EXPR
Az EXPR-t, mint Perl forrsnevet hasznlja, s vgrehajtja a benne lv utastsokat.Minden
hvsnl jra kielemzi a fjlnevet, ezrt nem rdemes pldul ciklusban hasznlni.
dump LABEL
Egy core dump! Ha a core dump eredmnyekppen kapott file-t futtatjuk, akkor az a LABEL
cimknl fog elindulni. Ez a mdja egy Perl prgram "fordtsnak".
each ASSOC_ARRAY
Egy asszociatv tmb elemeit iterlja:
while(($key,$value) = each %ENV)
{
print "$key=$value\n";
}

krnyezeti vltozk kirsa (ld. mg a vltozkat)


eval BLOCK
A BLOCK futtatsa az aktulis krnyezetben. A BLOCK egy string is lehet!
exists EXPR
Megmondja, hogy ltezik-e az asszociatv tmb egy eleme, pl.: if exists $tomb{"eleme"} ...
glob EXPR
EXPR file-nv teljesen kiterjesztve. gy mkdik mint a shell-ek file-nv kiterjeszt
algoritmusa.
keys ASSOC_ARRAY
ASSOC_ARRAY kulcsait adja vissza egy tmbben.
local EXPR
EXPR-ben felsorolt vltozk a blokkra nzve loklisak lesznek. Ez a dinamikus lthatsg.
my EXPR
EXPR-ben lv vtozk csak az aktulis blokk-ban lesznek lthatak. A local-tl eltren ez
fordtsi idben rtkeldik ki, teht a vltoznevekben nem lehetnek mgikus karaktertek. Az
gy definilt vltozk inkbb a C nyelv loklis vltozihoz llnak kzel, mert a klvilg szmra
teljesen lthatatlanok lesznek.
sub kiir
{
my ($szoveg1, $szoveg2) = @_;
chop $szoveg1;
chop $szoveg2;
print $szoveg1, ':', $szoveg2, '\n\n';
}
open FILEHANDLE, EXPR
EXPR-ben lert file megnyitsa a FILEHANDLE lerba.
open(FILE,"valami.txt"); # rs-olvass
open(BE,"</etc/passwd"); # olvass
open(KI,">/tmp/output"); # rs
open(FINGER,"finger @augusta |"); # olvass pipe-bl
open(RENDEZ,"| sort >/tmp/ki");# rs pipe-ba
Az gy megnyitott file-okat a close-val lehet lezrni, s I/O mveletekben lehet hasznlni:
print FILE "Egy szor\n"; # "Egy sor" kirsa a FILE-ba
$sor = <BE> # sor olvassa

pack MINTA,LIST
A LIST tartalmt a MINTA szerint binrisan sszepakolja. Fleg kls eljrsok hvsa eltt kell
megtenni.
print FILEHANDLE LIST
Kirs ltalnos utastsa. A FILEHANDLE elhagyhat, ekkor a standard kimenetre r ki. A
FILEHANDLE s a LIST kztt nem lehet vessz!
return
Alprogrambl rtk visszaadsa. Ha ez nem szerepel, akkor az alprogram utols utastsnak
rtke lesz visszaadva.
shift LIST
A LIST tmbt elmozdtja egy elemmel lefele. Az els elemmel tr vissza, s az trldik is
abbl.
sort LIST, vagy sort SUBNAME LIST
LIST rendezse lexikografikusan, vagy a SUBNAME-ben definilt alprogramnak megfelelen. A
SUBNAME alprogramnak egy rvnyes sszehasonltsnak kell lenni.
study SCALAR
Az adott vltoz tartalmt tanulmnyozza egy kicsit, hogy ksbb tbb mintaillesztst
hatkonyabban vgezhessnk el rajta. Ez tnyleg csak akkor j, ha tbb mintaillesztst
hasznlunk ugyanarra a vltozra!
tie VARIABLE,PACKAGENAME,LIST
Az adott vltozt hozzrendeli a PACKAGENAME-ben lert struktrhoz. Ezzel lehet egy
egyszer asszociatv tmbhz hozzrendelni egy adatbzist, ahol a tmb indexei lnyegben
keressi kulcsok lesznek.A PACKAGENAME modulban a vltoz tpustl fggen klnbz
fggvnyeket kell megrni:
1) asszociatv tmb
a) TIEHASH objectname, LIST
b) DESTROY this
c) FETCH this, key
2) STORE this, key, value
(a) DELETE this, key
b) EXISTS this, key
c) FIRSTKEY this, key
d) NEXTKEY this, key
3) tmb
a) TIEARRAY objectname, LIST
b) DESTROY this
c) FETCH this, key
4) STORE this, key, value
(1) skalr
b) TIESCALAR objectname, LIST
c) DESTROY this
d) FETCH this
e) STORE this, value
undef EXPR
EXPR vltoz megszntetse
untie VARIABLE
Egy tie kapcsolat megszntetse.
unapck
pack fggvny ellenkezje
use MODULE, LIST
MODULE modul LIST-ben felsorolt nevei lthatv vlnak az aktulis package-ban. Ha a LIST
elmarad, akkor a MODULE ltal exportlt vltozk vlnak lthatv. A no kulcssz a use
ellentettje, azaz a lthatsgot megsznteti.
wantarray
Igaz lesz az rtke, ha a vgrehajts alatt ll alprogram visszatrsi rtkt egy listhoz akarjuk
rendelni. Ezzel a fggvnyhvssal az alprogram lnyegben meg tudja nzni, hogy milyen
krnyezetben hvtk meg t, s ettl fggen akr ms-ms tpus visszatrsi rtke is lehet!
warn LIST
Mint a die, csak nem lp ki a programbl.

Elre definilt vltozk


Ha az awk-os neveket szeretnnk hasznlni, akkor a
use English;
sort kell mg berni a programba.
A file-ok "objektum-szer" hasznlathoz a
use FileHandle;
sort kell berni. Ezek utn a kvetkezk ekvivalensek:
print KIMENET "Hello World!!!\n";
KIMENET->print("Hello World!!!\n");
A vltozkbl itt is csak a legfontosabbakat fogom megemlteni:
$_,$ARG
Az alaprtelmezett vltoz. Ha valahol nincs vltoz, akkor ott ez lesz hasznlva.
$1,$2,$3...
Regulris kifejezsekbl kapott betcsoportok.
$&, $MATCH
Legutols mintaillesztsnl az illesztett rsz.
$[
Ez a vltoz mutatja, hogy a tmbk hnyadik elemn kezddik adat. Ez llthat a klnbz
nyelvekben megszokotthoz igazodva.
$`, $PREMATCH
Legutols mintaillesztsnl a $& eltti rsz.
$', $POSTMATCH
Legutols mintaillesztsnl a $& utni rsz.
$., $NR
Utols olvassi mveletnl az olvasott sor sorszma. (Ez csak olvashat vltozknt kezelend!)
$/, $RS, $INPUT_RECORD_SEPARATOR
Input rekordok elvlasztsa. Ez alapesetben az jsor karakter, de brmire lecserlhet. Ha az res
stringet adjuk meg, akkor res sorok lesznek a hatrok. Ez nem ugyanaz mint $/ = "\n\n";, mert a
$/ = "\n\n"; tbb res sort is egyetlen hatrnak tekint.
$|, $OUTPUT_AUTOFLUSH
Output bufferelst sznteti meg, ha az rtke nem egy.
$\, $ORS, $OUTPUT_RECORD_SEPARATOR
Az a karakter, amit a print ki fog rni minden sor vgn. Ez alapesetben res.
$?, $CHILD_ERROR
Utols gyermek process visszatrsi rtke. Ez a wait() fggvny visszatrsi rtke, taht a
valdi exit() rtket ($? >> 8)-knt kaphatjuk meg.
$$, $PID, $PROCESS_ID
A process azonost szma.
$<, $UID, $REAL_USER_ID
Valdi user azonostja.
$>, $EUID, $EFFECTIVE_USER_ID
A futs kzbeni jogok tulajdonosa. Ez az rtk csak a setuid programoknl vlt t a file
tulajdonosnak jogaira. Ez persze rhat vltoz, teht a $> = 0; a root-t vls egy mdja, csak
ez nem mindg fog bejnni :-).
$(, $GID, $REAL_GROUP_ID
Valdi csoport azonostja. Ha a rendszer tbb csoportot is tmogat egyszerre, akkor ez egy
listja azoknak a csoportoknak, amiben a process benne van.
$), $EGID, $EFFECTIVE_GROUP_ID
Effektv csoport azonostja. Ez setgid program futtatsakor klnbzhet az elztl.
$0, $PROGRAM_NAME
A programot indt parancs neve (egy Perl script-nl a script neve, nem a "perl" sz).
@ARGV
A parancssori argumentumok listja.
@INC
Azon knyvtrak listja, ahol a Perl elkezd keresglni egy modul utn.
%INC
A hasznlt modulok tmbje (filenv,elrsi-t) elemekkel.
%ENV
Krnyezeti vltozk tmbje, pl.:
print "Otthonom: ", $ENV{"HOME"}, "\n";
%SIG
Kivtelkezelk tmbje.
sub handler { # az els paramter a signal neve
local($sig) = @_;
print "Elkaptam $sig-t!\n";
exit(0);
}
$SIG{'INT'} = 'handler';
$SIG{'QUIT'} = 'handler';
...
$SIG{'INT'} = 'DEFAULT'; # alaprtelmezett
$SIG{'QUIT'} = 'IGNORE'; # figyelmen kvl hagy
Nhny Perl-beli esemny is kezelhet gy. A $SIG{__WARN__} a warn ltal kivltott, a
$SIG{__DIE__} pedig a die ltal kivltott esemny lekezelsre szolgl. Mindkt esetben
tadsra kerlnek a warn, illetve a die paramterei.

Alprogramok rsa

Alprogramok deklarlsa:
sub NEV; # a NEV ismertt ttele
sub NEV BLOCK # deklarls s definci
Egy alprogramot nem kell elre deklarlni ahhoz, hogy hasznlhassuk. Az alprogramoknl a
paramterlistt sem kell deklarlni, mert ez vltozhat. A hvott alprogram a paramtereket a @_
listn keresztl kapja meg. Az alprogram utols utastsnak az rtke lesz a visszatrsi rtk,
hacsak nincs egy return utastsban ms megadva.
sub max {
my $max = pop(@_);
foreach $elem (@_) {
$max = $elem if $max < $elem;
}
$max;
}

Alprogram hvsa:
&NEV; # az aktulis @_-t adja tovbb
&NEV(LISTA); # Ha &-t runk, akkor () ktelez
NEV(LISTA); # & elhagyhat ha van () vagy mr deklarlt
NEV LISTA; # () elhagyhat, ha a NEV mr deklarlt
Alprogram hvsa akkor megy ilyen egyszeren ha az az t tartalmaz modulban lthat. Ha ettl
eltr modulban lett deklarlva, akkor modulhivatkozssal, vagy valamilyen objektum-orientlt
technikval kell meghvni a kvnt eljrst (ld. ksbb).
$m = &max(1,2,3); # a hats ugyan az
$m = max 1 2 3;

Nvtelen alprogram ltrehozsa:


$alpref = sub BLOCK; # deklarls
&$alpref(1,2,3); # hvs
Ez a technika fleg egyszer hasznlatos alprogramoknl lehet hasznos, pldul egy signal kezel
tdefinilsakor.

Nvtelen alprogramok definilt krnyezete


A nvtelen alprogramokra jellemz, hogy mindig abban a krnyezetben futnak, amelyben
definiltk ket, mg akkor is, amikor az adott krnyezeten kvlrl kerlnek meghvsra. Ez egy
rdekes mdja lehet a paramtertadsnak, s callback jelleg kdrszeket lehet vele rni.
sub newprint {
my $x = shift;
return sub { my $y = shift; print "$x, $y!\n"; };
}
$h = newprint("Hello");
$g = newprint("dvzlet");
# Valamivel ksbb...
&$h("vilg!");
&$g("mindenkinek");
s az eredmny:
Hello, vilg!
dvzlet, mindenkinek!

Beptett fggvnyek tlapolsa


Sok beptett fggvny tlapolhat, de ezt csak akkor rdemes kiprblni, ha j okunk van r.
Ilyen eset lehet a nem Unix-rendszereken a krnyezet emullsa. Az tlapols a subs pragma
segtsgvel trtnhet, pldul gy:
use subs 'chdir'; #az tlapoland beptett fggvnyek
chdir $valahova; #az j chdir hasznlata
sub chdir { ... } #a chdir megvalstsa

Modulok

package
A Perl nyelv lehetsget ad klnbz lthatsgi krk hasznlatra. Ezeket a lthatsgi
krket moduloknak nevezhetjk, amelyet a package kulcssz vezet be. A package hatsa az
adott blokk vgig, vagy a kvetkez package-ig tart. Alap esetben egy egyszer programban
minden a main modulba kerl be. Ha lerjuk a package szt, akkor az ez utn kvetkez
deklarcik mr az j modulba fognak tartozni. A modul neveihez a :: hivatkozs opertorral
frhetnk hozz (ez rgen egy ' jel volt, de az egyszerbb olvashatsg rdekben, meg a C++
programozk kedvrt ez megvltozott).
$elso = 1; # ez a $main::elso
package MODUL; # uj modul kezdete
$masodik = 1; # $MODUL::masodik
$elso = 1; # $MODUL::elso
$main::elso = 2;# $main::elso
A fmodul neveihez mg a $::elso hivatkozssal is hozzfrhetnk.

Szimblumtbla
A modulok szimblumtbli futs kzben elrhetek, st mdosthatak!!! A modulhoz a modul
nevvel megegyez szimblumtbla tartozik, ami lnyegben egy asszociatv tmb: %main::,
avagy %MODULE::. Az itt lv bejegyzsekhez a *nev alakban is hozzfrhetnk.
local(*main::alma) = *main::korte;
local($main::{'alma'}) = $main::{'korte'};
Ez a plda egy j lnv ltrehozst mutatja. Ezek utn minden korte-re alma-knt is
hivatkozhatunk. Az egyetlen klnbsg az, hogy az els fordtsi idben rtkeldik ki.

Konstruktor, destruktor
Ha a modulban BEGIN, illetve END kulcsszval jelzett blokkot definilunk, akkor azok a
package hasznlata eltt, illetve utn lefutnak.
package hibakezeles;
BEGIN {
open(HIBAK,">./hibak");
}
END {
close(HIBAK);
}
sub kezeles {
local ($szoveg) = @_;
print HIBAK $szoveg, "\n";
}
A programban elindtott BEGIN blokkokhoz kpest fordtott sorrendben fognak lefutni az END
blokkok. Egy modulban lv nevekhez a use kulcsszval frhetnk hozz:
use MODUL;
use hibakezeles kezeles;
A use hasznlata ekvivalens a kvetkezvel:
BEGIN { require MODUL; import MODUL; }
Modulokat implementl file-okat az @INC ltal meghatrozott knyvtrakban keresi a rendszer.
A .pm, .pl s .ph kiterjesztseket nem kell kirni a filenevek utn.

Bonyolultabb struktrk
A gondok mindg a mutatkkal kezddnek, de ez itt mg lnevekkel is kombinldik... Perl 4-ben
kicsit nehzkes volt a bonyolult adatstruktrk kezelse, de most mr vannak referencik, gy mr
mindazt a borzalmat el lehet kvetni, amit egy C programban csak el tudunk kpzelni. St mg
tbbet is, mert egy C programban nem lehetett a vltozneveket menet kzben manipullni.

Referenck ltrehozsa
Legegyszerbb a \ opertor hasznlata. Ezzel egy jabb hivatkozst kszithetnk egy vltozra
(egy mr biztosan van a szimblumtblban):
$scalarref = \$scalar;
$arrayref = \@ARGV;
$hashref = \%ENV;
$coderef = \&handler;
Nvtelen dolgokra is lehet hivatkozni:
$arrayref = [1, 2, ['a', 'b', 'c']];
$hashref = {
'dm' => 'va',
'Clyde' => 'Bonnie',
};
$coderef = sub { print "Nem nyert!\n"; };

Referencik hasznlata
Nagyon egyszer egy referancit hasznlni: a programban egy vltoz neve helyre brhova
berhatunk egy megfelel tpus referencit tartalmaz vtozt. Az egyszer esetek, amikor egy
egyszer struktrt szeretnnk hasznlni:
$ketto = $$scalarref;
print "A program neve:",$$arrayref[0],"\n";
print "HOME=",$$hashref{'HOME'};
&$coderef(1,2,3);
Persze lehet mutatni mutatra is:
$refrefref = \\\"valami";
print $$$$refrefref;
Brmilyen hely, ahol egy referencit kapnnk meg, helyettesthet egy blokkal, amely rtke a
referencia lesz:
$ketto = ${$scalarref};
print "A program neve:",${$arrayref}[0],"\n";
print "HOME=",${$hashref}{'HOME'};
&{$coderef}(1,2,3);
No persze a blokk lehet bonyolultabb is:
&{ $inditas{$index} }(1,2,3); # megfelel eljrs indul
$$hashref{"KEY"} = "VALUE"; # 1. eset
${$hashref}{"KEY"} = "VALUE"; # 2. eset
${$hashref{"KEY"}} = "VALUE"; # 3. eset
${$hashref->{"KEY"}} = "VALUE"; # 4. eset
Itt az 1. s 2., illetve a 3. s 4. eset egyenrtk.
A fenti esetek egyszerstsre szolgl a -> opertor:
print "A program neve:",$arrayref->[0],"\n";
print "HOME=",$hashref->{'HOME'};
Ennek balrtke brmilyen kifejezs lehet, amely egy referencit ad vissza. Ez az opertor el is
hagyhat {} vagy [] zrjelek kztt (de tnyleg csak kzttk!):
$array[$x]->{"valami"}->[0] = "janur";
$array[$x]{"valami"}[0] = "janur";
Ezzel el is jutottunk a tbbdimenzis C-beli tmbkhz:
$tomb[42][4][2] += 42;

Szimblikus hivatkozsok
Ha a fent emltett hivatkozsokban egy blokk nem egy vltoz referencijval, hanem egy string-
gel tr vissza, a nyelv akkor sem esik ktsgbe. Szorgalmasan elkezdi bngszni a
szimblumtblt, htha tall egy ilyen bejegyzst:
$nev = "ize";
$$nev = 1; # $ize
${$nev} = 2; # $ize
${$nev x 2} = 3;# $izeize
$nev->[0] = 4; # $ize[0]
&$nev(); # &ize()
$modulom = "MAS"
${"${modulom}::$nev"} = 5; # $MAS::ize
Ha ez a szabadsg nem tetszik neknk, akkor megkthetjk keznket a use strict; hasznlatval.
OOP

Amit a Perl objektumokrl tudni kell:


Egy objektum csak egy egyszer referencia, amely trtnetesen tudja, hogy melyik osztlyhoz
tartozik. Egy osztly egy package, amely tudja az objektum hivatkozsokat kezelni, s van nmi
tmogatsa az rklsre. Egy metdus az egy egyszer alprogram, amelynek az els paramtere
egy objektum referencia vagy egy package-nv lesz.

Objektum
Az objektum brmilyen referencia lehet, ami meg van ldva azzal a tudssal, hogy hol jtt ltre:
package ValamiUj;
sub new { bless {} } # 1. verzi
sub new { # kicsit bonyolultabban...
my $self = {};
bless $self;
$self->initialize();
return $self;
}
A referencia ltalban egy asszociatv tmb szokott lenni, amely aztn az objektum sajt kis
szimblum tbljaknt szolgl. Az objektumokat jra meg lehet ldani. Ekkor az objektum az j
osztlyba kerl, az eredeti osztlyt "elfelejti", hisz egy objektum egyszerre csak egy osztlyhoz
tartozhat. Ezek utn az j osztlynak kell gondoskodnia az eredeti adattagokkal kapcsolatos
teendkrl. ld.Destruktorok

Osztly
Az osztly egy package. Nincs semmi klns jells arra, hogy ez egy osztly, st mg az
inicializl eljrst sem kell new-nak hvni. Egy osztlyban csak a metdusok rklsre van
tmogats az @ISA tmbbn keresztl. Ez egy modul neveket tartalmaz tmb. Ha egy metdust
nem tallhat meg az aktulis package-ban, akkor az ebben a tmbben felsorolt modulok lesznek
bejrva a hinyz alprogramrt. Ez egy mlysgi keress lesz. Ha itt sem tall semmit, s van egy
AUTOLOAD nev fggvny, akkor megprblja ezzel elszedetni a hinyz eljrst. Ha ez a
lehetsg sem jrt sikerrel, akkor egy UNIVERSAL-nak nevezett modulban fog keresglni a
rendszer. Az @ISA tmb szpsge az, hogy menet kzben is lehet mdostani, azaz menet
kzben megvltoztathatjuk egy osztly leszrmazsi fjt! Nyilvnvalan az adattagok rklsre
is szksg van egy objektum-orientlt nyelvben, ez a Perlben az @ISA tmb segtsgvel
megvalsthat.
package A;
sub new {
my $type = shift;
my $self = {};
$self->{'a'} = 42;
bless $self, $type;
}
package B;
@ISA = qw( A ); # A a B sosztlya
sub new {
my $type = shift;
my $self = A->new;
$self->{'b'} = 11;
bless $self, $type;
}
package main;
$c = B->new;
print "a = ", $c->{'a'}, "\n";
print "b = ", $c->{'b'}, "\n";

Metdus
Semmi klns jells nincsen rjuk, kivve a destruktorokat. Alapveten ktfajta metdus van:
statikus metdus
Ez els paramterben az osztly nevt kapja meg:
package ValamiUj;
sub holvagyok {
my ($neve) = @_;
print "holvagyok: $neve\n";
}
Ez a kvetkezkppen hvhat:
ValamiUj->holvagyok();
"rendes" metdus
Ez az els paramterben egy referencit vr.
package ValamiUj;
sub new {
my $self = {};
bless $self;
$self->{elso} = 1; # ez {"elso"}-vel egyenrtk
$self->{ize} = 42;
return $self;
}
sub kiir {
my $self = shift;
my @keys = @_ ? @_ : sort(keys(%$self));
foreach $key (@keys) {
print "\t$key => $self->{$key}\n";
}
}
s ennek hvsa:
use ValamiUj;
$obj = ValamiUj::new();
$obj->kiir(); # C++ stlus
kiir obj "elso"; # "print" stlus
Destruktor
Destruktor is definilhat az osztlyhoz, ha a modulban megadunk egy DESTROY nev eljrst.
Ez akkor lesz meghvva, amikor az utols hivatkozs is megsznik az adott objektumra, vagy a
program futsa befejezdik.
Nincs rekurzv destruktor-meghvs, vagyis az jraldott objektum eredeti osztlyra vonatkoz
destruktort explicit meg kell hvni. Az objektumban trolt adattagokra azonban a destruktor
meghvsa megtrtnik.

PHP
Ebben a fejezetben a PHP programozsi nyelvet, ezt az utbbi idben egyre jobban elterjedt,
szerveroldali szkript nyelvet prblom meg bemutatni. A PHP a dinamikus, interaktv
weboldalak ltrehozsnak egyik legegyszerbb s leghatkonyabb eszkze. Hasznlatval
elenysz mennyisg kdolssal egyszer s hatkony szkripteket illeszthetnk web oldalunkba,
amik a legalapvetbb feladatoktl a legsszetettebb alkalmazsokig gyakorlatilag brmilyen
feladat elvgzsre kpesek. A PHP azonban egy jelents ponton eltr az eddig ismert szkript
nyelvektl. Szerveroldali szkript nyelv ez is, vagyis a szerveren fut le, azonban a kd maga a
HTML-kdba beillesztve tallhat meg. A PHP rtelmez felismer a HTML-oldalba illesztett
PHP kdot, rtelmezzi, lefuttatja s eredmnyt visszaadja a bngszn keresztl. A knnyebb
rthetsg kedvrt tekintsnk egy pldt:
<html>
<head><title>Els PHP pldnk</title></head>
<body>
<hr>
<?php
echo "Hello PHP!";
?>
<hr>
</body>
</html>
A kiemelt rsz maga a PHP szkript. Nem tl bonyolult, de ahhoz elg, hogy rrezznk, mirl is
van sz. Ha a fenti HTML-kd keresztlfut a PHP rtelmezn, akkor az szreveszi a <?php
tagrl, hogy a kvetkezkben nem hagyomnyos HTML-kdrl van sz, hanem PHP
programrszletrl. A programot az rtelmez vgrehajtja s az echo utastsnak megfelelen a
"Hello Moon" feliratot rja ki. Illetve nem pontosan kiirja, hanem a HTML-kdban a szkript
helyre a kimenetet beilleszti. A HTML s a szkript egyttes eredmnye az albbi kd lesz:
<html>
<head><title>Els PHP pldnk</title></head>
<body>
<hr>
Hello PHP!
<hr>
</body>
</html>

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 Torontoi 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 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 odalon hasznltk a PHP/FI-t, 1997-ben mr tbb mint 50.000 web odalon.
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.
Ugyanakkor termszetes, hogy a PHP fejldse nem llt meg. Jelenleg a 4.x vltozatnl tart a
fejleszts, de ksznheten a "szabad szoftver" filozfinak nem valszn, hogy itt megreked.

Alapok
A PHP szerveroldali begyazott nyelv. A parancsok - tulajdonkppen maguk a programok - a
szerveren futnak le oly mdon, hogy a megfelel kiterjeszts llomnyt a PHP parancsrtelmez
tfsli, rtelmezi a PHP parancsokat s utastsokat, azokat megfelel mdon vgrehajtja, s az
esetleges kimeneteket (a pldban ltott mdon) beilleszti a HTML-oldalba. Ez nagyon kellemes
dolog, hiszen a felhasznl mr a programunk ltal generlt tartalmat ltja, s nem magt a PHP
programot. Ugyanakkor egyszerbb feladatokat egy pr soros beillesztett programocska is el tud
ltni, a viszonylag sokkal bonyolultabb CGI programok helyett.
A PHP rendkvl sokoldal nyelv, gyakorlatilag minden olyan eszkz rendelkezsre ll, ami egy
hatkony nyelvhez szksges, br a CGI programok ksztshez kell sszes alapvet
kpessggel, de ezen tlmenen mg nagyon sok minden tud. Nzzk meg a PHP legfontosabb
lehetsgeit:
Vltozk rugalmas hasznlata. A vltozk tpusa nincs mereven rgztve, azt a program futsa
kzben a PHP a vltoz krnyezettl fggen llaptja meg. Ugyanakkor szles lehetsgeink
nylnak a vltozk egymsba trtn konvertlsra, mindezt termszetesen automatikusan.
Figyelemre mlt a tmbk rugalmas hasznlata.
Kvlrl tvehet vltozk. HTML-formokbl meghvott PHP oldalak, a formokban felhasznlt
vltozkat egyszeren, nevkkel trtn hivatkozssal vehetik t.
Hatkony filekezels. Seregnyi filekezel, fileinformcis s knyvtrkezel fggvny teszil
lehetv a fileokkal vgzend munkt.
Kpek ksztse s manipulcija. A PHP olvassa a GIF, JPEG s PNG llomnyokat, ezeket
kpes manipullni. A manipullt vagy az jknt ellltott grafikus llomnyokat JPEG s a PNG
formtumban kpes kirni, de lehetsges olyan PHP programok ksztse, amik a statikus
grafikus llomnyokhoz hasonlan hasznlhatk, tartalmukat azonban dinamikusan lltjk el.
Filefeltlts kezelse. Lehetsges a felhasznl gprl fileok feltltst kezdemnyezni a PHP
programot futtat szerverre.
Tvoli fileok elrse. Lehetsgnk van HTTP cmek megnyitsra, gyakorlatilag a helyi fileok
megnyitsval azonos mdon.
Regulris kifejezsek hasznlata. A Perl nyelvben hasznlatos regurlis kifejezsek hasznlhatk
a PHP programokban a stringekben trtn keressekhez, karaktercserkhez, karakterrszletek
msolshoz. Br kezdk rszre a regulris kifejezsek hasznlata eleinte okozhat
bonyodalmakat, rdemes ksbb elmerlni bennk, mert igen hasznos eszkzk.
Adatbzisok elrse. A PHP egyik legfontosabb tulajdonsga az adatbzisrendszerek igen szles
krnek hasznlhatsga. A teljessg ignye nlkl itt van nhny a tmogatott adatbzisok
kzl: MySQL, mSQL, dBase, Oracle, Sybase, PostgreSQL, Ingres.

Vltozk PHP-ban
A PHP nyelvben a vltozkat a nevk el tett '$' jel jelli. Az albbi alapvet vltoztpusokat
klnbztetjk meg: egsz szmok, stringek s lebegpontos vltozk. A vltozk
legegyszerbben valamilyen rtkadssal kaphatnak rtket, valahogy gy:
$a = 10;
$b = 'Ez most egy string';
$pi = 3.1415;
Termszetesen a vltozkkal az sszes ismert s az adott vltozra rtelmezhet mvelet
elvgezhet, azonban lteznek klnlegesebb opertorok is, illetve a vltozk rtkeadsnl van
mg nhny rdekessg:
$c = ($a = 10);
Az rtkadsnak nmagban is rtke van, vagyis a fenti esetben $c vltoz ugyanazt az rtket
kapja, amit $a kapott meg. Ennek gy a fenti esetben nem sok rtelme van, de ksbb ltni fogjuk,
hogy sok esetben hasznos lehet ez a fajta rtkads.
$c += 10;
A kifejezs megegyezik ezzel: $c = $c + 10; de hasonlan mkdik a kivons szorzs, oszts s a
stringek sszefzse esetn.
++$c;
Az inkrementl (nvel) opertor a vltoz rtkt nveli meg eggyel. Hasonlkppen mkdik
cskkentsre --$c; formban. Ezt az opertort leginkbb ciklusokban hasznljuk gyakran
valamely vltoz rtknek lptetsre. A ++$c; kifejezst felrhatnnk gy is $c++; azonban ez
nem egszen ugyanaz. Amennyiben a vltoz eltt van a nvels opertora brmely egyb
rtkadst megelz a nvels, egybknt nem. Ha $c rtke 10, akkor a $a = (++$c); rtkadst
kveten $c rtke 11 lesz s $a rtke is. Ugyanakkor, a $a = ($c++); rtkads hatsra $a
felveszi $c rtkt, ami 10, majd $c rtke megnvekedik, gy 11 lesz.
Kln szt rdemes ejteni a stringek sszefzsrl:
$a = 'alma';
$b = ' a fa alatt';
$c = $a.$b;
$c rtke 'alma a fa alatt' lesz. A pont opertor szolgl a stringek sszefzsre, ne hasznljuk az
sszeads opertort ilyen esetekben. Viszont hasznlhat a $c .= $a kifejezs a szmokhoz
hasonlan, amikor is a kifejezs jobb oldaln lv rtket a kifejezs bal oldaln llhoz fzi
hozz.
Mint mr elbb utaltam r, a vltozk tpusa a PHP-ben nincsen rgztve, azok a krlmnyekhez
kpest megvltozhatnak. Termszetesen van r md, hogy a vltozk tpust pontosan belltsuk
- erre szolglhat a settype() fggvny - de az rtkadsnl is pontosan definilhatjuk a vltoz
tpust, ha $c = (real) 10; formban teszzk azt. Az rtkadsnl hasznlhat tpusok az albbiak
lehetnek:
(int) vagy (integer) - egsz szmok meghatrozsra
(real), (double), (float) - lebegpontos szmok meghatrozsra
(string) - szveges vltozk meghatrozsra
(array) - tmbk meghatrozsra
(object) - objektumok meghatrozsra
A vltozk tpusnak rugalmassgra az albbi plda mutathat r:
$a = '10 krte';
$b = 20;
$c = $a + $b;
A pldban szerepl $c rtke 30 lesz, mert $a-t a PHP szmknt rtelmezi, gondolvn azt
akartuk. A vltozk tpusnak automatikus konverzija eleinte kicsit furcsa lehet olyanoknak,
akik a vltoztpusokat szigoran meghatroz nyelvekhez szoktak, de rvid id utn magtl
rtetden hasznlhatjuk ezt az igen hasznos lehetsget.
Sokszor hasznos lehetsge a PHP-nek a vltoz vltozk hasznlata. Ilyen esetben a vltoz
nevt, dinamikusan, egy msik vltoz rtkbl eredeztetjk. Ha $gyumolcs vltoz rtke
"krte", s $nev rtke "gyumolcs", akkor a $$nev vltoz rtke meg fog egyezni a $gyumolcs
vltoz rtkvel.
A PHP nyelvben egy egsz sor fggvny s utasts kapcsolatos a vltozkkal. Ezek a PHP
referencikban megtallhatk, azonban itt kiemelek nhny fontosabbat.
Empty() - logikai fggvny, mely igaz rtkkel tr vissza, ha a vltoz rtke nulla, res string,
vagy a vltoz nincsen belltva. Ezek szerint, ha $a=10, akkor empty($a) rtke hamis lesz,
ellenben ha $b rtke 0 vagy $b-nek mg nem adtunk egyltaln rtket, akkor empty($b) rtke
igaz lesz.
Gettype() - visszadja egy vltoz tpust.
Print_r() - ember szmra olvashat informcit ad egy vltoz rtkrl. Rendkvl hasznos
fggvny olyan esetben, amikor a vltozink rtkt a tesztels sorn nyomon akarjuk kvetni, de
tmbkrl is nagyon jl ttekinthet kpet ad. Ksbb lthat mg plda a print_r() fggvny
hasznlatra.
Az egyszer skalris vltozkat kveten nzzk meg a tmbket.

Tmbk a PHP-ban
A tmbk, azok klnbz lehetsgei s az azok kr felsorakoztatott fggvnyek a PHP
programozs egyik legerteljesebb eszkzrendszert alkotjk, ugyanakkor rendkvl egyszeren
s knnyedn hasznlhatk. A tmb vltozk halmaza, melyeket a tmbn bell sorban
trolhatunk s a teljes adathalmazt egyszerre is kezelhetjk, ugyanakkor a tmb elemeihez kln-
kln is hozzfrhetnk. Fontos tulajdonsga a tmbknek, hogy egy tmbn bell az elemek
tpusa klnbz lehet. Egy tmb elemeit legegyszerbben explicit mdon, elemenknt tlthetjk
fel:
$tomb[1] = "dBase";
$tomb[2] = "FoxPro";
$tomb[4] = "Clipper";
$tomb[5] = 42;
Lthat, hogy a tmb elemeinek megadsakor nem szksges a sorrendisget szigoran betartani.
Egy tmb elemeihez a fentieknl egyszerbben is, a tmbindex hasznlata nlkl is lehet
elemeket adni:
$tomb[] = "Basic";
$tomb[] = "FoxPro";
ly mdon a tmb vghez kapcsoldnak az j elemek, az index rtke pedig az legutols
indexelemnl eggyel magasabb lesz. Hasonlan mkdik az array_push() fggvny, azzal a
klnbsggel, hogy egy utastson bell tbb rtket is hozzfzhetnk a tmbhz:
array_push($tomb, "Cobol", "Fortran");
Szp lassan dagad tmbnk a fenti utastsokat kveten mr gy nz ki:
Array
(
[1] => dBase
[2] => FoxPro
[4] => Clipper
[5] => 42
[6] => Basic
[7] => FoxPro
[8] => Cobol
[9] => Fortran
)
Termszetesen a tmbk rtkeinek megadshoz hasonlan frhetnk hozz a tmbelemekhez,
azonban a fent emltett array_push() fggvny prja, az array_pop() fggvny is
rendelkezsnkre ll, mely azonban nemcsak egyszeren a tmb utols elemt adja vissza
rtkl, hanem a tmb elemeinek szmt is cskkenti az utols elemmel:
$nyelv1 = $tomb[1];
// $nyelv1 rtke "dBase"
$nyelv2 = $tomb[4];
// $nyelv2 rtke "FoxPro"
$nyelv9 = array_pop($tomb);
// $nyelv9 rtke "Fortran" s a tmb nyolc elem lesz
Bonyoltsuk egy kicsit a dolgokat. Ezidig a tmbnk egy dimenzis volt, azonban a PHP
nyelvben a tmbk kett vagy akr tbb dimenzisak is lehetnek. Az rtkads legegyszerbb
mdja ilyen esetben is az explicit rtkads:
$auto[1][1] = "Maserati";
$auto[1][2] = "olasz";
$auto[2][1] = "Renault";
$auto[2][2] = "francia";
$auto[3][1] = "Mercedes";
$auto[3][2] = "nmet";
a tmb valahogyan gy fog kinzni:
Array
(
[1] => Array
(
[1] => Maserati
[2] => olasz
)
[2] => Array
(
[1] => Renault
[2] => francia
)
[3] => Array
(
[1] => Mercedes
[2] => nmet
)
)
Ilyen s ehhez hasonl tmbk ltrehozsra, azonban sokkal tmrebb s olvashatbb mdszer
az array() fggvny hasznlata. Ez a fggvny a paramterknt megadott rtkeket tmb
formban adja vissza. gy a fenti rtkadssal pontosan megegyez eredmnyt ad a kvetkez:
$auto[1] = array( "Maserati" , "olasz" );
$auto[2] = array( "Renault" , "francia" );
$auto[3] = array( "Mercedes" , "nmet" );
Ahogyan azonban a tmbelemek tpusaira vonatkozan nincsenek tl szigor megktsei a PHP
nyelvnek, ugyangy nem kezeli szigoran a tbbdimenzis tmbk elemszmait sem a PHP. Az
albbi rtkads teljesen helyes eredmnyt ad:
$auto[1] = array( "Maserati" , "olasz" );
$auto[2] = array( "Renault" , "francia" , "406", "206" );
$auto[3] = array( "Mercedes" , "nmet" , "E320",
"Vito" , "Sprinter kisteheraut" );
Termszetesen az array_pop() s az array_push() fggvnyek az array() fggvnnyel tvzve
tbb dimenzis tmbk esetn is hasznlhatk.
array_push( $auto, array("Citroen" , "francia" , "ZX" , "Xsara");
A fenti esetekben a tmb elemei azok sorszmaival voltak azonostva. A PHP ismeri az
asszociatv tmbk fogalmt is. Az asszociatv tmbk rendkvl hasznos s sokoldal elemei a
PHP nyelvnek. A PERL nyelvben hasznlt hash tpus tmbkhz hasonlan mkdnek. A
tmbelemekre val hivatkozs ilyen esetben nem sorszmmal, hanem egy indexelem (kulcs)
segtsgvel trtnik, egyszeren gy, hogy a sorszm helyre, az indexelemet helyezzk.
$tomb["els"] = "Kis Gedeon";
$tomb["msodik"] = "Nagy Elemr";
Fggetlenl attl, hogy a tmb elemeinek milyen sorrendben adtunk rtket, az elemeket az
indexkulcs segtsgvel rhetjk el, s ez nem fgg attl, ha a tmbhz hozzfznk, vagy attl
elvesznk egy elemet. j elem brmikor hozzfzhet a tmbhz:
$tomb["harmadik"] = "Kukonya Berk";
Az asszociatv tmbk lehetnek egydimenzisak, mint a fenti pldban, de lehetnek tbb
dimenzisak is. A fenti pldt kibvthetjk tbb dimenziss:
$tomb["els"]["neve"] = "Kis Gedeon";
$tomb["els"]["kora"] = 27;
$tomb["msodik"]["neve"] = "Nagy Elemr";
$tomb["msodik"]["kora"] = 22;
Ha a "Nagy Elemr" rtk elemet a $tomb["msodik"]["neve"] hivatkozssal tudjuk elrni, de
ha $sorszam rtke "msodik" akkor akr $tomb[$sorszam]["neve"] hivatkozssal is elrhetjk a
keresett elemet.
A norml s az asszociatv tmbk ltrehozsra egyarnt hasznlhat az array() fggvny, amit
leginkbb tmbk kezd rtkfeltltse sorn hasznlhatunk, egy rtkadssal kikszblve
tbbet. A fenti pldkkal megegyezek az albbi rtkadsok:
$tomb = array ( "els" => "Kis Gedeon",
"msodik" => "Nagy Elemr");
$tomb = array ("els" => array ("neve" => "Kis Gedeon",
"kora" => 27),
"msodik" => array ("neve" => "Nagy Elemr",
"kora" => 22) );
Mint az albbi plda is mutatja, az rtkads esetn az index rtkt nemcsak konkrtan, hanem
vltozval is megadhatjuk, gy mr meglehetsen rugalmasan tthetjk fel tmbjeinket
adatainkkal. A kvetkez plda megmutatja a print_r() fggvny hasznlatt is, amit tetszleges
vltoz rtknek kiratshoz hasznlhatunk, de mivel tmbvltoz esetben a komplett
tmbstruktrt is megjelenti leginkbb tesztelsi clokra hasznlhat nagyon jl.
<?php

$nick1 = "X";
$nick2 = "Z";
$tomb = array (
$nick1 => array("nev" => "X Y",
"email" => "xy@valami.hu"),
$nick2 => array("nev" => "Z",
"email" => "z@bme.hu")
);
echo("<PRE><b>");
print_r($tomb);
echo("<HR>");
print_r($tomb["X"]["nev"]);
echo("</b></PRE>");
?>
A program kimenete a kvetkez lesz:
Array
(
[X] => Array
(
[nev] => X Y
[email] => xy@valami.hu
)
[Y] => Array
(
[nev] => Z
[email] => z@bme.hu
)
)
Asszociatv tmbk esetben azonban figyelemmel kell lenni arra, hogy ilyen tmb elemeit
kizrlag a meghatrozott indexrtkkel rhetjk el, a tmb sorszmval nem. Ennek rendkvl
egyszer az oka. Az egyszer sorszmozott tmb is asszociatv tmb, ahol a tmbindex maga a
sorszm. St egy tmbn bell keverhetjk is a sorszmozott s az indexelt elemeket, de azrt ezt
kerljk, csak gondot okozunk magunknak. A norml s az asszociatv tpus tmbk a PHP
programozs sorn rendkvl vltozatosan s hatkonyan hasznlhatk, fleg akkor, ha tudjuk
azt, hogy a PHP a tmbk elemeire, az elemszmokra s a tmbelemek tpusaira vonatkozan
rendkvl szabad kezet ad neknk:
tbbdimenzis tmbn bell az egyik index lehet asszociatv, a msik norml
tbbdimenzis tmb esetben a tmbelem tmbknek nem kell felttlenl azonos
elemszmaknak lenni, vagyis $tomb[1] lehet t elem, mg $tomb[2] lehet akr 8 elem is.
egydimenzis tmbk esetben a tmbelemek lehetnek klnbz tpus adatok, de mg
tbbdimenzis tmbk esetben sem kell a tmbelem tmbk adatszerkezetnek megegyeznie.
Vagyis elg nagy szabadsggal hasznlhatjuk a tmbvltozkat, mgis rdemes szem eltt
tartani, hogy ha lehet jrjunk el kvetkezetesen a vltozk rtkadsval s azok hasznlatval.

Vltozk hatskre
A vltoz hatskre az a krnyezet, amelyben a vltoz definilt. A legtbb esetben minden PHP
vltoznak egyetlen hatskre van. Ez az egyetlen hatskr kiterjed az include s a require
segtsgvel hasznlt fjlokra is. Pldul:
$a = 1;
include "b.inc";
Itt az $a vltoz elrhet lesz az beillesztett b.inc szkriptben is. A felhasznli fggvnyekkel a
loklis fggvnyhatskr kerl bevezetsre. Alaprtelmezs szerint minden, fggvnyen bell
hasznlt vltoz ebbe a loklis fggvnyhatskrbe tartozik, pldul:
$a = 1; /* globlis hatskr */
function Test ()
{
echo $a; /* egy helyi vltozt vr */
}
Test();
Ez a szkript nem fog semmilyen kimenetet sem eredmnyezni, mivel az echo kifejezs az $a
vltoznak egy helyi - fggvnyen belli - vltozatra utal, s ebben a hatskrben ehhez nem
rendeltek rtket. Ez valamelyest klnbzik a C nyelv filozfijtl, ahol a globlis vltozk
automatikusan elrhetk brmely fggvnybl, feltve ha a fggvnyben jra nem definiltad azt
a vltozt. Ez problmk forrsa lehet, ha az ember vletlenl megvltoztat egy globlis vltozt.
A PHP-ben a globlis vltozkat global kulcsszval kell deklarlni a fggvnyekben, pldul:
$a = 1;
$b = 2;
function Osszead()
{
global $a, $b;
$b = $a + $b;
}
Ossszead();
echo $b;
A fenti szkript kirja, hogy "3". $a s $b global-knt val deklarlsval minden utals ezekre a
vltozkra a globlis vltozt fogja rinteni. Nincs megktve, hny globlis vltozt kezelhet egy
fggvny. Globlis vltozk elrsnek msik mdja a PHP ltal definilt specilis $GLOBALS
tmb hasznlata. Az elbbi pldval egyenrtk megolds:
$a = 1;
$b = 2;
function Osszead()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Osszead();
echo $b;
A $GLOBALS asszociatv tmb, ahol a globlis vltoz neve jelenti a kulcsot, s a vltoz rtke
a tmbelem rtke.
A vltozk hatskrnek msik fontos lehetsge a static (statikus) vltoz. A statikus vltoz
csak loklis hatskrben l - egy fggvnyen bell, de kt fggvnyhvs kzt nem veszti el az
rtkt, a vltoz hatskrbl val kilps esetn is megmarad az rtke:
function Test()
{
$a = 0;
echo $a;
$a++;
}
Ez nagyon haszontalan fggvny, mivel nem csinl mst, mint minden meghvsakor $a-t 0-ra
lltja, aztn kirja a 0-t. Az $a++ teljesen felesleges, mert amint vge a fggvny futsnak az $a
vltoz megsznik. Ahhoz, hogy ebbl rtelmes szmllfggvny legyen - megmaradjon a
szmll rtke -, az $a vltozt statikusnak kell deklarlni:
Function Test()
{
static $a = 0;
echo $a;
$a++;
}
Most mr valahnyszor meghvdik a Test() fggvny, kirja $a rtkt, majd azt megnveli
eggyel.
Fejezet. Konstansok
A konstans egy egyszer rtk azonostja (neve). Mint ahogy az elnevezse is mutatja, a
program futsa sorn nem vltozik meg az rtke (a mgikus __FILE__ s __LINE__ konstansok
az egyedli kivtelek ez all). A konstansok alapesetben rzkenyek a kis- s nagybets
irsmdra. Megllapods szerint ltalban csupa nagybets neveket adunk a konstansoknak.

Konstansok
A konstansok neveire a PHP ms jelzivel azonos szablyok vonatkoznak. Egy rvnyes
konstans nv betvel vagy alhzssal kezddik, amit tetszleges szm bet, szm vagy
alhzs kvet. A konstansok brhonnan elrhetek. Konstanst a define() fggvnnyel lehet
ltrehozni. Definilsa utn ksbb nem lehet trlni vagy megvltoztatni az rtkt. Csak
skalris adat (boolean, integer, double vagy string tpus) lehet egy konstans tartalma. A konstans
rtkre a nevnek megadsval lehet hivatkozni. A vltozkkal ellenttben nem szabad $ jelet
tenned a konstans neve el. Hasznlhat mg a constant() fggvnyt is, ha pldul a konstans
nevt egy vltoz adja. A get_defined_constants() fggvnnyel lehet a definilt konstansok
listjt megkapni.
Megjegyzs: A konstansok s a (globlis) vltozk klnbz nvtrben vannak. Ez azt jelenti,
hogy a TRUE s a $TRUE kt klnbz dolgot jelent. Ha egy definilatlan konstanst prblsz
meg hasznlni, a PHP a konstans nevt veszi karaktersorozatknt rtkl. Ilyen esetekben egy
notice szint hiba keletkezik. A defined() fggvny segtsgvel vizsglhat a konstans ltezse.
<?php
define("KONSTANS", "Hell vilg!");
echo KONSTANS; // kirja, hogy "Hell vilg!"
echo Konstans; // kirja, hogy "Konstans" s hibt eredmnyez
?>

Kommentek
A PHP tmogatja a 'C', 'C++' s Unix shell-szer kommenteket. Pldul:
<?php
echo "Ez egy teszt"; // Ez egy egysoros c++ szer komment
/* Ez egy tbbsoros komment
Mg egy sor komment */
echo "Ez egy msik teszt";
echo "Ez az utols teszt"; # Ez egy shell-szer komment
?>
Az "egysoros" kommentek valjban csak a sor vgig, vagy az aktulis PHP kd vgig
tartanak, attl fggen, hogy melyik jn elbb.
<h1>Ez egy <?php# echo "egyszer";?> plda.</h1>
<p>A fenti fejlc kirja 'Ez egy egyszer plda'.

Opertorok

Opertorok precedencija
Az opertorok precedencija azt hatrozza meg, hogy milyen "szorosan" kt ssze kt kifejezst.
Pldul az 1 + 5 * 3 kifejezsben, a kifejezs rtke 16, s nem 18, mert a szorzs opertornak, a
("*")-nak nagyobb precedencija van, mint az sszeadsnak ("+"). Zrjelek segtsgvel
tetszleges precedencit lehet fellltani egy kifejezsen bell, ha szksges. Pldul a (1 + 5) * 3
eredmnye 18 lesz.
Az albbi tblzat az opertorokat precedencijuk szerint nvekv sorrendben tartalmazza.
Tblzat 10-1. Opertorok precedencija
asszociativits opertorok
balrl jobbra ,
balrl jobbra or
balrl jobbra xor
balrl jobbra and
jobbrl balra print
balrl jobbra = += -= *= /= .= %= &= |= ^= ~= <<= >>=
balrl jobbra ?:
balrl jobbra ||
balrl jobbra &&
balrl jobbra |
balrl jobbra ^
balrl jobbra &
nem kthet == != === !==
nem kthet < <= > >=
balrl jobbra << >>
balrl jobbra +-.
balrl jobbra */%
jobbrl balra ! ~ ++ -- (int) (float) (string) (array) (object) @
jobbrl balra []
nem kthet new

Aritmetikai opertorok
Tblzat 10-2. Aritmetikai opertorok
Plda Nv Eredmny
$a + $b sszeads $a s $b sszege
$a - $b Kivons $a s $b klnbsge
$a * $b Szorzs $a s $b szorzata
$a / $b Oszts $a s $b hnyadosa
$a % $b Modulus $a / $b maradka
Az oszts opertor ("/") egsz rtkkel tr vissza (egy egsz oszts eredmnyekppen) ha a kt
operandusa egsz (vagy string, ami egssz konvertldott) s a hnyados is egsz. Ha
valamelyik operandus lebegpontos szm, vagy az oszts eredmnye nem egsz, egy
lebegpontos szm a visszatrsi rtk.

Hozzrendel opertorok
Az alapvet hozzrendel opertor az "=". Elsre azt hihetnnk, hogy ez az "egyenl valamivel"
jele. Valjban azt jelenti, hogy a bal oldali operandus [ami az egyenlsgjel bal oldaln ll] a
jobb oldali kifejezst kapja rtkl.
A hozzrendel kifejezs rtke a bal oldalhoz rendelt rtk. Vagyis a "$a = 3" rtke 3. Ez
lehetsget ad nhny trkks dologra:
$a = ($b = 4) + 5; // $a most 9, s $b 4
Az alapvet hozzrendel opertoron fell vannak n. "kombinlt" opertorok is az sszes
ktoperandus aritmetikai s sztring opertorok szmra, amelyek lehetv teszik, hogy
hasznljunk egy vltozt egy kifejezsben, majd rgtn be is lltsuk a vltozt a kifejezs
rtkre. Pldul:
$a = 3;
$a += 5; // $a-t 8-ra lltja, mintha $a = $a + 5;-t rtunk volna
$b = "X ";
$b .= "Y"; // $b "X Y" lesz, egyenrtk prja: $b = $b . "Y";
A hozzrendels az eredeti vltozt az jba msolja rtk szerint, gy az egyiken elvgzett
vltoztatsok a msikat nem rintik. Ezt fontos tudni, pldul egy sokszor vgrehajtott ciklus
belsejben nagy tmbk msolsakor. A PHP 4 tmogatja a $var =&$othervar; szintaxis
referencia szerinti rtk hozzrendelst is, de ez PHP 3-ban nem mkdik. A 'referencia szerinti
rtkhozzrendels' azt jelenti, hogy mindkt vltoz ugyanarra az adatra fog mutatni, s nem
trtnik meg a vltoz rtknek lemsolsa.

Bitorientlt opertorok
A bitorientlt opertorok teszik lehetv, hogy egsz tpus szmokon bell bizonyos biteket
belltsunk, vagy lefedjnk (maszkols). Ha viszont az opertron mindkt oldaln sztring tpus
vltoz ll, akkor a bitorientlt opertorok a sztringek karakterein dolgoznak gy, hogy a
karakterek ASCII kdjain vgzik el a mveletet, s az eredmnyl add szmot ASCII kddal
megadott karakternek rtelmezi.
<?php
echo 12 ^ 9; // '5' -t r ki
echo "12" ^ "9"; // kirja a visszaperjel karaktert (ASCII #8), mert
// ('1' (ASCII #49)) ^ ('9' (ASCII #57)) = (ASCII #8)
echo "hallo" ^ "hello"; // eredmny: #0 #4 #0 #0 #0
// 'a' ^ 'e' = #4
?>
Tblzat 10-3. Bitorientlt opertorok
Plda Nv Eredmny
$a & Ott lesz '1' az eredmnyben, ahol $a s $b mindegyikben az a bit '1'-es.
s
$b Minden ms biten '0'.
Ott lesz '1' az eredmnyben, ahol $a s $b kzl legalbb az egyik azon a bitje
$a | $b Vagy
'1'-es. Minden ms biten '0'.
Ott lesz '1' az eredmnyben, ahol $a s $b kzl csakis pontosan az egyikben
$a ^ Kizr '1' llt. Minden ms biten '0'. [Ms kzeltsben ott lesz '1' az eredmnyben,
$b vagy ahol klnbz bitek lltak $a-ban s $b-ben; megint ms kzeltsben $a
azon bitjei invertldnak, amely helyeken $b-ben '1' ll]
~ $a Nem $a sszes bitjt invertlja
$a << Eltols $a bitjeit $b szm bittel balra tolja (minden bitnyi eltols 2-vel val szorzst
$b balra jelent [amg el nem fogynak a bitek, utols helyen eljelbit van ?!])
$a >> Eltols $a bitjeit $b szm bittel jobbra tolja (minden bitnyi eltols 2-vel val egsz-
$b jobbra osztst jelent. [Vigyzz, negatv szmot inkbb ne tolj jobbra!])

sszehasonlt opertorok
Az sszehasonlt opertorok, mint nevk is sugallja, kt rtk sszehasonltsra szolglnak.
Tblzat 10-4. sszehasonlt opertorok
Plda Nv Eredmny
$a == $b Egyenl Igaz (TRUE), ha $a s $b rtke egyenl
Igaz (TRUE), ha $a s $b rtke egyenl, s azonos tpusak (csak
$a === $b Azonos
PHP 4)
$a != $b Nem egyenl Igaz (TRUE), ha $a s $b rtkei klnbzk
$a <> $b Nem egyenl Igaz (TRUE), ha $a s $b rtkei klnbzk
Igaz (TRUE), ha $a s $b rtkei vagy tpusai klnbzk (csak
$a !== $b Nem azonos
PHP 4)
$a < $b Kisebb mint Igaz (TRUE), ha $a szigoran kisebb, mint $b
$a > $b Nagyobb mint Igaz (TRUE), ha $a szigoran nagyobb, mint $b
Kisebb, vagy
$a <= $b Igaz (TRUE), ha $a kisebb, vagy egyenl, mint $b
egyenl
Nagyobb, vagy
$a >= $b Igaz (TRUE), ha $a nagyobb, vagy egyenl, mint $b
egyenl
A feltteles "?:" (ternlis) opertor gyangy mkdik, mint C-ben s sok ms nyelvben.
(kif1) ? (kif2) : (kif3);
A kifejezs kif2-t rtkeli ki, ha kif1 igaznak bizonyul (TRUE), s kif3-at, ha kif1 hamis
(FALSE).

Hibakezel opertorok
A PHP egy hibakezel opertort tmogat, az at jelet (@ - kukac). PHP kifejezs el rva 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 hasznlhat informcik kinyerse rdekben a kifejezst kveten ezt minl hamarabb
ellenrizni kell.
<?php
/* Szndkos llomny megnyitsi hiba */
$file = @file ('nem_letezo_allomany') or
die ("Nem lehet megnyitni, a hiba: '$php_errormsg'");
// brmilyen kifejezsre mkdik, nem csak fggvnyekre
$ertek = @$tomb[$kulcs];
// nem ad notice szint hibt, ha a $kulcs kulcs nem ltezik
?>
Megjegyzs: A @ opertor csak kifejezsekre mkdik. Egyszer klszablyknt
alkalmazand, ha valaminek az rtelmezett az rtke, akkor az el a @ opertor is oda
tehet. Ekkppen pldul hasznlhat vltozk, fggvnyek s include() hvsok,
llandk neve eltt s sok ms esetben. Nem hasznlhat azonban fggvny s osztly
defincik vagy nyelvi szerkezetek (mint pldul if s foreach utastsok) eltt.
Vgrehajt opertorok
A PHP-ban ltezik egy program-vgrehajt opertor: a visszaidzjel (``). Ezek nem szimpla
idzjelek! A PHP megprblja a sztring tartalmt parancssorbl futtatand utastsknt
vgrehajtani, amelynek a kimenete lesz az opertor rtke. Ez nem egyszeren a kimenetre kerl,
hanem hozzrendelhet egy vltozhoz.
$output = `ls -al`;
echo "<pre>$output</pre>";
Nvel/cskkent opertorok
A PHP tmogatja a C-szer n. el- s utnvekmnyes ill. cskkent opertorokat.
Tblzat 10-5. Nvel/cskkent opertorok
Plda Nv Hats
++$a elnvekmnyes Nveli $a-t eggyel, majd visszaadja $a rtkt
$a++ utnvekmnyes Visszaadja $a rtkt, majd nveli $a-t eggyel
--$a elcskkent Cskkenti $a-t eggyel, majd visszaadja $a rtkt
$a-- utcskkent Visszaadja $a rtkt, majd cskkenti $a-t eggyel
Itt egy egyszer pldaprogram:
<?php
echo "<h3>Utnvekmnyes</h3>";
$a = 5;
echo "5-nek kell lennie: " . $a++ . "<br>\n";
echo "6-nak kell lennie: " . $a . "<br>\n";
echo "<h3>Elnvekmnyes</h3>";
$a = 5;
echo "6-nak kell lennie: " . ++$a . "<br>\n";
echo "6-nak kell lennie: " . $a . "<br>\n";
echo "<h3>Elcskkent</h3>";
$a = 5;
echo "5-nek kell lennie: " . $a-- . "<br>\n";
echo "4-nek kell lennie: " . $a . "<br>\n";
echo "<h3>Utcskkent</h3>";
$a = 5;
echo "4-nek kell lennie: " . --$a . "<br>\n";
echo "4-nek kell lennie: " . $a . "<br>\n";
?>

Logikai opertorok
Tblzat 10-6. Logikai opertorok
Plda Nv Eredmny
$a and $b s Pontosan akkor igaz (TRUE), ha mind $a mind $b igazak (TRUE).
$a or $b Vagy Pontosan akkor igaz (TRUE), ha $a s $b kztt van igaz (TRUE).
Kizr Pontosan akkor igaz (TRUE), ha $a s $b kzl pontosan egy igaz
$a xor $b
vagy (TRUE).
! $a Tagads Pontosan akkor igaz (TRUE), ha $a nem igaz (TRUE).
$a && $b s Pontosan akkor igaz (TRUE), ha mind $a mind $b igaz (TRUE).
$a || $b Vagy Pontosan akkor igaz (TRUE), ha $a s $b kztt van igaz (TRUE).

String opertorok
Kt string opertor van. Az egyik az sszefzs opertor ('.'), amely bal s jobb oldali
operandusnak sszefzttjvel tr vissza. A msodik az sszefz-hozzrendel opertor ('.='),
amely hozzfzi a jobb oldalon szerepl szveges rtket a bal oldali operandus vghez.
$a = "Para ";
$b = $a . "Zita"; // most $b rtke "Para Zita"

$a = "Drdarz ";
$a .= "Vilmos"; // most $a rtke "Drdarz Vilmos"
Vezrlsi szerkezetek
Az sszes PHP szkript utastsok sorozatbl ll. Az utasts lehet hozzrendel utasts,
fggvnyhvs, ciklus, feltteles utasts, vagy res utasts. Az utastsok ltalban
pontosvesszvel vgzdnek. Ezenkvl az utastsokat csoportostani lehet; utastsblokkba
foglalhatk kapcsos zrjelek segtsgvel. Az utastsblokkok maguk is utastsok. A klnfle
utaststpusokat ebben a fejezetben trgyaljuk.

if
Az if szerkezet az egyik legfontosabb szerkezete a legtbb nyelvnek - gy a PHP-nek is. A PHP a
C-ben megismerthez hasonl if szerkezettel br:
if (kifejezs)
utasts
Amint a kifejezsekrl szl fejezetben szerepel, a kifejezs logikai rtke rtkeldik ki. Ha
kifejezs TRUE, akkor a PHP vgrehajtja az utastst; ha FALSE, akkkor figyelmen kvl hagyja.
Arrl, hogy mely rtkek tekinthetk FALSE-nak, a Logikai rtkk alakts c. fejezetben
olvashatsz.
Az albbi plda kirja, hogy a nagyobb, mint b, ha $a nagyobb, mint $b:
if ($a > $b)
print "a nagyobb, mint b";

Gyakran sok utastst kell felttelhez ktve vgrehajtani. Termszetesen nem kell minden
utastshoz kln if-et rni. Az utastsokat utastsblokkba lehet sszefogni. Az albbi kd
pldul kirja, hogy a nagyobb, mint b ha $a nagyobb, mint $b, s utna hozzrendeli $a rtkt
$b-hez:
if ($a > $b) {
print "a nagyobb, mint b";
$b = $a;
}
A feltteles utastsok vg nlkl tovbbi if utastsokba gyazhatk, amely a program klnbz
rszeinek feltteles vgrehajtst igen hatkonny teszi.

else
Gyakori, hogy egy bizonyos felttel teljeslse esetn valamilyen utastst kell vgrehajtani, s
valamilyen msik utastst, ha nem teljesl a felttel. Erre val az else. Az else kibvti az if
utastst, hogy akkor hajtson vgre utastst, amikor az if kifejezs FALSE-knt rtkeldik ki.
Az albbi kd pldul kirja, hogy a nagyobb, mint b ha $a $b-nl nagyobb, egybknt az a NEM
nagyobb, mint b zenetet rja ki:
if ($a > $b) {
print "a nagyobb, mint b";
} else {
print "a NEM nagyobb, mint b";
}
Az else utasts csak akkor hajtdik vgre, ha az if kifejezs s az sszes elseif kifejezs is
FALSE rtk. Az elseif -rl most olvashatsz.

elseif
Az elseif, amint azt a neve is sugallja, az if s az else kombincija. Az else-hez hasonlan az if
utastst terjeszti ki, hogy klnbz utastsokat hajtson vgre abban az esetben, ha az eredeti if
kifejezs rtke FALSE lenne. Azonban az else-sel ellenttben csak akkor hajtra vgre az
alternatv kdrszt, ha az elseif kifejezs TRUE. Az albbi kd pldul - $a rtktl fggen -
dvzli Men Mant, s Vz Eleket, vagy kirja, hogy ismeretlen:
if ($a == "Men Man") {
print "Szervusz Men Man! Rg lttalak!";
} elseif ($a == 'Vz Elek') { #szimpla idzjel is hasznlhat
print "dv Vz Elek!";
} else {
print "Szervusz, idegen. Ht tged mi szl hozott ide?";
}
Egy if kifejezst tbb elseif kvethet. Az els olyan elseif kifejezs hajtdik vgre (ha van),
amely rtke TRUE. A PHP-ban az 'else if' is (klnrva) hasznlhat s ugyangy fog
viselkedni, mint az 'elseif' (egyberva). A szintaktikai jelents 'kicsit' eltr (ha ismered a C-t, nos
ez pont gy mkdik) de vglis ugyanaz lesz a vgeredmny.
Az elseif g csak akkor hajtdik vgre, ha az t megelz if kifejezs, s az sszes kztes elseif
kifejezsek FALSE rtkek, de az adott elseif kifejezse TRUE.

Vezrlsi szerkezetek alternatv szintaxisa


A PHP bizonyos vezrlsi szerkezeteihez egy alternatv szintaxist is nyjt; nv szerint: az if,
while, for, foreach, s switch szmra. Minden esetben az alternatv szintaxisnl a nyit kapcsos
zrjel helyett kettspontot (:) kell rni, a zr zrjel helyett pedig a vezrlsi szerkezetnek
megfelel endif;, endwhile;, endfor;, endforeach;, vagy endswitch; utastsokat rtelemszeren.
<?php if ($a == 5): ?>
A most ppen 5.
<?php endif; ?>
A fenti pldban az "A most ppen 5." egy alternatv szintaxis if kifejezsbe van gyazva. A
HTML rsz csak akkor rdik ki, ha $a egyenl 5-tel.
Az alternatv szintaxis az else-re s az elseif-re is alkalmazhat. Az albbi plda egy if szerkezet,
amiben van elseif s else is alternatv formban:
if ($a == 0.5):
print "a most fl.";
print "De vajon kitl?";
elseif ($a == 8):
print "Nekem nyolc, hogy mennyi az a.";
print "gyis megvltoztatom az rtkt.";
$a++;
else:
print "Ez gy nem vicces, hogy a se nem fl, se nem nyolc";
endif;

while
A while ciklusok a PHP legegyszerbb ciklusai. ppen gy viselkednek, mint a C nyelvbeli
megfelelik. A while ltalnos szintaxisa:
while (kifejezs) utasts
A while utasts jelentse egyszer. Azt mondja a PHP-nek, hogy mindaddig ismtelje az
utasts(ok) vgrehajtst, amg a while kifejezs TRUE. Itercinak nevezzk azt, amikor a PHP
egyszer vgrehajtja az utastst/utastsblokkot egy ciklus rszeknt. A kifejezs rtke a ciklus
kezdetekor rtkeldik ki, teht mg ha az utastsblokk belsejben hamiss is vlik a felttel, a
blokk vgrehajtsa akkor sem ll meg, csak az iterci vgn [feltve ha kzben megint meg nem
vltozik a felttel]. Amikor a while kifejezs rtke mr az els vizsglatkor FALSE, akkor az
utasts(blokk) egyszer sem kerl vgrehajtsra.
Az if szerkezethez hasonlan tbb utastst csoportostani lehet a while ciklusban kapcsos
zrjelekkel, vagy az alternatv szintaxis hasznlatval:
while (kifejezs): utasts ... endwhile;
Az albbi pldk ugyanazt csinljk - 1-tl 10-ig kirjk a szmokat:
/* 1. varici */
$i = 1;
while ($i <= 10) {
print $i++; /* a kirt rtk $i, csak
utna nvelnk
(post-inkrementci) */
}
/* 2. varici */

$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;

do..while
A do..while ciklusok nagyon hasonlak a while ciklusokhoz, a klnbsg mindssze annyi, hogy
a kifejezs igaz volta itt az iterci vgn rtkeldik ki, s nem az elejn. A f klnbsg a
hagyomnyos while ciklushoz kpest, hogy a do..while ciklus els itercija garantltan lefut (a
kifejezs igazsgrtkt csak az iterci vgn ellenrzi), amely nem garantlt a hagyomnyos
while ciklusnl (itt a kifejezs igazsgrtke az iterci kezdetn kerl kirtkelsre, ha rtke
kezdetben FALSE, akkor a ciklus vgrehajtsa azonnal befejezdik).
Csak egy szintaxisa van a do..while ciklusnak:
$i = 0;
do {
print $i;
} while ($i>0);
A fenti ciklus pontosan egyszer fut le, mert az els iterci utn, amikor a kifejezs igazsgrtke
vizsglatra kerl, kiderl, hogy FALSE ($i nem nagyobb, mint 0) s a ciklus vgrehajtsa
befejezdik.
Halad C programozk mr bizonyra jrtasak a do..while ciklus msfajta hasznlatban. Pldul
utastsblokk kzepn ki lehet lpni a blokkbl, ha az utastsblokkot do..while(0), kz tesszk,
s break utastst hasznlunk. A kvetkez kdrszlet ezt szemllteti:
do {
if ($i < 5) {
print "i nem elg nagy";
break;
}
$i *= $factor;
if ($i < $minimum_limit) {
break;
}
print" i most j";
...i feldolgozsa...
} while(0);
for
A for cilus a legbonyolultabb ciklus a PHP-ben. ppen gy viselkedik, mint a C nyelvbeli prja.
A for ciklus szintaxisa:
for (kif1; kif2; kif3) utasts
A fenti for szerkezettel megegyez az albbi, remlhetleg mr ismers kifejezs:
kif1;
while (kif2) {
utasts;
kif3;
}
Az els kifejezs (kif1) a ciklus kezdetn egyszer kerl vgrehajtsra. Minden iterci elejn kif2
kirtkeldik. Ha rtke TRUE, akkor a ciklus folytatdik, s az utastsra kerl a vezrls. Ha
rtke FALSE, akkor a ciklus vget r. Minden iterci vgn kif3 is vgrehajtsra kerl.
Brmelyik kifejezst el lehet hagyni. Ha kif2 res, az azt jelenti, hogy a ciklus a vgtelensgig fut
[hacsak nem jn a j tndr break utasts kpben...] (A PHP implicit TRUE-nak felttelezi az
res kif2-t, mint a C.) Ez nem annyira haszontalan, mint elsre amennyire elsnek tnik, hiszen
gyakran fejezheted be a ciklust egy feltteles kifejezsbe gyazott break kifejezssel a for felttel
kifejezsnek kirtkelse helyett. Nzd az albbi pldkat, mindegyikk kirja a szmokat 1-tl
10-ig:
/* tma*/
for ($i = 1; $i <= 10; $i++) {
print $i;
}
/* 1. varici */
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
print $i;
}
/* 2. varici */
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
print $i;
$i++;
}
/* 3. varici */
for ($i = 1; $i <= 10; print $i, $i++);
Termszetesen "a tma" a legbartsgosabb (vagy esetleg a 3. varici). Sok helyen hasznos
azonban, hogy res kifejezs is rhat for ciklusba...
A PHP a for ciklus esetn is megengedi az alternatv szintaxishasznlatt:
for (kif1; kif2; kif3): utasts; ...; endfor;
Ms nyelvekben ltezik az n. foreach szerkezet tmbk vagy hash-ek bejrsra. A PHP 3-ban
nincs ilyen, de a PHP 4-ben implementltk (lsd: foreach). PHP 3-ban a while, a list() s az
each() szerkezeteket hasznlhatod erre a clra.
foreach
A PHP 4-ben (nem a PHP 3-ban!) a Perlhez s ms nyelvekhez hasonlan ltezik az n. foreach
szerkezet is. Ez jl hasznlhat eszkzt ad a tmbkn vgzett itercikhoz. Kt szintaxisa
ltezik, a msodik egy apr, de hasznos kiegsztssel nyjt tbbet az elshz kpest.
foreach(tmb_kifejezs as $ertek) utasts
foreach(tmb_kifejezs as $kulcs => $ertek) utasts
Az els forma vgigmegy a tmb_kifejezs szolgltatta tmbn. Minden alkalommal az aktulis
elem rtke a $ertek vltozba kerl, s a bels tmb mutat nvelsre kerl. (A kvetkez
alkalommal teht a soron kvetkez elemet fogja venni). A msodik forma ugyanezt vgzi el, de
az aktulis elem kulcsa a $kulcs vltozba kerl. Megjegyzs: Amikor a foreach indul, a bels
tmb mutat az els elemre ll. Ez azt jelenti, hogy nem kell meghvni a reset() fggvnyt egy
foreach ciklus eltt.
reset ($tomb);
while (list(, $ertek) = each ($tomb)) {
echo "rtk: $ertek<br>\n";
}
foreach ($tomb as $ertek) {
echo "rtk: $ertek<br>\n";
}
Az albbiak is azonos eredmnyt szolgltatnak:
reset ($tomb);
while (list($kulcs, $ertek) = each ($tomb)) {
echo "Kulcs: $kulcs, rtk: $ertek<br>\n";
}
foreach ($tomb as $kulcs => $ertek) {
echo "Kulcs: $kulcs, rtk: $ertek<br>\n";
}

break
A break azonnal kilp az aktulis for, foreach, while, do..while ciklusbl vagy switch
szerkezetbl. A break elfogad egy elhagyhat szm paramtert, amely megadja, hogy hny
egymsba gyazott struktrbl kell egyszerre 'kiugrani'.
$tomb = array ('egy', 'kett', 'hrom', 'ngy', 'stop', 't');
while (list (, $ertek) = each ($tomb)) {
if ($ertek == 'stop') {
break; /* rhattl volna ide 'break 1;'-et is */
}
echo "$ertek<br>\n";
}
/* Az elhagyhat paramter hasznlata */
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "5 esetn<br>\n";
break 1; /* csak a switch-bl lp ki */
case 10:
echo "10 esetn kilps<br>\n";
break 2; /* a switch s a while befejezse */
default:
break;
}
}
continue
A continue ciklusok belsejben hasznlhat arra, hogy tugorjuk az aktulis iterci htralev
rszt, s a vgrehajtst a kvetkez itercival folytassuk. A continue elfogad egy elhagyhat
szm paramtert, amely megadja, hogy hny egymsba gyazott struktrnak a htralv rszt
kell tugrani.
while (list ($kulcs, $ertek) = each ($tomb)) {
if (!($kulcs % 2)) { // a pros indexek kihagysa
continue;
}
valami_paratlan_dolog ($ertek);
}
$i = 0;
while ($i++ < 5) {
echo "Kls while<br>\n";
while (1) {
echo "&nbsp;&nbsp;Kzps while<br>\n";
while (1) {
echo "&nbsp;&nbsp;Bels while<br>\n";
continue 3;
}
echo "Ezt soha nem fogja kirni.<br>\n";
}
echo "Ezt sem...<br>\n";
}

switch
A switch kifejezs hasonl egy sereg IF kifejezshez, ahol a kifejezsekben ugyanaz szerepel.
[Pont olyan, mint a C-ben]. Gyakori, hogy ugyanazt a vltozt (vagy kifejezst) kell
sszehasonltani tbb klnbz rtkkel, s ms-ms kdot vgrehajtani a vltoz (kifejezs)
rtktl fggen. Pontosan erre val a switch. Az albbi kt plda kt klnbz mdon rja ki
ugyanazt, az egyik egy sor if kifejezst hasznl, a msik pedig a switch-et:
if ($i == 0) {
print "i most 0";
}
if ($i == 1) {
print "i most 1";
}
if ($i == 2) {
print "i most 2";
}
switch ($i) {
case 0:
print "i most 0";
break;
case 1:
print "i most 1";
break;
case 2:
print "i most 2";
break;
}
A hibk elkerlse vgett fontos megrteni, hogy hogyan kerl vgrehajtsra a switch szerkezet.
A switch vagyis utastsrl utastsra hajtdik vgre. Nem hajtdik vgre semmilyen utasts,
csak akkor, ha egy olyan case kifejezst tall a PHP, amely egyezik a switch kifejezs rtkvel.
Ezutn a PHP addig folytatja az utastsok vgrehajtst, amg el nem ri a switch blokk vgt,
vagy nem tallkozik egy break utastssal. FONTOS! Ha nem nincs break egy case-hez tartoz
utasts(sorozat) vgn, akkor a PHP vgrehajtja a soron kvetkez case-hez tartoz utastsokat
is! Pldul:
switch ($i) {
case 0:
print "i most 0";
case 1:
print "i most 1";
case 2:
print "i most 2";
}
Itt, ha $i rtke 0, akkor a PHP az sszes kir utastst vgrehajtja! Ha $i rtke 1, akkor a PHP
az utols kt print-et hajtja vgre, s csak ha $i rtke 2, akkor kapod a 'kvnt' eredmnyt (csak
az 'i most 2' rdik ki). Teht nagyon fontos nem elfelejteni a break utastst (br bizonyos
krlmnyek kztt lehet, hogy pont ennek elhagysa a szndkos). A switch kifejezsben a
felttel csak egyszer rtkeldik ki s a kapott eredmny lesz sszehasonltva a case kifejezsek
mindegyikvel. Ha elseif kifejezseket hasznlsz, a kifejezsek jra s jra kirtkeldnek. [s
jra s jra be kell gpelni. Ez nem csak fraszt, de hiba forrsa is lehet.] Ha a kifejezs
bonyolult, vagy egy ciklus belsejben van, a switch a gyorsabb. Egy eset (case) utastslistja
res is lehet, gy a vezrls a kvetkez case-cmkre addik.
switch ($i) {
case 0:
case 1:
case 2:
print "i 3-nl kisebb, de nem negatv";
break;
case 3:
print "i pont 3";
}
Egy klnleges eset a default [alaprtelmezett] cmke. Ez a cmke brmivel egyezik, amivel a
korbbi case elemek nem egyeztek. Ennek kell az utols elemnek lennie. Pldul:
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 case kifejezs tetszleges kifejezs, aminek egyszer a tpusa, vagyis egsz vagy lebegpontos
szm, vagy string. Tmbk s objektumok itt nem hasznlhatk, csakis egy-egy elemk ill.
vltozjuk egyszer tpusknt.
Az alternatv szintaxis mkdik a switch-ekkel is. Bvebb informcirt lsd: Vezrlsi
szerkezetek alternatv szintaxisa.
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";
endswitch;

declare
A declare egy kdblokk szmra adott futtatsi direktvk belltst teszi lehetv. A declare
szintaxisa hasonl a vezrlsi szerkezetekhez:
declare (direktva) utasts
A direktva rsz a declare blokk mkdst szablyozza. Jelenleg csak egy direktva hasznlhat,
a ticks. (Lsd lejjebb a ticks rszleteit) A declare blokk utasts rsze mindig egyszer fut le. Az,
hogy mikpp, s milyen mellkhatsokkal, a direktva rszben megadottaktl fgg.

Tick-ek
A tick egy olyan esemny, amely minden N db alacsony szint utasts vgrehajtsakor
bekvetkezik a declare blokkban. Az N rtket a ticks=N szintaxissal kell megadni a declare
blokk direktva rszben. Az egyes tick-ekre bekvetkez esemny(ek) a register_tick_function()
fggvnnyel llthat(ak) be. Lsd az albbi pldt. Akr tbb esemny is bekvetkezhet egy
tick-re. Plda A PHP kd egy rsznek idmrse
<pre>
<?php
// Ez a fggvny megjegyzi a hvsa idpontjait
function idopontok ($visszaadni = FALSE)
{
static $idopontok;
// Visszaadja a $profile tartalmt, s trli
if ($visszaadni) {
$idok = $idopontok;
unset ($idopontok);
return ($idok);
}
$idopontok[] = microtime();
}
// A tick kezel belltsa
register_tick_function("idopontok");
// Belltjuk az els idpontot a declare eltt
idopontok();
// A kdblokk futtatsa, minden msodik utasts egy tick
declare (ticks = 2) {
for ($x = 1; $x < 50; ++$x) {
echo similar_text (md5($x), md5($x*$x)), "<br>";
}
}
// Az idmr fggvny adatainak kirsa
print_r (idopontok(TRUE));
?>
</pre>
A fenti plda a declare blokkban lv PHP kd sebessgt mri, rgztve minden msodik
alacsonyszint utasts vgrehajtsnak idpontjt. Ez az informci alkalmas lehet arra, hogy
megtalld a lassan fut rszeket a kdodban. Ezt a hatst mskpp is el lehet rni, de tick-eket
hasznlva sokkal knyelmesebb s knnyebben megvalsthat megoldst kapsz. A tick-ek
kivlan alkalmasak hibakeressre, egyszer multitasking megvalstsra, httrben futattott
I/O-ra, s sok ms feladatra.

return
A return() utasts fggvnyen bell hasznlva azonnal befejezi a foly fggvny futst, s a
paramtereknt megadott rtk szolgltatja a fggvny visszatrsi rtkt. A return() az eval()
fggvnnyel futatott kd vagy a szkript futst is lelltja. A globlis rvnyessgi krben
hasznlva a foly szkript futst szaktja meg. Ha ez a szkript az include() vagy a require()
hatsra lett futtatva, akkor a vezrls visszaaddik arra a fjlra, ahol ezek az utastsok
szerepelnek, valamint include() esetn a return() paramtere lesz az include() utasts visszatrsi
rtke. Ha a return() a f szkriptben lett kiadva, akkor befejezdik a szkript futsa. Ha ez a
auto_prepend_file vagy auto_append_file konfigurcis belltsban szerepl fjlok
valamelyikben trtnik (lsd: konfigurcis fjl) akkor, (csak) ezeknek a futsa fejezdik be.

require()
A require() beilleszti s feldolgozza a megadott fjlt. Ennek rszletes mikntjrl, lsd include()!
A require() s az include() megegyezik egymssal a hibakezelst leszmtva. Az include() nem
fatlis hibt, figyelmeztetst generl, a require() viszont fatlis hibt jelez. Msszval, ahol az
ignyelt fjl nemltekor a futst meg kell szaktani, ajnlott a require(). Az include() nem gy
viselkedik, a hibtl fggetlenl a szkript futtatsa folytatdik. Bizonyosodj meg, hogy a
include_path helyesen van belltva! Egyszer require() pldk
<?php
require 'prepend.php';
require $valamifajl;
require ('valamifajl.txt');
?>
Megjegyzs: PHP 4.0.2 eltt, a kvetkezk szerint mkdtt. A require() mindig beolvasta a
kvnt fjlt, mg ha az a require()-t tartalmaz sorra soha nem is kerlt vezrls. A feltteles
szerkezetek nem befolysoltk a mkdst. Mgis, ha a require()-t tartalmaz sorra nem kerlt
vezrls a megadott fjlban lv kd nem futott le. Ehhez hasonlan, a ciklusok sem
befolysoltk a mkdst. Habr a fjlban szerepl kd fggtt az azt krllel ciklustl, a
require() maga csak egyszer trtnt meg.

include()
Az include() beilleszti s feldolgozza a megadott fjlt. Az albbiak igazak a require()-ra is. A
require() s az include() megegyezik egymssal a hibakezelst leszmtva. Az include() nem
fatlis hibt, figyelmeztetst generl, a require() viszont fatlis hibt jelez. Magyarn, ahol az
ignyelt fjl nemltekor a futst meg kell szaktani, ajnlott a require(). Az include() nem gy
viselkedik, a hibtl fggetlenl a szkript futtatsa folytatdik. Bizonyosodj meg, hogy a
include_path helyesen van belltva! A fjl beillesztse sorn a megadott fjl rkli az include()
helyn rvnyes vltoz hatskrt. Brmely vltoz, amely azon a ponton elrhet, elrhet a
beillesztett fjlban is. Egyszer include() plda
valtozok.php
<?php
$szin = 'zld';
$gyumolcs = 'alma';
?>
teszt.php
<?php
echo "Egy $szin $gyumolcs"; // Egy
include 'valtozok.php';
echo "egy $szin $gyumolcs"; // Egy zld alma
?>
Fggvny belsejben a megadott fjlban szerepl kd gy fog viselkedni, mintha az magban a
fggvnyben szerepelt volna. Ez azt jelenti, hogy a fjl rkli a vltozk rvnyessgi krt.
Fggvnyen belli beilleszts:
<?php
function ize()
{
global $szin;
include 'valtozok.php';
echo "Egy $szin $gyumolcs";
}
/* valtozok.php az ize() fggvny hatkrbe esik, *
* gy a $gyumolcs nem elrhet a fggvnyen kvl. *
* A $szin igen, mivel globlisnak lett deklarlva. */
ize(); // Egy zld alma
echo "Egy $szin $gyumolcs"; // Egy zld
?>
Ha egy fjlt beillesztnk az include()-dal vagy require()-ral, akkor a clfjl elejn az elemz kilp
a PHP mdbl HTML mdba, majd visszall PHP mdba a fjl vgn. Ennek okn brmely
beillesztend fjlban lev PHP kdot kzre kell fogni egy rvnyes PHP kezd- s zrjellssel.
Ha az include()-dal hvott fjl HTTP-n keresztl rkezik az "fopen wrapper"-ek hasznlatval, s
a clszerver PHP kdknt feldolgozza a fjlt, akkor tadhatsz vltozkat a hvott fjlnak HTTP
GET lekrsi formban. Ez nem teljesen ugyanaz, mintha a include()-dal hvott fjl rkln a
helyi vltozkat, mivel a szkript valjban a tvoli szerveren fut le, s a futsi eredmny kerl
beptsre a helyi szkriptbe. Include() HTTP-n keresztl
/* Ezek a pldk felttelezik, hogy a szerver be van lltva a .php *
* fjlok feldolgozsra s nincs belltva a .txt fjlok feldolgozsra *
* A 'mkdik' azt jelenti, hogy az $ize s $bigyo vltozk elrhetek *
* a hvott fjlban. */
// Nem mkdik: a file.txt nem kerl feldolgozsra
include ("http://szerver/file.txt?ize=1&bigyo=2");
// Nem mkdik: egy 'file.php?ize=1&bigyo=2' nev fjlt keres a helyi gpen
include ("file.php?ize=1&bigyo=2");
// Mkdik
include ("http://szerver/file.php?ize=1&bigyo=2");
$ize = 1;
$bigyo = 2;
include ("file.txt"); /* Mkdik */
include ("file.php"); /* Mkdik */
Mivel az include() s a require() klnleges nyelvi elem, kapcsos zrjelekkel kell kzrefogni, ha
egy feltteles utastson bell szerepel. Include() feltteles blokkon bell
/*Ez NEM J, s nem a vrt eredmnyt adja */
if ($feltetel)
include($file);
else
include($other);
/* Ez a HELYES */
if ($feltetel) {
include($file);
} else {
include($other);
}
return utastst lehet elhelyezni egy include()-olt fjlban annak rdekben, hogy a kirtkels ott
befejezdjn, s visszaadjon egy rtket a hv szkriptnek. A visszatrsi rtket ugyangy
hasznlhatod, mint egy kznsges fggvnynl. Megjegyzs: PHP 3, a return nem jelenhet meg
fggvny blokkon kvl mshol, amely esetben a fggvnyb ltrtn visszatrst jelli. Az
include() s a return() utasts
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$ize = include 'return.php';
echo $ize; // kirja: 'PHP'
$bigyo = include 'noreturn.php';
echo $bigyo; // kirja: 1
?>
$bigyo rtke 1, mert a beilleszts sikeres volt. Figyeld meg a klnbsget a kt fenti plda
kztt. Az els a return() segtsgvel visszaadott egy rtket, a msodik nem. Ltezik mg
nhny egyb mdja is vltozk beemelsnek a fopen(), file() segtsgvel, vagy include() s
Kimenet szablyz fggvnyek egyttes hasznlatval.

require_once()
Az require_once() beilleszt s feldolgoz fjlokat a program futsa kzben. Ez hasonl az
require() mkdshez, azzal a fontos klnbsggel, hogy ha a mr egyszer beillesztsre kerlt
kdot a PHP nem prblja meg ismt betlteni. A require_once() hasznlatos azokban az
esetekben, amikor ugyanaz a fjl esetleg tbbszr kerlhet beillesztsre a szkript futsa sorn, de
biztostani kell, hogy ez tnylegesen csak egyszer trtnjen meg, gy megelzve a fggvnyek
jradefinilst, vltozk rtknek tlltst, stb.

include_once()
Az include_once() beilleszt s feldolgoz fjlokat a program futsa kzben. Ez hasonl az
include() mkdshez, azzal a fontos klnbsggel, hogy ha a mr egyszer beillesztsre kerlt
kdot a PHP nem prblja meg ismt betlteni. Az include_once() hasznlatos azokban az
esetekben, amikor ugyanaz a fjl esetleg tbbszr kerlhet beillesztsre a szkript futsa sorn, de
biztostani kell, hogy ez tnylegesen csak egyszer trtnjen meg, gy megelzve a fggvnyek
jradefinilst, vltozk rtknek tlltst, stb.

Fggvnyek

Felhasznl ltal definilt fggvnyek


Fggvnyeket a kvetkez szintaxis szerint definilhatod:
function foo ($arg_1, $arg_2, ..., $arg_n)
{
echo "Plda fggvny.\n";
return $retval;
}
Brmely rvnyes PHP kd megjelenhet egy fggvnyen bell, akr mg ms fggvny vagy
osztly defincik is. PHP 3-ban a fggvnyeket definilni kell, mieltt hivatkozs trtnik rjuk
(fggvnyhvs eltt). PHP 4-ben nincs ez a megkts. A PHP nem tmogatja a fggvnyek
polimorfizmust (tbbalaksgt), a fggvnyekdefincikat nem lehet megszntetni vagy
jradefinilni egy mr definilt fggvnyeket. A PHP 3 nem tmogatja a vltoz szm
fggvnyargumentumokat, br az argumentumok kezdrtke tmogatott. Lsd az
Argumentumok kezdrtke cm rszt bvebb informcirt. A PHP 4 mindkett lehetsget
tmogatja. Lsd a Vltoz szm fggvnyargumentumok cm rszt s a func_num_args(),
func_get_arg() s a func_get_args() fggvnyeket rszletesebb lersrt.

Fggvnyargumentumok
Az informci a fggvnyekhez az argumentumlistn keresztl jut el, ami egy vesszvel hatrolt
vltoz s/vagy konstanslista. A PHP tmogatja az rtk szerinti (ez az alaprtelmezett)
referenciaknti paramtertadst is, s az argumentumok kezdrtkt. A vltoz hosszsg
argumentumlistk csak a PHP 4-ben jelentek meg. Lsd a vltoz hosszsg
argumentumlistkat s a func_num_args(), func_get_arg() s a func_get_args() fggvnyeket
rszletesebb lersrt. PHP 3-ban hasonl hats rhet el a fggvnynek tmb tpus vltoz
paramterknt trtn tadsval:
function tombot_kezel($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}

Referencia szerinti argumentumfeltlts


Alaprtelmezsben a fggvny paramterei rtk szerint addnak t (vagyis ha megvltoztatod a
vltozt a fggvnyen bell, annak a fggvnyen kvlre nincs hatsa). Ha szeretnd
megengedni, hogy a fggvny mdostsa az tadott paramtereket, referencia szerint kell tadni
azokat. Ha egy fggvnyargumentum mindig referencia szerint kell tadni, akkor a
fggvnydefinciban az argumentum neve el egy & jelet kell rni.
function fgv_extrakkal(&$string)
{
$string .= 's a szksges plusssz.';
}
$str = 'Ez egy karakterfzr, ';
fgv_extrakkal($str);
echo $str; // kirja, hogy 'Ez egy karakterfzr, s a szksges plusssz.'
Argumentumok kezdrtkei
Brmely fggvny skalr-argumentumainak megadhatsz kezdrtket a C++ szintaxisnak
megfelelen:
function kavet_csinal ($tipus = "cappucino")
{
return "Csinlok egy pohr " . $tipus . "t.\n";
}
echo kavet_csinal ();
echo kavet_csinal ("espresso");
A fenti kd kimenete: Csinlok egy pohr cappucinot.
Csinlok egy pohr espressot.
A kezdrtknek konstans kifejezsnek kell lennie, nem lehet pl. vltoz vagy objektum. Figyelj
arra, hogy a kezdrtkkel rendelkez argumentumok ms argumentumoktl jobbra
helyezkedjenek el; klnben a dolgok nem gy mennek majd, ahogy azt vrnd Lsd a
kvetkez kdot:
function joghurtot_keszit ($type = "acidophilus", $flavour)
{
return "Ksztek egy kcsg $flavour z $type-t.\n";
}
echo joghurtot_keszit ("eper"); // nem gy mkdik, mint szeretnd !?!?
A fenti plda kimenete: Warning: Missing argument 2 in call to joghurtot_keszit() in
/usr/local/etc/httpd/htdocs/phptest/functest.php on line 41
Ksztek egy kcsg z eper-t.
Most hasonltsd ssze az albbival:
function joghurtot_keszit ($flavour, $type = "acidophilus")
{
return "Ksztek egy kcsg $flavour z $type-ot.\n";
}
echo joghurtot_keszit ("eper"); // ez mr j
A fenti plda kimenete: Ksztek egy eper z acidophilus-t.

Vltoz hosszsg argumentumlista


A PHP 4 tmogatja a vltoz hosszsg argumentumlistt a felhasznlk ltal definilt
fggvnyekben. Valban nagyon egyszer kezelni ezt a func_num_args(), func_get_arg() s a
func_get_args() fggvnyekkel. Semmilyen klnleges szintakszist nem ignyel s az
argumentumlista lehet explicit mdon adott s viselkedhet gy is, mint egy norml fggvny.

Visszatrsi rtkek
Az elhagyhat return lltst hasznlva adhatnak vissza rtket a fggvnyek. Brmely tpus
visszaadhat, belertve a listkat s az objektumokat is. A fggvny vgrehajtsa azonnal
befejezdik, s a vezrls visszakerl a fggvnyhvs utni pozciba. Tovbbi rszletes
informcikrt lsd: return()!
function negyzete ($num)
{
return $num * $num;
}
echo negyzete (4); // kirja '16'.
Tbb rtket nem tud visszaadni a fggvny, de hasonl hats rhet el ezen tbbszrs rtkek
listba szervezsvel.
function kis_szamok()
{
return array (0, 1, 2);
}
list ($nulla, $egy, $ketto) = kis_szamok();
Ha a fggvnynek referencival kell visszatrnie, akkor az & referencia opertort kell
alkalmaznod a fggvny deklarskor s a a visszatrsi rtk megadsakor is.
function &referenciat_ad_vissza()
{
return &$valtozo;
}
$hivatkozas = &referenciat_ad_vissza();

Fggvnyvltozk
A PHP lehetv teszi a fggvnyvltozk hasznlatt. Ha egy vltoznevet kerek zrjelek
kvetnek, akkor a PHP megkeresi a vltoz rtkvel azonos nev fggvnyt, s megprblja azt
vgrehajtani. Ezt tbbek kztt visszahvand (callback) fggvnyek vagy fggvnytblk
implementlsra hasznlhat.
A fggvnyvltozk nem fognak mkdni az olyan nyelvi elemekkel, mint pldul az echo(),
unset(), isset(), empty() vagy include(). Habr a print() nyelvi elem kivtel. Ez az egyik
legjelentsebb klnbsg a PHP fggvnyek s nyelvi elemek kztt. Fggvnyvltoz plda
<?php
function ize()
{
echo "Az ize()-ben<br>\n";
}
function bigyo($param = '')
{
echo "A bigyo()-ban; az argumentum:'$param'.<br>\n";
}
$func = 'ize';
$func();
$func = 'bigyo';
$func('Stex van Boeven');
?>

Fejezet. Osztlyok, objektumok

class
Az osztly (objektumtpus) vltozk s rajtuk mveletet vgz fggvnyek [metdusok]
egyttese. Osztlyt az albbi szintakszis szerint lehet definilni:
<?php
class Kosar
{
var $dolgok; // A kosrban lev dolgok

// berak a kosrba $db darabot az $sorsz index dologbl


function berak ($sorsz, $db)
{
$this->dolgok[$sorsz] += $db;
}
// kivesz a kosrbl $db darabot az $sorsz index dologbl
function kivesz ($sorsz, $db)
{
if ($this->items[$sorsz] > $db) {
$this->items[$sorsz] -= $db;
return true;
} else {
return false;
}
}
}
?>
Ez definil egy Kosar nev osztlyt, ami a kosrban lev ruk asszociatv tmbjbl ll, s
definil 2 funkcit hozz, hogy bele lehessen rakni, illetve kivenni a kosrbl.
/* Egyik albbi rtkads sem mkdik PHP 4-ben */
class Kosar
{
var $mai_datum = date("Y. m. d.");
var $nev = $csaladi_nev;
var $tulajdonos = 'Ferenc ' . 'Jnos';
var $termekek = array("Vide", "TV");
}
/* gy kell a fenti belltsokat elrni */
class Kosar
{
var $mai_datum;
var $nev;
var $tulajdonos;
var $termekek;
function Kosar()
{
$this->mai_nap = date("Y. m. d.");
$this->nev = $GLOBALS['csaladi_nev'];
/* stb. . . */
}
}
Az osztlyok tpusok, vagyis az aktulis vltozk tervrajzai. A kvnt tpus vltozt a new
opertorral hozhatod ltre.
$kosar = new Kosar;
$kosar->berak("10", 1);
$masik_kosar = new Kosar;
$masik_kosar->berak("0815", 3);
Ez ltrehozza a Kosar objektumosztly $kosar s $masik_kosar nev objektumpldnyait. A
$kosar objektum berak() fggvnyt meghvtuk, hogy a 10-es szm rucikkbl rakjon 1 darabot
a kosrba. Hrom darab 0815 szm ternk kerlt a $masik_kosar nev kosrba. Mind a $kosar,
mind a $masik_kosar objektumoknak megvannak a berak() s kivesz() metdusai, s
tulajdonsgai. Ezek azonban egymstl fggetlen metdusok s tulajdonsgok. Az objektumokrl
hasonlan gondolkozhatsz, mint a knyvtrakrl az llomnyrendszerben. Lehetsges, hogy kt
klnbz OLVASSEL.TXT llomnyod van, ha ezek kt klnbz knyvtrban vannak. gy
mint a knytraknl, ahol meg kell adnod a teljes elrsi utat, hogy egy llomnyra szeretnl
hivatkozni a gykrknyvtrban, a teljes metdusnevet meg kell adnod, hogy meg tudd azt hvni.
A PHP nyelvben a gykrknyvtr analgija a globlis krnyezet, s az elrsi t elvlasztja a
->. Ezrt a $kosar->dolgok nv s a $masik_kosar->dolgok nv kt klnbz vltozt ad meg.
Figyeld meg, hogy a vltozt $kosar->dolgok nven kell elrni, s nem $kosar->$dolgok nven,
azaz a PHP vltozk neveiben csak egy dollrjelet kell tenned.
// helyes, egy dollrjel
$kosar->dolgok = array("10" => 1);
// helytelen, mivel a $kosar->$dolgok rtelme $kosar->""
$kosar->$dolgok = array("10" => 1);
// helyes, de lehetsges, hogy nem a megclzott eredmny
// $kosar->$valtozo rtelme $kosar->dolgok
$valtozo = 'dolgok;
$kosar->$valtozo = array("10" => 1);
Egy osztly definilsakor nem tudhatod, milyen nven lesz majd elrhet az objektumod a PHP
programban: a Kosar osztly ksztse idejn nem volt ismert, hogy ksbb $kosar vagy
$masik_kosar nven nevezzk-e majd az objektumpldnyt. Ezrt nem rhatod a Kosar
osztlyban, hogy $kosar->dolgok. De hogy el tudjad rni az osztly sajt metdusait s
tulajdonsgait az objektumpldny(ok) nevtl fggetlenl, hasznlhatod a $this kvzi-vltozt,
amit 'a sajtom' vagy 'az aktulis objektumpldny' rtelemben alkalmazhatsz. Ezrt a '$this-
>dolgok[$sorsz] += $db' gy olvashat, hogy 'adj $db darab $sorsz sorszm termket a sajt
dolgok tmbmhz', vagy 'adj $db darab $sorsz sorszm termket az aktulis objektumpldny
dolgok tmbjhez'.

extends
Gyakori, hogy szeretnl olyan osztlyokat kialaktani, amelyek egy mr meglv osztlyhoz
hasonl tulajdonsgokkal s metdusokkal rendelkeznek. Tulajdonkppen j gyakorlat egy
ltalnos osztlyt definilni, amit minden projektedben hasznlhatsz, s ezt az osztlyt alaktani
az egyes projektek ignyeinek megfelelen. Ennek a megvalstsa rdekben az osztlyok
lehetnek ms osztlyok kiterjesztsei. A kiterjesztett, vagy szrmaztatott osztly minden
tulajdonggal s metdussal rendelkezik, ami a kiindulsi osztlyban megvolt (ezt nevezzk
rklsnek, br senki sem hal meg a folyamat sorn). Amit hozzadsz a kiindulsi osztlyhoz, azt
nevezzk kiterjesztsnek. Nem lehetsges megcsonktani egy osztlyt, azaz megszntetni egy
metdust, vagy tulajdonsgot. Egy leszrmazott osztly mindig pontosan egy alaposztlytl fgg,
azaz egyidejleg tbbszrs leszrmaztats nem tmogatott. A kiterjeszts kulcsszava az
'extends'.
class Gazdas_Kosar extends Kosar
{
var $tulaj;

function tulajdonosa ($nev)


{
$this->tulaj = $nev;
}
}
Ez definil egy Gazdas_Kosar nev osztlyt, ami a Kosar sszes vltozjval s metdusval
rendelkezik, s van egy sajt vltozja, a $tulaj, no meg egy sajt metdusa, a tulajdonosa(). A
gazds kosarat a hagyomnyos mdon hozhatod ltre, s a kosr tulajdonost is be tudod lltani,
le tudod krdezni [ebben az esetben favg mdszerrel]. A gazds kosarakon tovbbra is lehet
hasznlni a Kosar fggvnyeit:
$gkosar = new Gazdas_Kosar; // Gazds kosr ltrehozsa
$gkosar->tulajdonosa ("Namilesz Teosztasz"); // a tulaj belltsa
print $gkosar->tulaj; // a tulajdonos neve
$gkosar->break ("10", 1); // (Kosar-bl rkltt funkcionalits)
Konstruktor
Figyelem A PHP 3 s PHP 4 konstruktorok klnbzkppen mkdnek. A PHP 4 megvalstsa
ersen javasolt. A konstruktorok az osztlyok olyan metdusai, amelyek automatikusan
meghvsra kerlnek egy j objektumpldny new kulcsszval trtn ltrehozsa sorn. A PHP
3-ban egy metdus akkor tekinthet konstruktornak, ha a neve megyezik az osztly nevvel. A
PHP 4-ben egy metdus akkor lesz kostruktorr, hogy a neve megegyezik annak az osztlynak a
nevvel, ahol deifiniltk. A klnbsg hajszlnyi, de kritikus (lsd lentebb).
// A PHP 3 s PHP 4 verzikban is mkdik
class Auto_Kosar extends Kosar
{
function Auto_Kosar ()
{
$this->berak ("10", 1);
}
}
Ez egy olyan Auto_Kosar nev osztlyt [objektumtpust] hoz ltre, mint a Kosar, csak
rendelkezik egy konstruktorral, amely inicializlja a kosarat 1 darab "10"-es ruval, valahnyszor
a new opertorral hozzuk ltre az objektumot. [de csak akkor!!!] A konstruktoroknak is lehet
tadni paramtereket, s ezek lehetnek elhagyhatk is, amely mg hasznosabb teszi ket. Ha
paramterek nlkl is hasznlhat osztlyt szeretnl, llts be minden paramternek alaprtket.
// A PHP 3 s PHP 4 verzikban is mkdik
class Konstruktoros_Kosar extends Kosar
{
function Konstruktoros_Kosar ($sorsz = "10", $db = 1)
{
$this->berak ($sorsz, $db);
}
}
// Mindig ugyanazt az uncsi dolgot veszi...
$kiindulo_kosar = new Konstruktoros_Kosar;
// Igazi vsrls
$masik_kosar = new Konstruktoros_kosar ("20", 17);
A PHP 3-ban a leszrmazott osztlyokra s konstrukrotokra szmos korltozs van. Az albbi
pldkat rdemes alaposan ttekinteni, hogy megrtsd ezeket a korltozsokat.
class A
{
function A()
{
echo "n vagyok az A osztly konstruktora.<br>\n";
}
}
class B extends A
{
function C()
{
echo "n egy metdus vagyok.<br>\n";
}
}
// PHP 3-ban semmilyen konstruktor sem kerl meghvsra
$b = new B;
PHP 3-ban semmilyen konstruktor sem kerl meghvsra a fenti pldban. A PHP 3 szablya a
kvetkez: 'A konstruktor egy metdus, aminek ugyanaz a neve, mint az osztlynak'. Az osztly
neve B, s nincs B() nev metdus a B osztlyban. Semmi sem trtnik. Ez a PHP 4-ben ki van
javtva egy msik szably bevezetsvel: Ha az osztlyban nincs konstruktor, a szl osztly
konstruktora hvdik meg, ha ltezik. A fenti plda kimenete 'n vagyok az A osztly
konstruktora.<br>' lett volna PHP 4-ben.
class A
{
function A()
{
echo "n vagyok az A osztly konstruktora.<br>\n";
}
function B()
{
echo "n egy B nev metdus vagyok az A osztlyban.<br>\n";
echo "Nem vagyok A konstruktora.<br>\n";
}
}
class B extends A
{
function C()
{
echo "n egy metdus vagyok.<br>\n";
}
}
// Ez meghvja B()-t, mint konstruktort
$b = new B;
A PHP 3-ban az A osztly B() metdusa hirtelen konstruktorr vlik a B osztlyban, habr ez
soha sem volt cl. A PHP 3 szablya: 'A konstruktor egy metdus, aminek ugyanaz a neve, mint
az osztlynak'. A PHP 3 nem foglalkozik azzal, hogy a metdus a B osztlyban van-e definilva,
vagy rkls tjn ll rendelkezsre. Ez a PHP 4-ben ki van javtva egy msik szably
bevezetsvel: 'A konstruktor egy metdus, aminek ugyanaz a neve, mint az osztlynak, ahol
deifiniltk'. Ezrt a PHP 4-ben a B osztlynak nincs sajt konstruktora, gy a szl osztly
kostruktora hvdik meg, kirva, hogy 'n vagyok az A osztly konstruktora.<br>'. Sem a PHP 3,
sem a PHP 4 nem hvja meg a szl osztly konstruktort automatikusan egy leszrmazott
osztly definilt konstruktorbl. A te feladatod, hogy meghvd a szl konstruktort, ha
szksges. Nem lteznek destruktorok sem a PHP 3 sem a PHP 4 verziiban. Br hasznlhatod a
register_shutdown_function() fggvnyt a destruktorok legtbb viselkedsnek elrshez.

::
Az albbiak csak PHP 4-ben rvnyesek. Idnknt hasznos az sosztlyok metdusaira vagy
tulajdonsgaira hivatkozni, vagy olyan osztlymetdusokat meghvni, amelyek nem
pldnyostott objektumokhoz tartoznak. A :: opertor erre hasznlhat.
class A
{
function pelda()
{
echo "n az eredeti A::pelda() metdus vagyok.<br>\n";
}
}
class B extends A
{
function pelda()
{
echo "n a felldefinil B::pelda() metdus vagyok.<br>\n";
A::example();
}
}
// nincs semmilyen objektum az A osztlybl
// ez azonban ki fogja rni:
// n az eredeti A::pelda() metdus vagyok.<br>
A::pelda();
// B egy objektut hozzuk ltre
$b = new B;
// ez ki fogja rni:
// n a felldefinil B::pelda() metdus vagyok.<br>
// n az eredeti A::pelda() metdus vagyok.<br>
$b->pelda();
A fenti plda meghvja az A osztly pelda() metdust, habr nincs konkrt pldnyunk az A
osztlybl, teht ezt nem rhatnnk le az $a->pelda()-hoz hasonlan. Ehelyett a pelda() egy
'osztlymetdusknt' viselkedik, azaz az osztly egy fggvnyeknt, s nem egy pldny
metdusaknt. Osztlymetdusok lteznek, de osztlytulajdonsgok (vltozk) nem. Mivel a
hvs pillanatban semmilyen objektum nem ltezik, egy osztlymetdus nem hasznlhat
objektum vltozkat, s egyltaln nem hasznlhatja a $this specilis referencit. Egy
objektummetdus azonban termszetesen dolgozhat globlis vltozkkal s loklis vltozkkal
is. A fenti plda a B osztlyban felldefinilja a pelda() metdust. Az A osztlytl rklt eredeti
definci eltnik, s tbb nem rhet el, hacsak nem az A osztlyban megvalstott pelda()
fggvnyre hivatkozol kzvetlenl, a :: opertor segtsgvel. Ennek elrshez A::pelda()-t kell
hasznlni (ebben az esetben rhatnl parent::pelda()-t is, ahogy az a kvetkez szakaszban
olvashat). Ebben a krnyezetben van aktulisan hasznlt objektum, s ennek lehetnek objektum
vltozi (tulajdonsgai). Ekkppen ha egy objektummetduson bell hasznlod ezt az opertort,
akkor alkalmazhatod a $this-t, s felhasznlhatod az objektum tulajdonsgait.

parent
Gyakran van szksg arra, hogy a szl tulajdonsgaira vagy metdusaira hivatkozzunk
leszrmazott osztlyokban. Ez klnsen igaz, ha a leszrmazott osztly egy finomtsa, vagy
specializlsa az alaposztlynak. Ahelyett, hogy a szl osztly nevt megadd minden ilyen
meghvskor (mint a hogy a :: opertor pldja mutatta), hasznlhatod a parent specilis nevet,
ami tulajdonkppen a szl osztly nevt jelenti, amit az extends kulcssznl megadtl. Ennek a
specilis nvnek a hasznlatval elkerld a szl osztly nevnek ismtldst. Ha a
megvalsts sorn a leszrmazsi ft meg kell vltoztatni, csak egy helyen, az extends
kulcssznl kell trnod a nevet.
class A
{
function pelda()
{
echo "n A::pelda() vagyok egyszer funkcival.<br>\n";
}
}

class B extends A
{
function pelda()
{
echo "n B::pelda() vagyok tbb funkcival.<br>\n";
parent::pelda();
}
}
$b = new B;

// Ez a B::pelda() metdust hvja, ami az A::pelda()-t hvja


$b->pelda();

Objektumok szerializcija, objektumok session-kben


Megjegyzs: A PHP 3-ban az objektumok elvesztik az osztly-hozzrendelsket a
szerializcis, s deszerializcis folyamat sorn. Az eredmny objektum tpus, de nem tartozik
semelyik osztlyhoz, s nincs egy metdusa sem, teht elgg hasznlhatatlan (csupn egy tmb,
furcsa szintakszissal). A kvetkez informcik csak a PHP 4-es vltozatra rvnyesek. A
serialize() egy karaktersorozatot ad vissza, ami az tadott rtk byte-sorozatban megadott
megfelelje. Az unserialize() visszaalakt egy ilyen karaktersorozatot az eredeti rtkk. A
szerializcis folyamat sorn egy objektum tadsval elmenthetjk az objektum minden
tulajdonsgt (vltozjt). A fggvnyek nem kerlnek elmentsre, csak az osztly neve. Ahhoz,
hogy az unserialize() segtsgvel vissza lehessen lltani egy objektumot, az objektum
osztlynak (tpusnak) mr definilva kell lennie. Ez a kvetkezket jelenti egy pldn keresztl
megvilgtva. Ha az elso.php oldalon az A osztly $a objektumot szerializlod, akkor kapsz egy
olyan karaktersorozatot, amely az A osztlyra hivatkozik, s tartalmazza az sszes $a-ban lv
vltoz (tulajdonsg) rtkt. Ha ezt a karaktersorozatot a masodik.php oldalon objektumm
szeretnd alaktani, jra ltrehozva az A osztly $a nev objektumot, akkor az A osztly
defincijnak rendelkezsre kell llnia a masodik.php oldalon is. Ez gy rhet el, hogy az A
osztly defincijt egy kls llomnyban trolod, s ezt alkalmazod mind az elso.php, mind a
masodik.php oldalon.
aosztaly.inc:
class A
{
var $egy = 1;

function egyet_mutat()
{
echo $this->egy;
}
}
elso.php:
include("aosztaly.inc");
$a = new A;
$s = serialize($a);
// troljuk az $s-t valahol, ahol masodik.php megtallja
$fp = fopen("tarolas", "w");
fputs($fp, $s);
fclose($fp);
masodik.php:
// ez szksges, hogy a deszerializci rendben menjen
include("aosztaly.inc");
$s = implode("", @file("tarolas"));
$a = unserialize($s);
// most mr hasznlhat az egyet_mutat() metdus
$a->egyet_mutat();
Ha session-ket alkalmazol, s a session_register() fggvnnyel regisztlsz objektumokat, ezek
az objektumok automatikusan szerializldnak minden PHP program futsa utn, s
deszerializldnak minden tovbbi programban. Ez egyszeren azt jelenti, hogy ezek az
objektumok akrmelyik oldalon feltnhetnek, miutn a session rszv vltak. Ersen javasolt,
hogy minden regisztrlt objektum osztly defincijt betltsd minden oldalon, mg akkor is, ha
ppen nem hasznlod azokat. Ha ezt nem teszed meg, s egy objektum gy deszerializldik,
hogy nem ll rendelkezsre az osztly defincja, el fogja veszteni az osztly hozzrendelst, s
az stdClass osztly egy pldnya lesz, metdusok nlkl, gy hasznlhatatlann vlik. Ezrt ha a
fenti pldban az $a a session rszv vlik a session_register("a") meghvsval, akkor be kell
tltened az aosztaly.inc kls llomnyt minden oldalon, nem csak az elso.php s masodik.php
programokban.

A specilis __sleep s __wakeup metdusok


A serialize() ellenrzi, hogy van-e az osztlyodnak __sleep nev metdusa. Ha van, ez lefut a
szerializci eltt. Ez megtisztthatja az objektumot, s vgl egy tmbbel tr vissza, amely
tartalmazza az adott objektum tnylegesen szerializland tulajdonsgainak neveit.
A __sleep clja, hogy bezrjon minden adatbzis kapcsolatot, a vrakoz adatokat lementse, s
hasonl 'tisztt' jelleg tevkenysgeket vgezzen. Hasznos lehet akkor is, ha nagyon nagy
objektumaid vannak, amelyeket kln szeretnl lementeni.
Ezzel szemben az unserialize() a specilis __wakeup nev fggvnyt hasznlja. Ha ez ltezik, ez
a fggvny alkalmazhat arra, hogy visszalltsa az objektum erforrsait.
A __wakeup clja lehet pldul, hogy visszalltson egy adatbzis kapcsolatot, ami a szerializci
sorn elveszett, s hasonl belltsi feladatokat vgezzen.

Referencik a konstruktorban
Referencik kpzse kontruktorokban problms helyzetekhez vezethet. Ez a lers segt a bajok
elkerlsben.
class Ize
{
function Ize($nev)
{
// egy referencia ltrehozsa a globlis $globalref vltozban
global $globalref;
$globalref[] = &$this;
// a nv belltsa a kapott rtkre
$this->nevBeallitas($nev);
// s kirs
$this->nevKiiras();
}
function nevKiiras()
{
echo "<br>",$this->nev;
}
function nevBeallitas($nev)
{
$this->nev = $nev;
}
}
Nzzk, hogy van-e klnbsg az $obj1 s az $obj2 objektum kztt. Az elbbi a = msol
opertorral kszlt, az utbbi a =& referencia opertorral kszlt.
$obj1 = new Ize('konstruktorban belltott');
$obj1->nevKiiras();
$globalref[0]->nevKiiras();
/* kimenete:
konstruktorban belltott
konstruktorban belltott
konstruktorban belltott */
$obj2 =& new Ize('konstruktorban belltott');
$obj2->nevKiiras();
$globalref[1]->nevKiiras();
/* kimenete:
konstruktorban belltott
konstruktorban belltott
konstruktorban belltott */
Szemmel lthatan nincs semmi klnbsg, de valjban egy nagyon fontos klnbsg van a kt
forma kztt: az $obj1 s $globalref[0] _NEM_ referencik, NEM ugyanaz a kt vltoz. Ez
azrt trtnhet gy, mert a "new" alapveten nem referencival tr vissza, hanem egy msolatot
ad. Nincsenek teljestmnybeli problmk a msolatok visszaadsakor, mivel a PHP 4 s jabb
verzik referencia szmllst alkalmaznak. Legtbbszr ellenben jobb msolatokkal dolgozni
referencik helyett, mivel a referencik kpzse eltart egy kis ideig, de a msolatok kpzse
gyakorlatilag nem ignyel idt. Ha egyik sem egy nagy tmb, vagy objektum, s a vltozsokat
nem szeretnd mindegyik pldnyban egyszerre ltni, akkor msolatok hasznlatval jobban
jrsz.
ZEND2

Referencik

Mik a referencik
A referencik lehetsget adnak PHP-ben azonos vltoz tartalom elrsre klnbz nevek
alatt. Ezek szimblumtbla bejegyzsek, nem olyanok, mint a C nyelv mutati. PHP-ben a
vltozk neve s tartalma kt klnbz dolog, teht ugyanaz a tartalom kaphat klnbz
neveket. A legjobb hasonlat taln a UNIX llomnynevek s llomnyok rendszere. A
vltozneveket knyvtr bejegyzsekknt foghatod fel, a vltozk tartalmt llomnyokknt. A
referencik olyanok, mint UNIXban a hardlinkek.

Mit lehet referencikkal tenni


A PHP referencik lehetsget adnak arra, hogy egy rtkhez kt nevet lehessen rendelni. Ez azt
jelenti, hogy a kvetkez programban:
$a =& $b;
az $a s $b nevek ugyanarra az rtkre hivatkoznak. Az $a s a $b nevek teljesen egyenrangak.
Nem arrl van sz, hogy az $a a $b-re mutat, vagy fordtva, hanem arrl, hogy az $a s a $b nv
ugyanannak az rtknek kt elnevezse. Ugyanez a forma hasznlhat az olyan fggvnyeknl,
amelyek referencit adnak vissza, vagy a new opertor hasznlatakor (a PHP 4.0.4 s ksbbi
verzikban):
$obj =& new valamilyen_osztaly();
$ize =& valtozo_kereses ($valami);
Ha nem hasznlod az & -t, akkor az osztlypldny msolta addik t. A $this objektumon
belli hasznlatval ugyanazon az objektumpldnyon dolgozol. Ha az rtkads sorn az & -
t elhagyod, akkor az objektumrl msolat kszl s a $this mr ezen a msolaton fog
dolgozni. Van, amikor ez nem kvnatos, mivel ltalban egy pldnyon szeretnnk dolgozni
a jobb memriahasznlat s teljestmny rdekben. A a referencikat paramtertadskor is
lehet hasznlni. Ebben az esetben a meghvott fggvny egy loklis vltozja s a hv
krnyezet egy vltozja ugyanazt az rtket fogja kpviselni. Pldul:
function ize (&$valtozo)
{
$valtozo++;
}
$a = 5;
ize ($a);
Ez a kd az $a vltoz rtkt 6-ra lltja. Ez azrt trtnik meg, mivel az ize fggvnyben a
$valtozo egy referencia a $a vltoz rtkre.

Mit nem lehet referencikkal tenni


Mint korbban rtuk, a referencik nem mutatk. A kvetkez konstrukci ezrt nem a vrtnak
megfelelen viselkedik:
function ize (&$valtozo)
{
$valtozo =& $GLOBALS["valami"];
}
ize($valami);
A foo fggvnyben a $valtozo vltoz a $valami rtkhez lesz ktve, de utna ezt
megvltoztatjuk a $GLOBALS["valami"] rtkre. Nincs lehetsg a referencik segtsgvel a
$valami ms rtkhez ktsre a hv krnyezetben, mivel a $valami nem ll rendelkezsre az ize
fggvnyben. Ott a $valtozo reprezentlja az rtkt, amely csak vltoz tartalommal br s nem
nv-rtk ktssel a hv szimblumtbljban.

Referenciaknti paramtertads
A fggvnyeknek vltozkat referenciaknt is t lehet adni, gy a fggvny tudja mdostani a
hv krnyezetben definilt rtket. Ez a kvetkezkppen oldhat meg:
function ize (&$valtozo)
{
$valtozo++;
}

$a = 5;
ize ($a);
// $a itt 6
Figyeld meg, hogy nincs referencia jelzs a fggvnyhvskor, csak a fggvny defincijban.
Ez nmagban elg a megfelel mkdshez. A kvetkezk szerepelhetnek referenciaknti
paramtertadsban:
Vltoz, pldul ize($a)
New utasts, pldul ize(new osztaly())
Egy fggvny ltal visszaadott referencia, pldul:
function &valami()
{
$a = 5;
return $a;
}
ize(valami());
Minden ms kifejezst kerlni kell referencia szerinti paramtertadskor, mivel az eredmny
hatrozatlan lesz. A kvetkez pldkban a referencia szerinti paramtertads hibnak minsl:
function valami() // Figyeld meg, nincs & jel!
{
$a = 5;
return $a;
}
ize(valami());

ize($a = 5) // Kifejezs, nem vltoz


ize(5) // Konstans, nem vltoz
Ezek a meghatrozsok a PHP 4.0.4 s ksbbi verziira rvnyesek.

Refencia visszatrsi-rtk
A refencia visszatrsi-rtk pl. olyan vltozk megtallsakor lehet hasznos, amelyekrl
referencit kell kszteni. Ha referencit kell visszaadni visszatrsi rtkknt, akkor hasznld az
albbi formt:
function &valtozo_kereses ($param)
{
...kd...
return $megtalalt_valtozo;
}

$ize =& valtozo_kereses ($valami);


$ize->x = 2;
Ebben a pldban a valtozo_kereses egy objektumot keres meg, s a megtallt objektum egy
tulajdonsgt lltjuk t - helyesen. A referencik hasznlata nlkl a msolatnak egy
tulajdonsgn tettk volna mindezt - hibsan. A paramter tadssal ellenttben, itt a & jelet
mindkt helyen meg kell adnod a referenciavisszaads jellshez. gy nem egy msolatot kapsz,
s az $ize vltozra nzve referencia hozzrendels trtnik, nem pedig rtk hozzrendels
(rtkmsols).

Referencik megszntetse
Amikor megszntetsz egy referencit, csak megszaktod a vltoznv s az rtk kztti
kapcsolatot. Ez nem azt jelenti, hogy a vltz rtkt trld. Pldul:
$a = 1;
$b =& $a;
unset ($a);
nem fogja megszntetni a $b nevet, csak az $a nevet, gy az rtk a $b nven tovbbra is elrhet.
Ismt rdemes a Unix unlink parancsval s az llomnyrendszerrel val hasonlatossgra
gondolni.

A PHP ltal hasznlt referencik


Sok konstrukci a PHP-ben referencik segtsgvel valsul meg, azrt minden fentebb trgyalt
krds ezekre az elemekre is igaz. Nhny olyan konstrukcit, mint a referencia tadst vagy
visszatrst mr kifejtettnk, ms referencikat hasznl konstrukcik:

global referencik
Amikor egy vltozt a global $valtozo formval globlisknt hasznlsz, tulajdonkppen egy
referencit kpzel a megfelel globlis vltozra,azaz a kvetkez kdnak megfelel trtnik:
$valtozo =& $GLOBALS["valtozo"];
Ez pldul azt is jelenti, hogy a $valtozo trlse nem fogja trlni a globlis vltozt.
$this
Egy objektum metdusban a $this mindig az aktulis pldnyra egy referencia.

Hibakezels
A hibknak s figyelmeztetseknek PHP-ben szmos tpusa van. Ezek:
PHP hiba tpusok
rtk Szimblum Lers Megjegyzs
1 E_ERROR fatlis futs-idej hibk
2 E_WARNING nem fatlis futs-idej hibk
4 E_PARSE fordts-idej feldolgozsi hibk
8 E_NOTICE futs-idej figyelmeztetsek (a notice a warning-nl gyengbb)
16 E_CORE_ERROR fatlis hibk, amik a PHP elindulsakor lpnek fel csak a PHP 4-ben
nem fatlis hibk figyelmeztetsei (warning), amik a PHP
32 E_CORE_WARNING csak a PHP 4-ben
elindulsakor lpnek fel
64 E_COMPILE_ERROR fatlis fordts-idej hibk csak a PHP 4-ben
E_COMPILE_WARNI
128 nem fatlis fordts-idej figyelmeztetsek (warning) csak a PHP 4-ben
NG
256 E_USER_ERROR felhasznl ltal generlt hibazenetek csak a PHP 4-ben
512 E_USER_WARNING felhasznl ltal generlt figyelmeztetsek (warning) csak a PHP 4-ben
1024 E_USER_NOTICE felhasznl ltal generlt figyelmeztetsek (notice) csak a PHP 4-ben
E_ALL az sszes fent felsorolt elem csak a PHP 4-ben

A fenti rtkek (akr a numerikusak, akr a szimbolikusak) arra hasznlhatak, hogy felpts egy
bitmask-ot, ami megadja, hogy mely hibkat kell jeleznie a PHP-nek. Hasznlhatod bitszint
opertorokat, hogy sszelltsd a fenti elemekbl a neked megfelel rtket, vagy letilts egyes
hibkat. Csak a '|', '~', '!', s '&' opertorok hasznlhatak php.ini fjlban, s semmilyen opertor
sem hasznlhat a php3.ini fjlban.
PHP 4-ben az alapbellts error_reporting rtk E_ALL & ~E_NOTICE, ami azt jelenti, hogy
minden hiba s figyelmeztets megjelenik az E_NOTICE-szint kivtelvel. PHP 3-ban az
alapbellts (E_ERROR | E_WARNING | E_PARSE), ugyanezt jelenti. Vedd figyelembe, hogy
ezek a konstansok nem tmogatottak a PHP 3 php3.ini fjljban, ezrt az error_reporting bellts
a numerikus 7 rtk.
Ezek a belltsok az ini fjl error_reporting direktvjval vltoztathatak meg, vagy az Apache
httpd.conf fjlban a php_error_reporting (php3_error_reporting PHP 3 esetn) direktvval vagy
vgl futsidben egy szkriptben az error_reporting() fggvnnyel. Ha a kdod vagy a szervered
frissted PHP 3-rl PHP 4-re, jl teszed, ha ellenrzd ezeket a belltsokat s az
error_reporting() fggvnyhvsokat, klnben akaratlanul kikapcsolod az j hibatpusokat,
klnsen az E_COMPILE_ERROR-t. Ez res dokumentumokhoz vezethet, amik nem
tartalmaznak semmilyen utalst arra, hogy mi trtnt, vagy hogy hol kellene keresni a problmt.
Minden PHP kifejezs rhat a "@" eltaggal, ami kikapcsolja a hibajelentst arra a kifejezsre.
Ha hiba lp fel a kifejezs kirtkelsekor, s a track_errors szolgltats be van kapcsolva, a
hibazenet megtallhat a $php_errormsg globlis vltozban. A @ hibakezel opertor nem
kapcsolja ki a szkriptek feldolgozsa sorn elfordul hibk (parse error) jelentst.
Jelenleg a "@" hibakezel opertor kikapcsolja azon kritikus hibk jelentst is, amik meglltjk
a szkript futst. Ms problmk mellett, ha egy fggvnybl rkez hibazenetek elnyelsre
hasznlod a "@" jelet, meg fog llni a szkript futsa, ha nem ltezik a megadott fggvny, vagy
elrtad a nevt.
Az albbiakban lthatsz egy pldt a PHP hibakezel kpessgeire. Definilunk egy hibakezel
fggvnyt, ami trolja a hibkat egy fjlba (XML formtummal) s email-t kld a fejlesztnek ha
a programban kritikus hiba trtnik. Hibakezels hasznlata egy szkriptben:
<?php
// sajt hibakezelst ptnk
error_reporting(0);
// felhasznl ltal definilt hibakezel fggvny
function sajatHibaKezelo ($hibaszam, $hibauzenet, $filenev, $sorszam,
$valtozok) {
// idblyeg a hibhoz
$ido = date("Y-m-d H:i:s (T)");
// Asszociatv tmb definilsa a hibaszvegeknek.
// Valjban csak a 2,8,256,512 s 1024 elemeket
// vesszk figyelembe
$hibatipus = array (
1 => "Error",
2 => "Warning",
4 => "Parsing Error",
8 => "Notice",
16 => "Core Error",
32 => "Core Warning",
64 => "Compile Error",
128 => "Compile Warning",
256 => "User Error",
512 => "User Warning",
1024=> "User Notice"
);
// azok a hibatpusok, amikre a vltozkat is el kell menteni
$user_hibak = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);
$hiba = "<errorentry>\n";
$hiba .= "\t<datetime>".$ido."</datetime>\n";
$hiba .= "\t<errornum>".$hibaszam."</errornum>\n";
$hiba .= "\t<errortype>".$hibatipus[$hibaszam]."</errortype>\n";
$hiba .= "\t<errormsg>".$hibauzenet."</errormsg>\n";
$hiba .= "\t<scriptname>".$filenev."</scriptname>\n";
$hiba .= "\t<scriptlinenum>".$sorszam."</scriptlinenum>\n";
if (in_array($hibaszam, $user_hibak))
$hiba .=
"\t<vartrace>".wddx_serialize_value($valtozok,"Variables")."</vartrace>\n";
$hiba .= "</errorentry>\n\n";
// tesztelshez
// echo $hiba;
// a hibanapl elmentse, email klds ha kritikus hiba van
error_log($hiba, 3, "/usr/local/php4/error.log");
if ($hibaszam == E_USER_ERROR)
mail("phpdev@example.com","Kritikus programhiba",$hiba);
}
function tavolsag ($vektor1, $vektor2) {
if (!is_array($vektor1) || !is_array($vektor2)) {
trigger_error("Helytelen parameterek, tomboket varok", E_USER_ERROR);
return NULL;
}
if (count($vektor1) != count($vektor2)) {
trigger_error("A vektorok ugyanolyan dimenziojuak legyenek",
E_USER_ERROR);
return NULL;
}
for ($i=0; $i<count($vektor1); $i++) {
$c1 = $vektor1[$i]; $c2 = $vektor2[$i];
$d = 0.0;
if (!is_numeric($c1)) {
trigger_error("Az elso vektor $i koordinataja nem szam, nullaval
szamolok",
E_USER_WARNING);
$c1 = 0.0;
}
if (!is_numeric($c2)) {
trigger_error("A masodik vektor $i koordinataja nem szam, nullaval
szamolok",
E_USER_WARNING);
$c2 = 0.0;
}
$d += $c2*$c2 - $c1*$c1;
}
return sqrt($d);
}
$regi_hiba_kezelo = set_error_handler("sajatHibaKezelo");
// nem definilt konstans, warning-ot generl
$t = NEM_VAGYOK_DEFINIALVA;
// nhny "vektor" definilsa
$a = array (2,3, "ize");
$b = array (5.5, 4.3, -1.6);
$c = array (1, -3);
// user hiba generlsa
$t1 = tavolsag($c, $b)."\n";
// jabb user hiba generlsa
$t2 = tavolsag($b, "ez nem tmb")."\n";
// warning generlsa
$t3 = tavolsag($a, $b)."\n";
?>

Adatbzis kezels (MySQL fggvnyek)


Az albbi kis plda bemutatja, hogyan lehet MySQL adatbzisokhoz csatlakozni, krst
vgrehajtani, kiratni az eredmnyt s megszntetni a kapcsolatot. Plda 1. MySQL modul
ttekint plda
<?php
// Csatlakozs, adatbzis kivlasztsa
$kapcsolat = mysql_connect("mysql_hoszt", "mysql_azonosito", "mysql_jelszo")
or die("Nem tudok csatlakozni");
print "A kapcsolds sikerl";
mysql_select_db("az_en_adatbazisom")
or die("Nem sikerlt kivlasztanom az adatbzist");
// SQL krs vgrehajtsa
$keres = "SELECT * FROM az_en_tablam";
$eredmeny = mysql_query($keres) or die("Hiba a krsben");
// Az eredmny kirsa HTML-ben
print "<table>\n";
while ($line = mysql_fetch_array($eredmeny, MYSQL_ASSOC)) {
print "\t<tr>\n";
foreach ($sor as $egy_oszlop) {
print "\t\t<td>$egy_oszlop</td>\n";
}
print "\t</tr>\n";
}
print "</table>\n";
// Kapcsolat lezrsa
mysql_close($kapcsolat);
?>

You might also like