Généralement, lorsque nous téléchargeons un fichier image en PHP, l’image téléchargée est stockée dans un répertoire du serveur et le nom de l’image respectif est stocké dans la base de données. Au moment de l’affichage, le fichier est récupéré sur le serveur et l’image est rendue sur la page Web. Mais, si vous ne souhaitez pas consommer l’espace du serveur, le fichier ne peut être stocké que dans la base de données. Vous pouvez télécharger une image sans stocker physiquement le fichier sur le serveur à l’aide de la base de données MySQL. Il est très facile de stocker et de récupérer des images de la base de données en utilisant PHP et MySQL.
Si vous êtes préoccupé par l’espace serveur et avez besoin d’espace libre sur votre serveur, vous pouvez insérer le fichier image directement dans la base de données sans le télécharger dans le répertoire du serveur. Cette procédure permet d’optimiser l’espace serveur car le contenu du fichier image est stocké dans la base de données plutôt que sur le serveur. Dans ce tutoriel, nous allons vous montrer comment stocker des fichiers image dans la base de données MySQL et récupérer des images de la base de données en utilisant PHP.
Avant de commencer à intégrer le téléchargement de fichiers à la base de données, jetez un coup d’œil à la structure des fichiers.
store_retrieve_image_from_database/├── dbConfig.php├── index.php├── upload.php├── view.php└── css/ └── style.css
Insérer un fichier image dans MySQL
MySQL a un type de données BLOB (binary large object) qui peut contenir une grande quantité de données binaires. Le type de données BLOB est parfait pour stocker des données d’image dans la base de données. Dans MySQL, quatre types de BLOB sont disponibles : TINYBLOB, BLOB, MEDIUMBLOB et LONGBLOB. Le type de données LONGBLOB est parfait pour stocker les données du fichier image.
Créer une table de base de données
Pour stocker le contenu du fichier, une table est requise dans la base de données. Le SQL suivant crée une table images
avec le champ de type de données LONGBLOB dans la base de données MySQL.
CRÉER UNE TABLE 'images' ('id' int(11) PAS NULL AUTO_INCREMENT, `image` longblob PAS NULL, `créé` datetime PAS NULL PAR DÉFAUT current_timestamp(), CLÉ PRIMAIRE (`id`)) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE= utf8_unicode_ci;
Configuration de la base de données (dbConfig.php)
Le fichier dbConfig.php
est utilisé pour se connecter et sélectionner la base de données. Spécifiez l’hôte de la base de données ($dbHost
), le nom d’utilisateur ($dbUsername
), le mot de passe ($dbPassword
) et le nom ($dbName
) selon vos informations d’identification de base de données 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);
}
Formulaire de téléchargement d’image
Créez un formulaire HTML avec un champ de saisie de fichier pour sélectionner un fichier image à télécharger. Assurez-vous que la balise < form > contient les attributs suivants.
- method= »post »
- enctype= »multipart/form-data »
< action de formulaire = "télécharger.php "method="post" enctype="multipart/form-data" > < label > Sélectionnez le fichier image: </label > < input type="file" name="image"> < input type="submit" name="submit" value="Upload"> </ form>
Stocker le fichier Image dans la base de données (télécharger.php)
Le fichier upload.php
gère le processus de téléchargement d’image et d’insertion de base de données.
- Vérifiez si l’utilisateur sélectionne un fichier image à télécharger.
- Récupère le contenu du fichier image par le tmp_name en utilisant la fonction PHP file_get_contents().
- Insérez le contenu binaire de l’image dans la base de données en utilisant PHP et MySQL.
- Affiche l’état de téléchargement de l’image à l’utilisateur.
<?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;
?>
Récupérer l’image de la base de données (vue.php)
Dans le fichier view.php
, nous allons récupérer le contenu de l’image de la base de données MySQL et les lister sur la page web.
- Les paramètres data, charset et base64 de l’attribut src sont utilisés pour afficher le BLOB d’image de la base de données 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 } ?>
Téléchargez plusieurs Images et Stockez-les dans une base de données en utilisant PHP et MySQL
Conclusion
Ce tutoriel vous aide à intégrer la fonctionnalité de téléchargement de fichiers sans stocker de fichiers sur le serveur. Vous pouvez utiliser cet exemple de script pour télécharger & stocker des images dans la base de données, récupérer des images de la base de données et les afficher sur la page Web en utilisant PHP et MySQL. Pour rendre le processus de téléchargement d’image convivial, utilisez jQuery pour télécharger des fichiers avec barre de progression en utilisant Ajax et PHP.
Voulez-vous obtenir de l’aide pour l’implémentation, ou modifier ou améliorer les fonctionnalités de ce script ? Soumettre une demande de service payant
Si vous avez des questions sur ce script, soumettez-le à notre communauté QA – Posez la question