170 likes | 248 Views
PHP III. Fájlok, űrlapok. Fájlok vizsgálata. if (file_exists(”hello.txt ” )) echo ”File exists ” ; if (is_file(”hello.txt ” )) echo ”File! ” ; if (is_dir(”C:\Windows ” )) echo ”Directory! ” ; // ‘\’ és ‘/’ is megengedett! is_readable(), is_writeable(), is_executable()
E N D
Fájlok vizsgálata • if (file_exists(”hello.txt”)) • echo ”File exists”; • if (is_file(”hello.txt”)) • echo ”File!”; • if (is_dir(”C:\\Windows”)) • echo ”Directory!”; // ‘\\’ és ‘/’ is megengedett! • is_readable(), is_writeable(), is_executable() • filesize(”hello.txt”);
Fájlok olvasása • Megnyitás: $fp = fopen($path, $mode) • $mode: ”r”, ”w”, ”a”, ... (read/write/append) • Bezárás: fclose($fp) • Sor olvasása: $line = fgets($fp, 1024) • Fájl vége: feof($fp) • Olvasás: fread($fp, 16) • Pozícionálás: fseek($fp, 16) • Karakter: $ch = fgetc($fp) • Teljes tartalom: file(), file_get_contents()
Feladatok $path = ”dummy.txt”; if (file_exists($path) && is_readable($path)) { $fp = fopen($path, ”r”); print ”Size: ” . filesize($path) . ” bytes <br/>”; print ”Content: <br/>”; while (!feof($fp)) { $line = fgets($fp, 1024); print htmlspecialchars($line) . ”<br/>”; } fclose($fp); }
Feladatok $lines = file(”hello.txt”); foreach ($lines as $line) echo $line . ‘<br/>’; $content = file_get_contents(”hello.txt”); print $content; // nl2br($content);
Fájlok írás • Szöveg írása: • fwrite($fp, ”Hello world!”); // vagy fputs() • fflush($fp) • Teljes tartalom: • file_put_contents($path, $content, $flag) • Zárolás: flock($fp, $operation) • LOCK_SH: olvashatják, de nem írhatják • LOCK_EX: nem olvashatják, nem írhatják • LOCK_UN: feloldás
Könyvtárak • Létrehozás: mkdir(); • Törlés: rmdir(); • Nyitás: $d = opendir(”mydir”); • Olvasás: $e = readdir($d); • Vizsgálat: is_dir($e); • Bezárás: closedir($d);
Feladat $dirname = ”.”; $dir = opendir($dirname); while ($f = readdir($dir)) echo $f . ’<br/>’; closedir($dir); Hiba: hozzunk létre egy „0” nevű fájlt! Ötlet: while (!is_bool($f = readdir($dir)))
Fájlok, könyvtárak • basename(”/home/a.txt”); // ”a.txt” • dirname(”/home/a.txt”) // ”/home” • Másolás: copy($src, $dest); • Törlés: unlink(”/home/a.txt”) // delete() • Átnevezés: rename(”/home/a.txt”) • Temp fájl: $fp = tmpfile(); • Könyvtár váltás: chdir($dirname) • Aktuális könyvtár: getcwd()
Űrlapok • Kliens oldal (browser): • HTML form method=”post” • Változók a $_POST tömbben • HTML form method=”get” • Változók a $_GET tömbben • index.php?id=15&page=34 • hosszabb szöveget: urlencode(), urldecode() • Szerver oldal (apache+php): • <input type=”text” name=”username” /> • $username = $_POST[’username’];
Űrlapok • A $_SERVER tömb: • ’PHP_SELF’ - aktuális script • ’HTTP_USER_AGENT’ - böngésző • ’REMOTE_ADDR’ - IP cím • ’REQUESTED_METHOD’ - POST v. GET • ’QUERY_STRING’ - GET url változók • ’REQUEST_URI’ - teljes cím • ’HTTP_REFERER’ - a kérelmező oldal
Űrlapok • HTML select • <select name=”people” multipe=”multiple”> • <option>Vladimir</option> • <option>Paul</option> • foreach($_POST[’people’] as $person) • echo $person . ’<br/>’; • Rejtett mezők • <input type=”hidden” name=”click” • Állapotok tárolhatók
Feladatok <?php if (!isset($_POST[’user’]) || !isset($_POST[’pass’])) { ?> <form method=”post” action=”auth.php”> <p>User: <input type=”text” name=”user”></p> <p>Pass: <input type=”password” name=”pass”></p> <p><input type=”submit” value=”Submit”></p> </form> <?php } else { $name = $_POST[’user’]; $pass = $_POST[’pass’]; $acc = file(’access.txt’); if (!strcmp($name, trim($acc[0])) && !strcmp($pass, trim($acc[1]))) echo ’Üdvözöljük ’ . $name; else echo ’Hibás bejelentkezés!<br/>IP: ’ . $_SERVER[’REMOTE_ADDR’]; } ?>
Fájl feltöltés • HTML • <form enctype=”multipart/form-data” ... • <input type=”file” name=”up” • PHP • $_FILES[’up’][’name’] // a.bmp • $_FILES[’up’][’tmp_name’] // /tmp/phpDfsdZ • $_FILES[’up’][’size’] // 6987 • $_FILES[’up’][’type’] // image/bmp • $_FILES[’up’][’error’] // hibakód
Fájl feltöltés • Hiba kódok: • UPLOAD_ERR_OK 0 • UPLOAD_ERR_INI_SIZE 1 • UPLOAD_ERR_FORM_SIZE 2 • UPLOAD_ERR_PARTIAL 3 • UPLOAD_ERR_NO_FILE 4 • Max. méret megadása: • <input type=”hidden” name=”MAX_FILE_SIZE” value=”102400”
Feladatok if (isset($_FILES[’up’])) { $validtypes = array(”image/jpeg”, ”image/gif”); $up = $_FILES[’up’]; if (($up[’error’] == 0) && in_array($up[’type’], $validtypes)) { $src = $up[’tmp_name’]; $name = $up[’name’]; $dest = ’upload/’ . $name; move_uploaded_file($src, $dest); echo ’Feltöltés sikerült: <br/>’; echo ”<a href=\”upload/” . $up[’name’] . ”\”>$name</a>”; } else { echo $up[’type’] . ’nem támogatott!’; } }
Feladatok • Készítsünk könyvtár szerkezet bejáró szkriptet, amely megjeleníti a könyvtárban található fájlok és alkönyvtárak listáját, valamint lehetőséget biztosít alkönyvtárba belépésre, illetve visszalépésre. Fájlok esetén írjuk ki a méretét, könyvtár esetén a DIR szót. • Az aktuális könyvtár útvonalat tárolhatjuk pl. GET változóban.