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() 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: Teljes tartalom: 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): Szerver oldal (apache+php): 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 Rejtett mezők <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 PHP <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: Max. méret megadása: 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 $up = $_FILES[’up’]; 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.