WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem
CGI (Common Gateway Interface) Általános, platform független interface a WEB server és az általa indított külső programok között különböző programozási nyelven meg lehet valósítani Alapvetően két csoportba lehet ezeket sorolni: – Fordított (compiled) nyelvek; bináris, futtatható; például Pascal és C (MFC –nél Consol Application – ként kell fordítani, kiterjesztése.cgi) – Interpretált nyelvek (a program futási időben dolgozódik fel) Például Perl, PHP
Paraméterátadási módszerek Mielőtt a web-szerver elküldi az adatokat, URL kódolást hajt végre rajtuk és szabványos formátumra alakítja. A form method paraméterénél lehet meghatározni az átadási módszert. Az alapértelmezett a GET módszer GET: ebben az esetben az átadásra kerülő szöveges adat a QUERY_STRING-be kerül. Ez a string a cím mezőben is megjelenik, hozzáfűzve az URL-hez. Hátránya, hogy az átadott paraméterek láthatók lesznek. POST: A web-szerver ebben az esetben is URL kódolást hajt végre az adatokon. Ebben az esetben a http-szerver nem állítja elő vagy üresen hagyja a QUERY_STRING környezeti változót. Az adatokat ebben a CGI program szabványos bemeneti csatornájára küldi. Az eredeti URL tehát nemmódosul.
Környezeti változók REQUEST_METHOD: a kommunikáció során használ adatátviteli módot adja meg. ( POST, GET) QUERY_STRING: GET metódusnál a CGI számára átadott paraméterlista URL-kódolt formában. CONTENT_LENGTH: a szabványos input csatornán átadott adatmennyiség bájtokban. Post metódus esetén az átadott paraméterlista hossza. REMOTE_ADDR: a kérést küldő kliens gép IP címe.
Paraméterek kódolása Mivel a QUERY_STRING nem tartalmazhat szóköz karaktert, az alábbi karaktereknek kitüntetett szerepük van: &, %, = A speciális jeleket, pedig egy hexadacimális szám reprezentálja A paraméterek név=érték alakban kerülnek felsorolásra, „&” jel választja el őket egymástól Szóköz helyett „+” jel; link
CGI programozás C-ben Előnyös ha: Fontos a biztonság Nagy a terhelés több példányban fut a program, mivel ekkor is stabil, Root jogosultságot igénylő szerver erőforrásokhoz kell hozzáférni Fontos a sebesség Linux alatt: gcc –o proba.cgi proba.c Apache/cgi-bin/*.cgi Content-type vezérlőszó Mivel a böngésző különböző típusú fájlok megjelenítésére képes, ezért meg kell adni, hogy az adat, amit kap milyen formátumú. printf(”Content-type: text/html\n\n”);
Példa 2: HTML fájl Form Név: C program #include "stdafx.h" #include main() { printf("Content-type: text/html\n\n"); printf(" Megadott név: \n"); printf(" "); printf ("%s",getenv("QUERY_STRING")); return 0; }
PHP Interpretált nyelv (a program futási időben dolgozódik fel) Perl, PHP Szerver oldali script nyelv Interpretált nyelv (a program futási időben dolgozódik fel).php kiterjesztésű fájl legyen a PHP kódot a –
PHP példa 1 <? print ("Hello világ!"); ?>
PHP példa 2 <? print " \n"; print "Hello világ!\n"; print " "; ?>
phpinfo() PHP-vel és Apache-csal kapcsolatos információk: – Verziószámok – konfigurációs beállításokat – átadott környezeti változót) <? phpinfo(); ?>
PHP változók I Kommentek – „#”, „//” egysoros megjegyzés – „/*megjegyzés*/” többsoros megjegyzés Változók – a változók kezelése nagyon rugalmas (a skalár változók többféle típust tartalmazhatnak, ezeket a program használatuk során automatikusan a megfelelő alakra konvertálja) – a változókat a „$” jel vezeti be és utána következik az azonosító név – adattípusok: integer, double, string, boolean, object, array – adattípus lekérdező függvények:gettype(változó) print(gettype($tomb)); – settype(változó, típus)
PHP változók II Stringek ” vagy ’ jel között adhatjuk meg őket ” idézőjelek között a változó kiértékelése megtörténik ’ idézőjelek között a változó kiértékelése nem történik meg mint shell scriptben a sztringeket a „.”-tal lehet egymáshoz fűzni
PHP változók III Idézőjelek: – ” $a ” – ’ $a ’ print ‘ ‘;
Tömbök I a tömbelemekre is érvényes a típuskonverzió, tehát különböző típusú elemeket tartalmazhat; értékadás többféleképpen történhet: $tomb[0]=”fgah”; $tomb[1]=”zwzjk”; $tomb[2]=”uzrw”; $tomb[]=”fgah”; $tomb[]=”zwzjk”; $tomb[]=”uzrw”;
Tömb példa <? $tomb1 = array("alma","körte","citrom","narancs");//tömb feltöltése $tomb2 = array(1,2,3,4,5); print $tomb1[2]; print " "; print "A tomb1 hossza: "; print (count($tomb1));//tömb elemeinek száma print " "; $tomb=array_merge($tomb1,$tomb2);//két tömb egyesítése print " Az összefűzött tömb elemei: "; foreach ($tomb as $ertek) { print "$ertek "; }
Rendszer által definiált változók phpinfo() $QUERY_STRING : a GET metódusnál megismert környezeti változó $HTTP_GET_VARS[] : a GET metódussal átadott paramétereket tartalmazó asszociatív tömb $HTTP_POST_VARS[] : a POST metódussal átadott paramétereket tartalmazó asszociatív tömb $GLOBALS[] : asszociatív tömb, segítségével bármelyik globális változót elérhetjük $PHP_AUTH_USER : jelszavas védelem esetén a felhasználó által begépelt felhasználónév $PHP_AUTH_PW : jelszavas védelem esetén a felhasználó által begépelt jelszó $REMOTE_ADDR : a kliens gép IP címe
Vezérlési szerkezetek I if - then $x=5; $y=7; if ($x $y) print $x." nagyobb, mint ".$y; elseprint "A két szám egyenlő";
Vezérlési szerkezetek II break, continue a következő ciklusszervező utasításoknál használhatjuk a break és continue vezérlőket break – megszakítja az aktuális blokkot és kilép belőle continue – a ciklus hátralévő részét átugorja és a következő iterációt indítja
Vezérlési szerkezetek III while "; $i++; } ?>
Vezérlési szerkezetek IV dowhile "; $i++; } while ($i
Vezérlési szerkezetek V for "; } ?>
Vezérlési szerkezetek VI $value) { print "$key : $value "; } ?>
Vezérlési szerkezetek VII
Függvények I A függvények a forrásállományban bárhol elhelyezkedhetnek Létrehozás: function függvénynév($p1, $p2, …) { törzs; return kifejezés; } Meghívás függvénynév(kif1, kif2, …); A függvény nevét dinamikusan is meg lehet adni: $v=”függvénynév”; $v(2);
Függvények II "; kiir("hello");//kiírja azt a szöveget, amit paraméterként átadunk print(novel(5)); $n="novel"; print($n(4)); ?>
PHP változók hatóköre a függvényben használt változók alapesetben lokálisak; a normál php kódban (nem fgv-en belül) létrehozott változók alapesetben nem láthatók a függvényeken belül; global kulcsszó hatására elérhetővé válik a függvényen kívül, a függvényen belüli változó; static kulcsszó hatására megőrződik az érték a függvényből való kilépés után
Állományok használata I állományok létrehozása:touch(”állománynév”); állomány törlése: unlink (”állománynév”); állomány nyitása írásra(w), olvasásra(r), hozzáfűzésre(a) $f=fopen(”állománynév”, ”mód”); állomány zárása:fclose($f); állomány zárolása: flock($f, mód); Módok: – 1 – megosztott – 2 – kizárás – 3 – felszabadítás
Állományok használata II állomány olvasása – fgets($f, méret); – fread( $f, méret); állomány írása – fputs($f, ”szöveg”);//hozzáfűzésnél – fwrite($f, ”szöveg”);
Állományok használata III Untitled "; } fclose($f); ?>
Állományok tulajdonságainak lekérdezése I fájl vagy jegyzék if ( is_file(”lista.txt”) ) print(”A lista.txt egy állomány.”); if ( is_dir(”/bin”) ) print(”A /bin egy jegyzék.”); jogosultságlekérdezés if ( is_readable(”lista.txt”) ) print(”A lista.txt olvasható.”); if ( is_writeable(”lista.txt”) ) print(”A lista.txt írható.”); if ( is_executable(”lista.txt”) ) print(”A lista.txt végrehajtható.”);
Állományok tulajdonságainak lekérdezése II állományméret print ”A lista.txt mérete:”; print filesize(”lista.txt”); utolsó megnyitás fileatime() //visszatérési értéke 1970 óta eltelt másodpercek száma $t = fileatime(”lista.txt”); print ”A lista.txt állomány utolsó megnyitásának dátuma:”; print date(”Y.m.d. H:i”, $t);
Regisztrációs űrlap Regisztsációs oldal Név: Cím: Telefonszám: Kor: cím:
Regisztrációs űrlap feldolgozása Regisztsációs oldal feldolgozása <? print " Köszönjük, hogy regisztrálta magát "; $f = fopen("modosit.txt", "a"); flock($f,2); fputs($f,"\nNév:$nev"); fputs($f,"\nCím:$cim"); fputs($f,"\nTelefonszám:$telefon"); fputs($f,"\nKor:$kor"); fputs($f,"\n $ \n\n"); flock($f,3); fclose($f); ?>
Köszönöm a figyelmet!