350 likes | 453 Views
WEB Technológiák. Dr. Pance Miklós – Kolcza Gábor Miskolc i 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
E N D
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; • <a href="alap_borospince_lista.php?id=1"> link</a>
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 • <html><head> <title>Form</title> </head><body><form name="form" action="http://localhost/cgi-bin/proba.cgi" method="GET" >Név: <input type=text name="szoveg" size=20 maxlength=30><br><br> <input type=submit name submitbutton value=" Mehet "></form></body></html> • C program • #include "stdafx.h" • #include <stdio.h> • #include <stdlib.h> • #include <string.h> • main() • { • printf("Content-type: text/html\n\n"); • printf("<h3>Megadott név:</h3>\n"); • printf("<br><br>"); • 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 kód ?> • <?php PHP kód ?> • <% PHP kód %>
PHP példa 1 • <html> • <body bgcolor=green> • <? • print ("Hello világ!"); • ?> • </body> • </html>
PHP példa 2 • <? • print "<body bgcolor=yellow>\n"; • print "Hello világ!\n"; • print "</body>"; • ?>
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 ‘<input type=”text” value=” ‘.$a. ‘ ”>‘;
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 "<br><br>"; • print "A tomb1 hossza: "; • print (count($tomb1)); //tömb elemeinek száma • print "<br><br>"; • $tomb=array_merge($tomb1,$tomb2); //két tömb egyesítése • print "<h3>Az összefűzött tömb elemei: </h3>"; • foreach ($tomb as $ertek) • { • print "$ertek<br>"; • }
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." kisebb, mint ".$y;elseif ($x>$y) print $x." nagyobb, mint ".$y;else print "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=1;while ($i<=10) { print "$i <br>"; $i++;}?>
Vezérlési szerkezetek IV • dowhile • <?$i=1;do { print "$i <br>"; $i++;} while ($i<=10);?>
Vezérlési szerkezetek V • for • <?for($i=1;$i<=10;$i++) { print "$i "; $x=$i*$i; print " négyzete: $x <br><br>";}?>
Vezérlési szerkezetek VI • <?$asszociativ["Ferrari"]="Massa";$asszociativ[" Ferrari "]="Raikkonen";$asszociativ[" McLaren "]="Alonso";foreach ($asszociativ as $key=>$value) { print "$key : $value <br>"; }?>
Vezérlési szerkezetek VII • <?$a=2;switch ($a) { case 0: print "Nulla"; break; case 1: print "Egy"; break; case 2: print "Kettő"; break; default: print "A szám nagyobb mint kettő vagy nem szám."; break; }?>
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 • <?function hello() { print "HELLO VILAG!";}hello(); //kiírja, hogy HELLOfunction kiir($s) { print $s; }print "<br><br><br>";kiir("hello"); //kiírja azt a szöveget, amit paraméterként átadunk print(novel(5)); $n="novel";print($n(4));?><?function novel($x) { return $x+1;}?>
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 • <html><head> <title>Untitled</title> </head><body><?$fnev="proba.txt";$f = fopen($fnev,"r") or die("$fnev nem nyitható meg"); //die()-megjelenítünk egy hibaüzenetet a böngészőben és kilépünk a programból//ha az állomány nem létezik, vagy nincs jogosultságunk olvasásrawhile ( ! feof($f)) { $sor = fgets($f, 1024); //kiolvas egy sort vagy 1024 bájtot print "$sor<br>";}fclose($f);?></body> </html>
Á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 • <html><head> <title>Regisztsációs oldal</title> </head><body bgcolor=pink> <center><table> • <form action="modosit.php" method="GET"><tr><th>Név:<th> <input type=text name="nev"><tr><th><tr><th>Cím: <th><input type=text name="cim"><tr><th><tr><th>Telefonszám:<th><input type=text name="telefon"><tr><th><tr><th>Kor:<th><input type=text name=kor><tr><th><tr><th>e-mail cím:<th><input type=text name="email"><tr><th><tr><th><th><input type=reset value=" Törlés "><input type=submit value=" Mehet "> • </form></table></center></body></html>
Regisztrációs űrlap feldolgozása • <html><head> <title>Regisztsációs oldal feldolgozása</title> </head><body bgcolor=pink> <center> • <? • print "<br><br>Köszönjük, hogy regisztrálta magát<br><br>"; • $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,"\ne-mail:$email\n\n"); • flock($f,3); • fclose($f); • ?> • </center></body></html>