410 likes | 500 Views
WEB Technológiák. PHP: objektum-, fájl-, dátum- és sztringkezelés. dr. Kovács László Baksáné Varga Erika. ME Általános Informatikai Tsz. PHP. Objektumok. PHP. Objektumok kezelése. osztály definíció objektum létrehozás. class onev extends szoszt { változók metódusok }.
E N D
WEB Technológiák PHP: objektum-, fájl-, dátum- és sztringkezelés dr. Kovács László Baksáné Varga Erika ME Általános Informatikai Tsz.
PHP Objektumok
PHP Objektumok kezelése osztály definíció objektum létrehozás class onev extends szoszt { változók metódusok } - csak egy szülő osztály adható meg - lehet alkalmazni konstruktor metódust is - szülő osztálybeli metódusok újradefiniálhatók - nincs védelmi rendszer, az objektum összes tulajdonsága kivülről is elérhető K.L.
PHP Objektumok kezelése A metódusban az osztály változókra történő hivatkozás: $this->változó Konstruktor létrehozás: a metódus neve megegyezik az osztály nevével <?php class lista { var $elemek = array(); var $hossz; function lista($v) { $this->hossz = $v; } function beszur($e) { $this->elemek[$this->hossz] = $e; $this->hossz++; } } ?> K.L.
PHP Objektumok kezelése Szülő osztály átdefiniált metódusának meghívása: szülőoszt::metodus() <?php ... class a { var $v = 0; function leptet(){ $this->v++; } function novel(){ $this->v++; } } ... class b extends a { function leptet(){ $this->v+=2; } function osleptet(){ a::leptet(); parent::leptet(); } } ... ?> K.L.
PHP Objektumok kezelése Objektumok létrehozása: $objnev = new oszály(paraméterek); • - meghívódik a konstruktor metódus • - változó elérés • $objnev->változó • - metódus hívás • $objnev->metódus() • automatikus felszabadítás • destruktor fv. nincs, hozzá kell adni az osztályhoz • destruktor automatikus végrehajtása: leállítási függvénnyel register_shutdown_function() • A szkript végén fut le, használható fájlok bezárására, tranzakciók lezárására, naplózásra stb. • - az objektumra is a szokásos láthatósági feltételek élnek K.L.
PHP Objektumok kezelése <?php class a { var $x; function a($v) { $this->x = $v; } } for ($i=1; $i<10; $i++) { $tt[$i] = new a($i); } print ($tt[1]->x.”\n”); print ($tt[4]->x.”\n”); ?> K.L.
PHP Űrlapok
PHP Meghívó űrlap adatainak átvétele FORM GET k.változók POST WEB szerver tömbök PHP program Std. IO Fogadó tömbök: $GLOBALS - környezeti változók $HTTP_GET_VARS - input mezők tartalma, GET módnál $HTTP_POST_VARS - input mezők tartalma, POST módnál közvetlen hivatkozás K.L.
PHP Környezeti változók átvétele <BODY> <?php print (”<H1>Valtozok ertekei</H1>\n”); print (”<BR><BR>\n”); foreach ($GLOBALS as $valt => $ert ) { print (” $valt == $ert <BR>\n”); } ?> <HR> </BODY> A CGI-ben megismert változók adatai szerepelnek K.L.
PHP Közvetlen hivatkozás a mezőkre <FORM> <INPUT TYPE=TEXT NAME=T1> <INPUT TYPE=TEXTAREA NAME=A1> <SELECT NAME=S1 MULTIPLE> <OPTION>01 <OPTION>02 … </SELECT> ... </FORM> <?php print (” A TEXT mezo = $T1<BR>\n”); print (” A TEXTAREA mezo = $A1<BR>\n”); … ?> K.L.
PHP Közvetlen hivatkozás a mezőkre <FORM ACTION= ”p.php” METHOD=POST> <INPUT TYPE=TEXT NAME=T1> <INPUT TYPE=TEXTAREA NAME=A1> <SELECT NAME=S1 MULTIPLE> <OPTION>01 <OPTION>02 … </SELECT> ... </FORM> <?php print (” A TEXT mezo = $_POST[T1] <BR>\n”); print (” A TEXTAREA mezo = $_POST[A1] <BR>\n”); … ?>
PHP Tömbön keresztüli hivatkozás mezőkre <?php $PT = (count($HTTP_POST_VARS))? HTTP_POST_VARS:HTTP_GET_VARS; foreach ($PT as $nev => $ert ) { if (gettype($ert) == “array”) { foreach ($ert as $elem) { print (“ $elem “); } } else { print (“ $ert “); } } ?> K.L.
PHP Speciális lehetőségek többértékű SELECT mező feldolgozása: foreach($mezőnév as $ert) { ... } önmagát meghívó lap: <FORM ACTION=“<?php print($PHP _SELF) ?>” METHOD=…> dokumentum fejléc megadása header(“szöveg”); header(“Location: URL”); dokumentum átirányítása K.L.
PHP Fájlok
PHP Állományok feltöltése kliens Ideiglenes terület végleges terület file szerver Feltöltést elindító program <FORM ENCTYPE=“multipart/form-data” ACTION=“…php“> <INPUT TYPE=HIDDEN NAME=MAX_FILE_SIZE VALUE= n> <INPUT TYPE=FILE NAME=FNEV> <INPUT TYPE=SUBMIT> </FORM> • Ellenőrizni! • php.ini-ben file_uploads = on (engedélyezett) • php.ini-ben memory_limit > 2 x upload_max_filesize K.L.
PHP Állományok feltöltése <FORM ENCTYPE=“multipart/form-data” ACTION=“…php ” > <INPUT TYPE=FILE NAME=FNEV> </FORM> Az állomány a szerveren egy ideiglenes helyre kerül. Az id. helyről az állomány lementése állandó helyre: move_uploaded_file($f, $path); Az ideiglenes állomány elérése (név azonosságon alapszik): FNEV ideiglenes elérési útvonal FNEV_NAME név FNEV_SIZE méret FNEV_TYPE típus K.L.
PHP Állományok feltöltése Az ideiglenes helyről át kell vinni a végleges helyre <FORM ENCTYPE=“multipart/form-data” ACTION=“…php ” > <INPUT TYPE=FILE NAME=FMA> </FORM> <?php if (isset($FMA)) { if ($FMA_SIZE < 200000) { copy($FMA, “c:\adatok\$FMA_NAME”) or die(“Masolasi hiba”); print (“Sikeres attoltes<BR>\n”); } } ?> K.L.
PHP Állományok kezelése Más forrásállományok beépítése: include(”állomány”); csak amikor szükség van rá include_once(”állomány”); csak egyszer require(”állomány”); PHP feldolgozás kezdetén require_once(”állomány”); csak egyszer Állomány létezése file _exists(“állomány”); Állomány jellege is _file(“állomány”);is _writeable(“állomány”); is _dir(“állomány”);is_readable(“állomány”); is _link(“állomány”);is _executable(“állomány”); is _uploaded_file(“állomány”); K.L.
PHP Állomány jellegének lekérdezése $path_id = opendir($path); while ($file_name = readdir($path_id)) { if ($file_name != ”.” and $file_name != ”..”) { $file_type = filetype($path . ”/” . $file_name); if (!isset($found[$file_type])) { found[$file_type] = 0; } found[$file_type]++; } } closedir($path_id); reset($found); while (list($k, $v) = each($found)) { print(”<br>Found ” . $k . ”: ” . $v); }
PHP Állományok kezelése Allomány létrehozása: touch(”állomány”); Állomány másolása, törlése: copy(“állomány1”, “állomány2”); unlink(“állomány”); Állomány nyitás, zárás: $fv = fopen(“állomány”,”mód”); r,w,a fclose($fv); Zárolás : flock($fv,”mód”); 1,2,3 K.L.
PHP Állomány olvasás: fgets($fa,méret); fread($fa,méret); fgetc($fa); file($f); teljes fájl beolvasása Állomány írás: fputs($fa,”szöveg”); fwrite($fa,”szoveg”); Pozicionálás fseek($fa,pozíció); Könyvtár kezelés get _directory_file(“kat”); többszintű listázás opendir(”kat”), closedir(”kat”), readdir($kat) mkdir(”kat”), rmdir(”kat”), dirname(), pathinfo(), realpath() K.L.
PHP Állományok kezelése Fájl-attribútumok lekérdezése: fileatime(); legutolsó fájlhozzáférés filemtime(); utolsó fájlméret-változás filectime(); utolsó fájlrekord-változás Linux alatt: fileowner(); fileperms(); filegroup(); fileinode(); Képfájlok attribútumai: getimagesize(); Fájl mérete: filesize();
PHP Állományok kezelése <BODY> <H3>UZENET LEHELYEZO</H3> <BR><HR> <FORM ACTION=I1.PHP > <TABLE> <TR><TD>KULDO: <TD><INPUT TYPE=TEXT NAME=KM><BR> <TR><TD VALIGN=TOP>SZOVEG : <TD><TEXTAREA NAME=TM ROWS=10></TEXTAREA><BR> <TR><TD><INPUT TYPE=SUBMIT VALUE=ELKULD><TD> </TABLE> </FORM> <BR><HR> </BODY> Induló űrlap K.L.
PHP Állományok kezelése megjelenő dokumentum KM TM K.L.
PHP Állományok kezelése <BODY> <?php $i = 1; $fnev = $KM."$i".".msg"; while (file_exists($fnev)) { $i++; $fnev = $KM."$i".".msg"; } touch($fnev); $fv = fopen($fnev,"w"); fwrite($fv,$TM); fclose($fv); print("<BR><H3> Uzenet lementve </H3><BR>\n"); print("<A HREF=$HTTP_REFERER>Uj uzenet</A>\n"); ?> </BODY> meghívott PHP program K.L.
PHP Állományok kezelése Figyelem! Kedvezmenyes husveti AB puska vasar es feladat keszites 03-565522 peter3.msg válaszlap <BODY> <BR><H3> Uzenet lementve </H3><BR> <A HREF=http://laszlo.iit.uni-miskolc.hu:8080/i1.htm>Uj uzenet</A> </BODY> K.L.
PHP Dátumkezelés
Dátum és idő • Idő: GMT, UTC, helyi • Naptár: • Unix: csak másodpercekben mér • Zsidó, Gergely • Julianus (nincs benne hónap): év + az év napja (3 számjeggyel) • ICAP: Internet-alapú naptárak • MCAL: modulokhoz csatlakozva érhetők el naptárak
PHP Dátum kezelése time() 1970.01.01 óta eltelt idő sec-ben localtime() $da = getdate() dátum megadása asszociativ tombben $da[“year”], $da[“mon”], $da[“mday”] $da[“hours”], $da[“minutes”], $da[“seconds”] $da[“wday”], $da[“yday”], $da[“mday”] date(”formatum”,$ido) dátum formátumozott kiírása mktime(óra, perc, sec, hónp, nap, év) dátum érték készítése checkdate(hónap, nap, év) dátum ellenőrzése K.L.
PHP Dátum kezelés <H2> AKTUALIS IDO </H2> <BR><HR><BR> <?php $ido = getdate(); print ("<H3>". $ido["year"]. "-". $ido["mon"]. "-". $ido["mday"]. " "); print (" ". $ido["hours"].":". $ido["minutes"]."</H3>\n"); $min = $ido["minutes"]; print ("<BR><HR>\n"); print ("<A HREF=$PHP_SELF> Frissit</A> "); ?> K.L.
PHP Sztringkezelés
Sztringadatok • Megadása: ”…” vagy ‘…’ • Spec. karakterek megadása: \”, \’, \\ • serialize() – adatok sokaságát sztringbe konvertálja unserialize() – visszakonvertálja a sztringet • explode() – sztringet határolókarakter mentén tömbbe darabol föl implode() – tömbben tárolt adatok összefűzése sztringgé határoló karakterrel
PHP Sztring kezelés strstr(miben,mit) rész-sztring keresés strpos(miben, mit) rész-sztring keresés poziciót ad vissza substr(miben, poz, hossz) rész-sztring strtok(szo, szeparator) szó darabolás $szo = strtok($szoveg,$szeplist); while (is_string($szo)){ if ($szo){…} $szo = strtok($szeplist); } trim(szo), rtrim(szo), ltrim(szo) üres szöveg-vég levágás substr_replace(miben,mit,index) rész-szöveg helyettesítés strtolower(szo), strtoupper(szo)kis- ill. nagybetűre konvertál strrev(szo) sztringet megfordít K.L.
PHP Sztring kezelés addslashes($s) sztringben spec. karaktereket \-el ellátja crypt($s, $key) adott kulcs használatával DES eljárással titkosítja a sztringet echo ” ”, print($s) sztring kiiratása strcasecmp($s1, $s2) betűméretre nem érzékeny sztring összehasonlítás strcmp($s1, $s2) betűméretre érzékeny sztring összehasonlítás strlen($s) sztring hossza htmlentities($s) spec. karaktereket HTML elemekre konvertál htmlspecialchars($s) spec. karaktereket HTML elemekre konvertál … K.L.
PHP Reguláris kifejezések: részsztring kereséshez, helyettesítésehez ereg(amit,amiben) kis- és nagybetű érzékeny ereg_replace(amit,amire,amiben) eregi(amit,amiben)kis- és nagybetűre nem érzékeny eregi_replace(amit,amire,amiben) split(határoló,s) a sztringet a határoló sztring mentén felosztja részekre és tömbben helyez el (kis- és nagybetű érzékeny) spliti(határoló,s) kis- és nagybetűre nem érzékeny Speciális karakterek: ^x : a keresett sztring a keresési sztring elején van x$ : a keresett sztring a keresési sztring végén van x* : a keresett sztring után tetsz. karakter lehet {} : megadott számú karaktert keres K.L.
PHP Egyéb függvények
PHP Típusellenőrzés empty() változó kitöltöttségét vizsgálja print_r(), var_dump() változókról információk gettype(), settype() aut. típusfelismerés és beállítás is_array() , is_object(), is_string(), is_scalar(), is_null(), is_bool(), is_double(), is_float(), is_real(), is_numeric(), is_long(), is_int(), is_integer() Konverzió intval() egész érték kiemelése változóból (sztringől is, ha az egész a sztring elején van!) base_convert() adott számot egyik számrendszerből másikba konvertál (számrendszerek: 2-32) decbin() , bindec(), dechex(), hexdec() … deg2grad(), grad2deg() $r = (double) 111; explicit típus kijelölés
PHP Matematika • Standard mat. fv-ek: max(), min(), abs(), pow(), sin(), cos(), sqrt() … • number_format() a tizedesjel és az ezreseket elválasztó kar. megadásával megformáz egy számot • floor(), ceil(), round() leb. pontos szám egész része, felfelé kerekítése és szabályos kerekítése • Kibővített matematikai szoftverek • GMP: • tetsz. nagyobb méretű egészekhez (32 biten, előjeles) • GNU MP: nyílt forráskódú mat. csomag • BCMath • tetsz. pontosságú mat. fv-ek • lebegőpontos számokhoz (64 biten, 14 számjegy)
PHP Véletlenszámok rand(), mt_rand()véletlenszám előállítása srand(), mt_srand() kezdőérték meghatározása getrandmax(), mt_getrandmax() rand() fv-ben használható intervallum maximum lekérdezése Szkript időzítés microtime() szkript időzítő fv. a művelet idejének mérésére eredménye: - a másodperc törtrésze - unix-idő mp-ben Idősztring összeállítása: $m = microtime(); $mstart = explode(” ”,$m); print( date(”l F j, Y h:i:s”, $mstart[1]) . substr($mstart[0],1) . date(” a”, $mstart[1]) ); Két művelet idejének különbsége: print( bcsub($s1, $s2) );
PHP Hibakeresés assert($s), assert_options() hibakeresés die(”üzenet”) szkript leállítása üzenetküldéssel @fvnev() a hibát generáló fv. leállítása a hiba kiiratása nélkül error_log (”üzenet”, 0 | 1) üzenet hozzáadása a hibanaplóhoz Kimenet-vezérlés ob_start() a kimenet nem kerül a böngészőbe ob_end_flush() a kimenet a pufferbe kerül ob_end_clean() a kimenet nem kerül a pufferbe ob_get_contents() pufferelt kimenet eltárolása