Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:php:php_kepek_tarolasa

< PHP

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