Memorizzare e recuperare l’immagine dal database MySQL utilizzando PHP

Generalmente, quando carichiamo file immagine in PHP, l’immagine caricata viene memorizzato in una directory del server e il rispettivo nome dell’immagine viene memorizzato nel database. Al momento della visualizzazione, il file viene recuperato dal server e l’immagine viene visualizzata sulla pagina Web. Ma, se non si desidera consumare lo spazio del server, il file può essere memorizzato solo nel database. È possibile caricare un’immagine senza memorizzare fisicamente il file sul server utilizzando il database MySQL. E ‘ molto facile da memorizzare e recuperare le immagini dal database utilizzando PHP e MySQL.

Se sei preoccupato per lo spazio del server e hai bisogno di spazio libero sul tuo server, puoi inserire il file immagine direttamente nel database senza caricarlo nella directory del server. Questa procedura consente di ottimizzare lo spazio del server perché il contenuto del file immagine è memorizzato nel database anziché nel server. In questo tutorial, vi mostreremo come memorizzare i file di immagine nel database MySQL e recuperare le immagini dal database utilizzando PHP.

Prima di iniziare a integrare il caricamento dei file con il database, dai un’occhiata alla struttura dei file.

store_retrieve_image_from_database/├── dbConfig.php├── index.php├── upload.php├── view.php└── css/ └── style.css

Inserisci file immagine in MySQL

MySQL ha un tipo di dati BLOB (binary large object) che può contenere una grande quantità di dati binari. Il tipo di dati BLOB è perfetto per memorizzare i dati dell’immagine nel database. In MySQL sono disponibili quattro tipi di BLOB: TINYBLOB, BLOB, MEDIUMBLOB e LONGBLOB. Il tipo di dati LONGBLOB è perfetto per memorizzare i dati del file immagine.

Crea tabella database

Per memorizzare il contenuto del file, è necessaria una tabella nel database. Il seguente SQL crea una tabella images con il campo tipo di dati LONGBLOB nel database MySQL.

CREA TABELLA `images` ( `id` int(11) NOT NULL AUTO_INCREMENT, `image` longblob NOT NULL, `created` datetime NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

Configurazione del database (dbConfig.php)

Il file dbConfig.php viene utilizzato per collegare e selezionare il database. Specificare l’host del database ($dbHost), il nome utente ($dbUsername), la password ($dbPassword) e il nome ($dbName) secondo le credenziali del database MySQL.

<?php 
// Database configuration
$dbHost = "localhost";
$dbUsername = "root";
$dbPassword = "root";
$dbName = "codexworld";
// Create database connection
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
// Check connection
if ($db->connect_error) {
die("Connection failed: " . $db->connect_error);
}

Modulo Caricamento immagini

Crea un modulo HTML con un campo di immissione file per selezionare un file immagine da caricare. Assicurati che il tag< form > contenga i seguenti attributi.

  • method = “post”
  • enctype= “multipart/form-data”
<azione modulo= " carica.php" method="post" enctype="multipart/form-data"> <etichetta>Selezionare il File di Immagine:</label> <input type="file" name="immagine"> <input type="submit" name="submit" value="Upload"></forma:>

Archivio di File di Immagine nel Database (upload.php)

Il file upload.php gestisce il caricamento delle immagini e il processo di inserimento del database.

  • Controlla se l’utente seleziona un file immagine da caricare.
  • Recuperare il contenuto del file immagine dal tmp_name utilizzando PHP file_get_contents () funzione.
  • Inserire il contenuto binario dell’immagine nel database utilizzando PHP e MySQL.
  • Mostra lo stato di caricamento dell’immagine all’utente.
<?php 
// Include the database configuration file
require_once 'dbConfig.php';
// If file upload form is submitted
$status = $statusMsg = '';
if(isset($_POST)){
$status = 'error';
if(!empty($_FILES)) {
// Get file info
$fileName = basename($_FILES);
$fileType = pathinfo($fileName, PATHINFO_EXTENSION);
// Allow certain file formats
$allowTypes = array('jpg','png','jpeg','gif');
if(in_array($fileType, $allowTypes)){
$image = $_FILES;
$imgContent = addslashes(file_get_contents($image));
// Insert image content into database
$insert = $db->query("INSERT into images (image, created) VALUES ('$imgContent', NOW())");
if($insert){
$status = 'success';
$statusMsg = "File uploaded successfully.";
}else{
$statusMsg = "File upload failed, please try again.";
}
}else{
$statusMsg = 'Sorry, only JPG, JPEG, PNG, & GIF files are allowed to upload.';
}
}else{
$statusMsg = 'Please select an image file to upload.';
}
}
// Display status message
echo $statusMsg;
?>

Recuperare l’immagine dal database (vista.php)

Nel file view.php, recupereremo il contenuto dell’immagine dal database MySQL e li elencheremo sulla pagina web.

  • I parametri data, charset e base64 nell’attributo src vengono utilizzati per visualizzare BLOB di immagini dal database MySQL.
<?php 
// Include the database configuration file
require_once 'dbConfig.php';
// Get image data from database
$result = $db->query("SELECT image FROM images ORDER BY id DESC");
?><?php if($result->num_rows > 0){ ?>
<div class="gallery">
<?php while($row = $result->fetch_assoc()){ ?>
<img src="data:image/jpg;charset=utf8;base64,<?php echo base64_encode($row); ?>" />
<?php } ?>
</div>
<?php }else{ ?>
<p class="status error">Image(s) not found...</p>
<?php } ?>

Caricare più immagini e memorizzare nel database utilizzando PHP e MySQL

Conclusione

Questo tutorial consente di integrare la funzionalità di caricamento dei file senza memorizzare i file sul server. È possibile utilizzare questo script di esempio per caricare & memorizzare le immagini nel database e recuperare le immagini dal database e visualizzarle sulla pagina Web utilizzando PHP e MySQL. Per rendere il processo di caricamento delle immagini user-friendly, utilizzare jQuery per caricare i file con barra di avanzamento utilizzando Ajax e PHP.

Vuoi ottenere la guida all’implementazione o modificare o migliorare la funzionalità di questo script? Invia richiesta di servizio a pagamento

Se avete domande su questo script, inviarlo alla nostra comunità QA-Fai una domanda

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.