Memorizzare e richiamare immagini da un Database MySql
Posted on agosto 21, 2008
Filed Under Gallery Immagini | 4 Comments
In questo articolo capiremo come permettere agli utenti l’upload di immagini su siti che non permettono l’accesso in scrittura sul filesystem agli script PHP; andremo a memorizzare le immagini all’interno di una tabella di un Database MySql con opportuni accorgimenti e la richiameremo con uno script direttamente dal tag “<img src”.
Innanzitutto occorre predisporre una tabella per inserire le immagini. Questo il codice MySql per la creazione della tabella all’interno del vostro Database:
CREATE TABLE `uploadimg` (
`key_img` int(11) NOT NULL auto_increment,
`codImg` blob NOT NULL,
PRIMARY KEY (`key_img`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
Come si vede il tipo di campo utilizzato per memorizzare le immagini e’ BLOB ma puo’ anche essere utilizzato il LARGEBLOB. Una volta creata la tabella occorre creare un file di esempio con un form contenente il form da utilizzare per l’upload come ad esempio questo:
uploadImg.php
<html>
<head>
<title>Upload Img in DB (table TEST)</title>
</head>
<body>
<form action=”completeUpload.php” method=”post” enctype=”multipart/form-data“>
<input type=”file” name=”fotoUno”/>
<input type=”submit” value=”INVIA” />
</form>
</body>
</html>
Da notare il tipo di encode utilizzato (mutipart/form-data) e, ovviamente, il tipo di elemento utilizzato per l’upload (file). Questo il file completeUpload.php:
<?php
include (“configuration/database.php”);
$file_path = $_FILES['fotoUno']['tmp_name'];
$table = “uploadimg”;
$codImg = base64_encode(file_get_contents($file_path));
$sql = @mysql_query(“INSERT INTO $table (key_img, codImg) VALUES (”,’$codImg’))”;
?>
L’utilizzo dell’encode base64 permette di evitare spiacevoli inconvenienti con script in PHP durante il caricamento nel database e la successiva lettura perche’ potrebbero essere presenti dei codici interpretati erroneamente dallo script. Il file database.php presente all’interno della directory configuration e’ lo script di connessione al database cosi’ fatto:
database.php
<?php
$dbhost = ‘localhost’;
$dbusername = ‘root’;
$dbpasswd = ”;
$database_name = ‘test’;
$connection = mysql_connect(“$dbhost”,”$dbusername”,”$dbpasswd”) or die (“Impossibile collegarsi al server.”);
$db = mysql_select_db(“$database_name”, $connection) or die(“Impossibile selezionare il database.”);
?>
Navigando con il nostro browser sulla pagina uploadImg.php andiamo a caricare l’immagine; dovremo trovare il contenuto della stessa nel database.
Abbiamo quindi completato la prima parte relativa al caricamento. Andiamo adesso a leggere l’immagine. Questa una pagina di esempio:
mostraImmagine.php
<html>
<head>
<title>Mostra Immagine dal DB</title>
</head>
<body>
<img src=”mostraImg.php?id=1″ />
</body>
</html>
Viene richiamato uno script PHP che cambiando l’header mostrera’ l’immagine scelta. Questo il codice di mostraImg.php:
<?php
include (“configuration/database.php”);
$imageID = $_GET['id'];
$sql = @mysql_query(“SELECT * FROM uploadimg WHERE key_img =’$imageID’”);
$dati = mysql_fetch_array($sql);
$img = $dati['codImg'];
header(‘Content-type: image/jpeg’);
echo base64_decode($img);
exit;
?>
L’immagine viene decodificata e mostrata sul browser che ne fa richiesta.
Others Script adv
4 Responses to “Memorizzare e richiamare immagini da un Database MySql”
Leave a Reply
ciao
ciao, c’è un errore nel codice…
qua:
$sql = @mysql_query(”INSERT INTO $table (key_img, codImg) VALUES (”,’$codImg’)”
non chiudi la parentesi dell’istruzione e di conseguenza ricevi un errore
Esatto Christian! Grazie per la segnalazione; ho aggiornato il post.
con questa modifica non ho nessun errore:
$sql = @mysql_query(“INSERT INTO $table (key_img, codImg) VALUES (‘$codImg’)”);