oktatas:programozas:php:php_kepek_tarolasa
Tartalomjegyzék
Képek tárolása
Bevezetés
Sokak szerint rossz ötlet képeket adatbázisban tárolni. Az adatbázisban tárolásnak azonban sok előnye van. Az adatbázisban tárolásról akkor érdemes lemondani, ha az adatbázis tárhelyünk korlátos.
Előnyök:
- könnyű backup
- könnyű kategórizálás
- központosított kezelés
A képek tárolásának lehetőségei
- a képeket egyszerűen fájlokból érjük el
- a képek elérési útjait tároljuk adatbázisban
- a képeket adatbázisban tároljuk
Blob
A Blob a Binary Large Object szavakból alkotott betűszó. Röviden a Blob egy mezőtípus, amelyben bináris adatokat tárolhatunk.
A MySQL négy Blob típust ismer:
- BLOB
- TINYBLOB
- MEDIUMBLOB
- LONGBLOB
Táblakészítés
CREATE TABLE kepek ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, tipus VARCHAR(25) NOT NULL DEFAULT 'Ismeretlen', kep BLOB NOT NULL, dimenzio VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_hungarian_ci NOT NULL DEFAULT 'Ismeretlen', nev VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_hungarian_ci NOT NULL DEFAULT 'Névtelen', kategoria INT(4) NOT NULL DEFAULT 0 ) engine = INNODB CHARACTER SET utf8 COLLATE utf8_hungarian_ci;
- id - A kép azonosítója
- tipus - A kép MIME típusa
- kep - Maga a kép blob tárolóban
- dimenzio - getimagesize() függvénnyel kapott érték
- nev - A kép neve
- kategoria - Milyen kategóriába soroljuk (idegenkulcs)
A kategóriáknak persze lehetne külön táblázata, itt pedig ez csak egy idegenkulcs lenne.
Feltöltő űrlap
<form action="feltolt.php" method="post" enctype="multipart/form-data"> <input name="userfile" type="file" /> <input type="submit" value="Feltölt" /> </form>
Feltöltő
- feltolt.php
<?php if(!isset($_FILES['userfile'])) { echo '<p>Válassz egy fájlt</p>'; } else { try{ upload(); }catch(Exception $e){ echo $e->getMessage(); echo 'Sajnálom, nem lehet feltölteni'; } } function upload() { if(is_uploaded_file($_FILES['userfile']['tmp_name'])) { $maxsize = 10000000; if($_FILES['userfile']['size'] < $maxsize) { $imgData = addslashes(file_get_contents($_FILES['userfile']['tmp_name'])); $info = getimagesize($_FILES['userfile']['tmp_name']); $user = "luser"; $pass = "titok"; mysql_connect("localhost", $user, $pass) or die(mysql_error()); mysql_select_db("test") or die(mysql_error()); $sql = "INSERT INTO kepek (tipus, kep, dimenzio, nev) VALUES ('{$info['mime']}', '{$imgData}', '{$info[3]}','{$_FILES['userfile']['name']}') "; //$info[3] pl.: width="132" height="152" if(!mysql_query($sql)) { echo "Nem tudom feltölteni a képet az adatbázisba!"; } else { echo "Feltöltés ok"; } } } } ?>
Megjelenítő
- leker.php
<?php $user = "luser"; $pass = "titok"; mysql_connect("localhost", $user, $pass) or die(mysql_error()); mysql_select_db("test"); $sql = "select kep from kepek where id=1"; $res = mysql_query($sql) or die("Hiba a lekérés során: ". mysql_error()); header("Content-type:image/jpeg"); echo mysql_result($res, 0); ?>
Linkek
oktatas/programozas/php/php_kepek_tarolasa.txt · Utolsó módosítás: 2019/08/22 10:33 szerkesztette: admin