WEBFEJLESZTÉS 2. ADATTÁROLÁS, FÁJLOK

Hasonló dokumentumok
WEBFEJLESZTÉS 2. ADATTÁROLÁS, FÁJLOK

WEBFEJLESZTÉS 2. ADATTÁROLÁS, MUNKAMENET- KEZELÉS, AJAX

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

WEBFEJLESZTÉS 2. MUNKAMENET-KEZELÉS, HITELESÍTÉS

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 6.ELŐADÁS. Fájlkezelés PHP-ben

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

PHP-MySQL. Adatbázisok gyakorlat

Adatbázis rendszerek Gy: Az adattárolás fejlődése

Listák, szótárak, fájlok Listák, szótárak, fájlok

ELTE SAP Excellence Center Oktatóanyag 1

S z á m í t ó g é p e s a l a p i s m e r e t e k

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

PHP. Adatbázisok gyakorlat

PHP gyorstalpaló, avagy a Hello World-től az űrlapellenőrzésig

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r

Informatika terméktervezőknek

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

A DBM függvények használata

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Operációs rendszerek. UNIX fájlrendszer

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

BASH script programozás II. Vezérlési szerkezetek

Mintavételes szabályozás mikrovezérlő segítségével

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Programozási nyelvek Python

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

PHP MySQL, Java JDBC MySQL. Adatbázisok az iskolában 2012 Dr. Balázs Péter Palatinus Endre és Erdőhelyi Balázs diái alapján

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

WEBFEJLESZTÉS 2. PHP NYELVI ALAPOK

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

Pénzügyi algoritmusok

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés

2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év).

NAV nyomtatványok kitöltésének támogatása

3. modul - Szövegszerkesztés

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Programozás alapjai. 5. előadás

Internet programozása. 1. előadás

Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok

MATLAB. 9. gyakorlat. Cellatömbök, struktúrák, fájlműveletek

Programozás C nyelven (10a. ELŐADÁS) Sapientia EMTE

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

INFORMATIKAI ALAPISMERETEK

Körkörös listák. fej. utolsó. utolsó. fej

INFORMATIKA javítókulcs 2016

1. Egyszerű (primitív) típusok. 2. Referencia típusok

ECDL Táblázatkezelés A táblázatkezelés első lépései Beállítások elvégzése

INFORMATIKAI ALAPISMERETEK

Web-fejlesztés NGM_IN002_1

Feltételezés: A file strukturálisan helyes, tanszékenként nem üres, de az adott listázási feladatban kikötött számút nem haladja meg.

HTML ÉS PHP ŐSZI FÉLÉV

Az Összegfokozatos listázás téma 2. gyakorlata

Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

Webprogramozás szakkör

Programozás 6. Dr. Iványi Péter

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Nyilvántartási Rendszer

HÁZI FELADAT PROGRAMOZÁS I. évf. Fizikus BSc. 2009/2010. I. félév

kodolosuli.hu: Interaktív, programozást tanító portál BALLA TAMÁS, DR. KIRÁLY SÁNDOR NETWORKSHOP 2017, SZEGED

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

10.óra CodeIgniter Framework #3. Gyimesi Ákos

Adatszerkezetek 1. Dr. Iványi Péter

A PHP nyelv alapjai. Web-Sky Consulting Kft Tóth Imre 2009

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Szkriptnyelvek II. Perl programok

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő A PHP programozási nyelv JDBC, ODBC

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Programozás és adatbázis kezelés PHP ben

10. ÓRA. Fájlok használata

A webhelyhez kötődő szoftverek architektúrája

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Adatbázis rendszerek. dr. Siki Zoltán

INFORMATIKAI ALAPISMERETEK

AWK programozás, minták, vezérlési szerkezetek

Adatbázis-kezelő rendszerek. dr. Siki Zoltán

Operációs rendszerek gyak.

A C programozási nyelv I. Bevezetés

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

Tartalomjegyzék. I. rész Az elsõ lépések

A C programozási nyelv VI. Parancssori argumentumok File kezelés

A C programozási nyelv I. Bevezetés

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Programozás Minta programterv a 1. házi feladathoz 1.

Powershell 2. gyakorlat

Inczédy György Középiskola, Szakiskola és Kollégium Nyíregyháza, Árok u. 53. TANMENET. Informatika szakmacsoport

INFORMATIKAI ALAPISMERETEK

PFW Programing Fundamentals Wizard

INFORMATIKA tétel 2019

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Python tanfolyam Python bevezető I. rész

Technikai információk fejlesztőknek

9.óra CodeIgniter Framework #1. Gyimesi Ákos

Átírás:

WEBFEJLESZTÉS 2. ADATTÁROLÁS, FÁJLOK Horváth Győző Egyetemi adjunktus 1117 Budapest, Pázmány Péter sétány 1/C, 2.420 Tel: (1) 372-2500/1816

PHP beadandó 2 Honlapról elérhető Grafilogika szerveroldali funkcionalitása tárolás (fájlban) listázás szerkesztés ajax Határidő: május 12. éjfél

3 Ismétlés

Ismétlés 4 Dinamikus szerveroldali webprogramozás: program (PHP) állítja elő a tartalmat (HTML) Input kliens: link, űrlap szerver: CGI program: környezeti változók standard input Szerver Kliens PHP

Ismétlés 5 PHP linkben? után $_GET tömb űrlap get $_GET tömb űrlap post $_POST Űrlapfeldolgozás Adatok (nincsen: $_POST, $_GET, HTML) Beolvasás, ellenőrzés ($_POST, $_GET) Kimenet (HTML)

Adatok tárolása 6 Szükséges input output Hogyan? memória (nem jó, külön kérések vannak) fájl adatbázis

7 Fájlkezelés PHP-ban

Fájlműveletek PHP-ban 8 PHP-ban van lehetőség fájlok használatára (írás, olvasás, stb) Mint a legtöbb programozási nyelvben Csak a szerver helyi fájljai érhetők el Sokféle nyelvi lehetőség Tipikus folyamat megnyitás feldolgozás bezárás

Általános fájlműveletek 9 $f = fopen($fájlnév, $mód) fájl vagy URL megnyitása $f: logikai fájlkezelő $mód határozza a megnyitás módját r (csak olvasás) r+ (olvasás, írás) w (csak írás, üres fájl) w+ (olvasás, írás, üres fájl) a (hozzáfűzés) a+ (hozzáfűzés, olvasás) x (csak írás, üres fájl, ha létezik a fájl, akkor hiba) x+ (olvasás, írás, üres fájl, ha létezik, akkor hiba) c (csak írás, ha létezik, akkor elejére áll) c+ (írás, olvasás, ha létezik, elejére áll)

Általános fájlműveletek 10 feof($f) fájl vége? Beolvasás fread($f, $hossz) $hossz byte beolvasása fscanf($f, $formátum) formátum szerinti beolv. fgets($f[, $hossz]) sor beolvasása fclose($f) fájl bezárása Kiírás fwrite($f, $s) $s kiírása fputs($f, $s) ld. fwrite()

Példa filmcímek beolvasása 11 Cél: filmcímeket táblázatban kilistázni Kimenet <!doctype html> <html> <head> <meta charset="utf-8"> <title>fájl</title> </head> <body> <table border="1"> <?php foreach ($filmek as $film) :?> <tr> <td><?php echo $film;?></td> </tr> <?php endforeach;?> </table> </body> </html>

Példa filmcímek beolvasása 12 A hobbit A Gyűrűk Ura Út a vadonba Passió $filmek = array(); $f = fopen('lista.txt', 'r'); while (!feof($f)) { $sor = fgets($f); $filmek[] = $sor; fclose($f);

Példa filmcímek beolvasása 13 Javítandó Új sor karakterek a sor végén trim($s) Üres sor a fájl végén ellenőrzés $filmek = array(); $f = fopen('lista.txt', 'r'); while (!feof($f)) { $sor = trim(fgets($f)); if ($sor!= '') { $filmek[] = $sor; fclose($f);

Hibaellenőrzés 14 A fájlműveletek hamis értékkel térnek vissza hiba esetén általában hamis érték ellenőrzése $filmek = array(); $f = fopen('lista_.txt', 'r'); if ($f) { while (!feof($f)) { $sor = trim(fgets($f)); if ($sor!= '') { $filmek[] = $sor; fclose($f);

Hibaellenőrzés 15 Hibaüzenet kiírását a @ operátorral nyomhatjuk el $filmek = array(); $f = @fopen('lista_.txt', 'r'); if ($f) { while (!feof($f)) { $sor = trim(fgets($f)); if ($sor!= '') { $filmek[] = $sor; fclose($f);

Magasabb szintű fájlműveletek 16 Beolvasás file($fájlnév[, módosítók]) fájl soronként beolvas egy tömbbe file_get_contents($fájlnév) egész fájlt szövegként beolvassa readfile($fájlnév) A fájlt a kimenetre írja pl. képek kiírása fpassthru($f) Megnyitott fájl maradék részét a kimenetre írja pl. képek kiírása

Példa file() használatával 17 Új sor karakterek és üres sor nélkül $filmek = file('lista.txt', FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES); Hibaellenőrzéssel $filmek = @file('lista_.txt', FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES) or die('nincs meg a fájl'); vagy $filmek = @file('lista_.txt', FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES); if (!$filmek) { $filmek = array();

Példa file_get_contents() 18 Beolvasni, feldarabolni //$s szövegbe beolvasni $s = file_get_contents('lista.txt'); //feldarabolni új sor szerint $filmek = explode("\n", $s); //utolsó üres elemet kivenni array_pop($filmek); Hibaellenőrzés (hasonló a file()-hoz) //$s szövegbe beolvasni $s = @file_get_contents('lista_.txt') or die('nincs meg a fájl'); //feldarabolni új sor szerint $filmek = explode("\n", $s); //utolsó üres elemet kivenni array_pop($filmek);

Példa tömb kiírása listába 19 Nyitás módja: w, a, x Konstans definiálása Hibaellenőrzés Írási jog az adott könyvtárra Vuk Lolka és Bolka Macskafogó Kisvakond és barátai $filmek = array( 'Vuk', 'Lolka és Bolka', 'Macskafogó', 'Kisvakond és barátai', ); define('sorveg', "\n"); $f = @fopen('mesek.txt', 'w') or die('hiba!'); if ($f) { foreach ($filmek as $film) { fputs($f, $film. SORVEG); fclose($f);

Példa új sor hozzáfűzése 20 Hozzáfűzésre megnyitás Egy sor kiírása $uj_film = 'Hupikék törpikék'; define('sorveg', "\n"); $f = @fopen('mesek.txt', 'a') or die('hiba!'); if ($f) { fputs($f, $uj_film. SORVEG); fclose($f); Vuk Lolka és Bolka Macskafogó Kisvakond és barátai Hupikék törpikék

Magasabb szintű fájlműveletek 21 Kiírás file_put_contents($fájlnév, $s) Szöveget a fájlba írja $filmek = array( 'Vuk', 'Lolka és Bolka', 'Macskafogó', 'Kisvakond és barátai', ); define('sorveg', "\n"); //Elemek összefűzése $s = implode(sorveg, $filmek). SORVEG; $siker = @file_put_contents('mesek.txt', $s);

Konkurens fájlhasználat 22 Ha egyszerre többen hívják meg a szkriptet konkurens használat flock($f, $op) $op LOCK_SH (olvasáshoz) LOCK_EX (íráshoz) LOCK_UN (kioldáshoz) fflush($f) define('sorveg', "\n"); $f = @fopen('mesek.txt', 'w') or die('hiba!'); if ($f) { if (flock($f, LOCK_EX)) { foreach ($filmek as $film) { fputs($f, $film. SORVEG); flock($f, LOCK_UN); fclose($f); fájlpuffer ürítése

Konkurens fájlhasználat 23 Olvasáshoz is érdemes lockolni a fájlt, hogy közben ne kezdődhessen el egy írási folyamat. $filmek = array(); $f = @fopen('lista.txt', 'r'); if ($f) { if (flock($f, LOCK_SH)) { while (!feof($f)) { $sor = trim(fgets($f)); if ($sor!= '') { $filmek[] = $sor; flock($f, LOCK_UN); fclose($f);

Példa összetett adatszerkezet 24 Ne csak a filmek címeit tároljuk, hanem cím rendező megjelenés éve Lépések PHP-s adatszerkezet kiírás beolvasás

Példa adatszerkezet 25 Rekordok tömbje $filmek = array( array( 'cim' 'rendezo' 'ev' ), array( 'cim' 'rendezo' ), ); 'ev' => 'Passió', => 'Mel Gibson', => '2004', => 'Pio atya - A csodák embere', => 'Carlo Carlei', => '2000',

Példa kiírás 26 Egy rekord egy sor define('sorveg', "\n"); $f = @fopen('filmek.txt', 'w ) or die('hiba!'); if ($f) { if (flock($f, LOCK_EX)) { foreach ($filmek as $film) { $cim = $film['cim']; $rendezo = $film['rendezo']; $ev = $film['ev']; $sor = "{$cim\t{$rendezo\t{$ev"; //vagy $sor = implode("\t", $film); fputs($f, $sor. SORVEG); flock($f, LOCK_UN); fclose($f); Passió Mel Gibson 2004 Pio atya - A csodák embere Carlo Carlei 2000

Példa beolvasás 27 Egy rekord egy sor $filmek = array(); $f = @fopen('filmek.txt', 'r'); if ($f) { if (flock($f, LOCK_SH)) { while (!feof($f)) { $sor = trim(fgets($f)); if ($sor!= '') { $filmek[] = explode("\t", $sor); flock($f, LOCK_UN); fclose($f); print_r($filmek);

Példa beolvasás 28 Egy rekord egy sor $filmek = file('filmek.txt', FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES); foreach($filmek as &$film) { $film = explode("\t", $film); print_r($filmek);

Példa kiírás CSV formátumban 29 fputcsv($f, $tömb[, $elválasztó]) define('sorveg', "\n"); $f = @fopen('filmek.txt', 'w') or die('hiba!'); if ($f) { if (flock($f, LOCK_EX)) { foreach ($filmek as $film) { fputcsv($f, $film, "\t"); flock($f, LOCK_UN); fclose($f); Passió "Mel Gibson" 2004 "Pio atya - A csodák embere" "Carlo Carlei" 2000

Példa beolvasás CSV-ből 30 fgetcsv($f, $hossz[$elválasztó]) $filmek = array(); $f = @fopen('filmek.txt', 'r'); if ($f) { if (flock($f, LOCK_SH)) { while (!feof($f)) { $filmek[] = fgetcsv($f, 0, "\t"); flock($f, LOCK_UN); fclose($f);

Példa kiírás 31 Külön sorban define('sorveg', "\n"); $f = @fopen('filmek.txt', 'w') or die('hiba!'); if ($f) { if (flock($f, LOCK_EX)) { foreach ($filmek as $film) { fputs($f, $film['cim']. SORVEG); fputs($f, $film['rendezo']. SORVEG); fputs($f, $film['ev']. SORVEG); fputs($f, SORVEG); flock($f, LOCK_UN); fclose($f); Passió Mel Gibson 2004 Pio atya - A csodák embere Carlo Carlei 2000

Példa - beolvasás 32 Külön sorban $filmek = array(); $f = @fopen('filmek.txt', 'r'); if ($f) { if (flock($f, LOCK_SH)) { while (!feof($f)) { $cim = trim(fgets($f)); $rendezo = trim(fgets($f)); $ev = trim(fgets($f)); if ($cim!= '') { $filmek[] = array( 'cim' => $cim, 'rendezo' => $rendezo, 'ev' => $ev, ); flock($f, LOCK_UN); fclose($f);

URL-ek olvasása 33 A fájlműveletek többsége nemcsak fájlt, hanem URL-t is képes olvasni (általában folyamokat) PHP-ban fel tudunk dolgozni más oldalakat Egy egyszerű oldal megjelenítése: $s = file_get_contents('http://www.elte.hu/'); echo $s;

További fájlműveletek 34 mkdir($útvonal) könyvtár létrehozása rmdir($könyvtárnév) könyvtár törlése copy($forrás, $cél) másolás rename($mit, $mire) átnevezés, mozgatás unlink($fájlnév) törlés is_dir($fájlnév) is_file($fájlnév) is_readable($fájlnév) is_writable($fájlnév) is_link($fájlnév) is_executable($fájlnév)

További fájlműveletek 35 basename($útvonal) fájlnevet adja vissza chown($fájl, $user) chmod($fájl, $mód) chgrp($fájl, $group) stat($fájl) fájl adatai tömbben fseek($f, $offset) fájlmutató mozgatása

Összefoglalás 36 Alacsony és magas szintű fájlműveletek Beolvasást és a kiírást meghatározza: a fájl szerkezete; vagy az adat szerkezete Továbblépés adatszerkezetek

37 Adatszerkezetek és sorosításuk

Adatszerkezetek 38 //Rekord $rekord = array( 'mezo1' => 'ertek1', 'mezo2' => 'ertek2', 'mezo3' => 'ertek3', ); //Tömb $indtomb = array( 'ertek1', 'ertek2', 'ertek3', ); //Rekordok tömbje $rektomb = array( array( 'mezo1' => 'ertek1', 'mezo2' => 'ertek2', ), array( 'mezo1' => 'ertek1', 'mezo2' => 'ertek2', ), array( 'mezo1' => 'ertek1', 'mezo2' => 'ertek2', ), );

39 Példa Rekordok tömbje cím rendező év szereplők $filmek = array( array( 'cim' => 'Passió', 'rendezo' => 'Mel Gibson', 'ev' => '2004', 'szereplok'=> array( 'Jim Caviezel', 'Maia Morgenstern', 'Christo Jivkov', ), ), array( 'cim' => 'Pio atya - A csodák embere', 'rendezo' => 'Carlo Carlei', 'ev' => '2000', 'szereplok'=> array( 'Sergio Castellitto', 'Sergio Albelli', ), ), );

Példa feldolgozása 40 Nehézségek, kérdések Milyen legyen a fájl szerkezete? egy rekord egy sor? több sor (behúzásokkal) Feldolgozó algoritmushoz már nem használhatók a kényelmes függvények soronként, rekordonként kell feldolgozni megoldható, de sok idő

Sorosítás 41 Sorosítás egy adatszerkezet visszaalakítható szöveges megfelelője. Tároláshoz, átküldéshez szokták használni Sorosító függvények serialize($érték) szöveg unserialize($szöveg) érték json_encode($érték) szöveg json_decode($szöveg) érték

Serialize, unserialize 42 $s = serialize($filmek); echo $s; //a:2:{i:0;a:4:{s:3:"cim";s:7:" Passió";s:7:"rendezo";s:10:"Mel Gibson";s:2:"ev";s:4:"2004";s:9 :"szereplok";a:3:{i:0;s:12:"jim Caviezel";i:1;s:16:"Maia Morgenstern";i:2;s:14:"Christo Jivkov";i:1;a:4:{s:3:"cim";s: 27:"Pio atya - A csodák embere";s:7:"rendezo";s:12:"car lo Carlei";s:2:"ev";s:4:"2000";s:9 :"szereplok";a:2:{i:0;s:18:"ser gio Castellitto";i:1;s:14:"Sergio Albelli"; $filmek2 = unserialize($s); print_r($filmek2); /*Array ( [0] => Array ( [cim] => Passió [rendezo] => Mel Gibson [ev] => 2004 [szereplok] => Array ( [0] => Jim Caviezel [1] => Maia Morgenstern [2] => Christo Jivkov ) )*/ ) [1] => Array ( [cim] => Pio atya - A csodák embere [rendezo] => Carlo Carlei [ev] => 2000 [szereplok] => Array ( [0] => Sergio Castellitto [1] => Sergio Albelli ) )

43 json_encode $s = json_encode($filmek); echo $s; //[{"cim":"passi\u00f3","rendez o":"mel Gibson","ev":"2004","szereplok" :["Jim Caviezel","Maia Morgenstern","Christo Jivkov"],{"cim":"Pio atya - A csod\u00e1k embere","rendezo":"carlo Carlei","ev":"2000","szereplok" :["Sergio Castellitto","Sergio Albelli"]] /* [ { "cim":"passi\u00f3", "rendezo":"mel Gibson", "ev":"2004", "szereplok":[ "Jim Caviezel", "Maia Morgenstern", "Christo Jivkov" ], { "cim":"pio atya - A csod\u00e1k embere", "rendezo":"carlo Carlei", "ev":"2000", "szereplok":[ "Sergio Castellitto", "Sergio Albelli" ] ] */

json_decode 44 $filmek3 = json_decode($s, true); print_r($filmek3); /*Array ( [0] => Array ( [cim] => Passió [rendezo] => Mel Gibson [ev] => 2004 [szereplok] => Array ( [0] => Jim Caviezel [1] => Maia Morgenstern [2] => Christo Jivkov ) ) [1] => Array ( [cim] => Pio atya - A csodák embere [rendezo] => Carlo Carlei [ev] => 2000 [szereplok] => Array ( [0] => Sergio Castellitto [1] => Sergio Albelli ) )*/ )

Fájl és sorosítás 45 Két segédfüggvény Betöltés Mentés Akármilyen adatszerkezetre működik function fajlbol_betolt($fajlnev) { $s = file_get_contents($fajlnev); return json_decode($s, true); function fajlba_ment($fajlnev, $adat) { $s = json_encode($adat); return file_put_contents($fajlnev, $s, LOCK_EX);

Példa új szereplő hozzáadása 47 $filmek = fajlbol_betolt('filmek.txt'); $filmek[0]['szereplok'][] = 'Monica Bellucci'; fajlba_ment('filmek.txt', $filmek); [{"cim":"passi\u00f3","rendezo":"mel Gibson","ev":"2004","szereplok":["Jim Caviezel","Maia Morgenstern","Christo Jivkov","Monica Bellucci"],{"cim":"Pio atya - A csod\u00e1k embere","rendezo":"carlo Carlei","ev":"2000","szereplok":["Sergio Castellitto","Sergio Albelli"]]

48 Kódszervezés

Hármas struktúra 49 Adatok és függvények adatszerkezetek megadása adatok betöltése betöltő és mentő függvény adatok feldolgozásához kapcsolódó függvények Kérés feldolgozása beolvasás ($_POST, $_GET, stb.) és ellenőrzés feldolgozás meghívása kimeneti adatok előkészítése Kimenet HTML sablon

Vázlat 50 <?php //Adatok //IO függvények function fajlbol_betolt($fajlnev, $alap = array()) { $s = @file_get_contents($fajlnev); return (s === false? $alap : json_decode($s, true)); function fajlba_ment($fajlnev, $adat) { $s = json_encode($adat); return file_put_contents($fajlnev, $s, LOCK_EX); //Adatokkal kapcsolatos függvények function feldolgozas{$adat { //... //--------------------------------------------------- //Kérés feldolgozása //... //--------------------------------------------------- //Kimenet?> HTML sablon

Külön fájlba helyezés 51 Funkcionálisan elváló részeket külön fájlokban tárolni karbantartás Fájlok beemelése: inlcude($fájlnév) hiba esetén warninggal továbbmegy include_once($fájlnév) require($fájlnév) hiba esetén hibával megáll require_once($fájlnév) Mintha odamásolnánk a fájl tartalmát

Vázlat 52 fileio.php betöltés és mentés fix adat.php feladatfüggő név és tartalom kimenet.php feladatfüggő név és tartalom <?php include('fileio.php'); include('adat.php'); //Kérés feldolgozása //... include('kimenet.php');

Szétszedés hátránya 53 Minden funkcióhoz három fájl tartozik adat, kimenet, kérést fogadó ez növeli a bonyolultságot rontja az áttekinthetőséget (javítja a karbantarthatóságot) Csak a kérés fogadót szabad meghívni! ő húzza be a többit erre figyelni kell

Tokenes védelem 54 Kérést kiszolgáló szkriptben token definiálása <?php define('token', 'Védelem'); include('fileio.php'); include('adat.php'); //Kérés feldolgozása //... include('kimenet.php'); Többi szkript első sora ezt vizsgálja <?php if (! defined('token')) exit('közvetlenül nem elérhetõ!');

.htaccess védelem 55 Könyvtár alapú konfigurációs fájl Apache képes kezelni Ehhez külön könyvtárba kell

Könyvtárba szervezés 56 Az azonos funkcionalitású fájlok azonos könyvtárba kerüljenek Könyvtárak kozos adat kimenet Könyvtáranként.htaccess állomány

Könyvtárba szervezés 57 Könyvtárszerkezet (D) kozos fileio.php.htaccess (D) adat adat.php.htaccess (D) kimenet kimenet.php.htaccess fajl.php fajl.php <?php define('token', 'Védelem'); include('kozos/fileio.php'); include('adat/adat.php'); //Kérés feldolgozása //... include('kimenet/kimenet.php');.htaccess deny from all