Generalmente, cuando cargamos un archivo de imagen en PHP, la imagen cargada se almacena en un directorio del servidor y el nombre de imagen respectivo se almacena en la base de datos. En el momento de la visualización, el archivo se recupera del servidor y la imagen se representa en la página web. Pero, si no desea consumir el espacio del servidor, el archivo se puede almacenar solo en la base de datos. Puede cargar una imagen sin almacenar el archivo físicamente en el servidor utilizando la base de datos MySQL. Es muy fácil almacenar y recuperar imágenes de la base de datos utilizando PHP y MySQL.
Si le preocupa el espacio del servidor y necesita espacio libre en su servidor, puede insertar el archivo de imagen directamente en la base de datos sin cargarlo en el directorio del servidor. Este procedimiento ayuda a optimizar el espacio del servidor porque el contenido del archivo de imagen se almacena en la base de datos en lugar del servidor. En este tutorial, le mostraremos cómo almacenar archivos de imagen en la base de datos MySQL y recuperar imágenes de la base de datos utilizando PHP.
Antes de empezar a integrar la carga de archivos con la base de datos, eche un vistazo a la estructura de archivos.
store_retrieve_image_from_database/├── dbConfig.php├── index.php├── upload.php├── view.php└── css/ └── style.css
Insertar archivo de imagen en MySQL
MySQL tiene un tipo de datos BLOB (objeto binario grande) que puede contener una gran cantidad de datos binarios. El tipo de datos BLOB es perfecto para almacenar datos de imágenes en la base de datos. En MySQL, hay cuatro tipos de BLOB disponibles: TINYBLOB, BLOB, MEDIUMBLOB y LONGBLOB. El tipo de datos LONGBLOB es perfecto para almacenar los datos del archivo de imagen.
Crear tabla de base de datos
Para almacenar el contenido del archivo, se requiere una tabla en la base de datos. El siguiente SQL crea una tabla images
con el campo tipo de datos LONGBLOB en la base de datos MySQL.
CREATE TABLE `images` ('id' int (11) NOT NULL AUTO_INCREMENT, `image` longblob NOT NULL, `created` datetime NOT NULL DEFAULT current_timestamp (), PRIMARY KEY (`id`)) ENGINE=InnoDB CONJUNTO DE CARACTERES PREDETERMINADO=utf8 COLLATE=utf8_unicode_ci;
Configuración de la base de datos (dbConfig.php)
El archivo dbConfig.php
se utiliza para conectar y seleccionar la base de datos. Especifique el host de la base de datos ($dbHost
), el nombre de usuario ($dbUsername
), la contraseña ($dbPassword
) y el nombre ($dbName
) según las credenciales de la base de datos 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);
}
Formulario de carga de imágenes
Cree un formulario HTML con un campo de entrada de archivo para seleccionar un archivo de imagen para cargar. Asegúrese de que la etiqueta <form> contenga los siguientes atributos.
- method=»post»
- enctype=»multipart/form-data»
<form action="subir.php " method=" post"enctype="multiparte/form-data"> <label>Seleccionar archivo de imagen:</label> <input type=" file"name="image"> <input type=" submit"name=" submit"value="Upload" ></form>
Almacenar el archivo de imagen en la base de datos (cargar.php)
El archivo upload.php
maneja el proceso de carga de imágenes e inserción de la base de datos.
- Compruebe si el usuario selecciona un archivo de imagen para cargar.
- Recupera el contenido del archivo de imagen por el tmp_name usando la función PHP file_get_contents ().
- Inserte el contenido binario de la imagen en la base de datos utilizando PHP y MySQL.
- Muestra el estado de carga de la imagen al usuario.
<?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;
?>
Recuperar imagen de la base de datos (vista.php)
En el archivo view.php
, recuperaremos el contenido de la imagen de la base de datos MySQL y los listaremos en la página web.
- Los datos, el conjunto de caracteres y los parámetros base64 en el atributo src se utilizan para mostrar el BLOB de imagen de la base de datos 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 } ?>
Cargue varias imágenes y Almacene en la base de datos utilizando PHP y MySQL
Conclusión
Este tutorial le ayuda a integrar la funcionalidad de carga de archivos sin almacenar archivos en el servidor. Puede usar este script de ejemplo para cargar & almacenar imágenes en la base de datos, obtener imágenes de la base de datos y mostrarlas en la página web utilizando PHP y MySQL. Para que el proceso de carga de imágenes sea fácil de usar, use jQuery para cargar archivos con la barra de progreso utilizando Ajax y PHP.
¿Desea obtener ayuda para la implementación, o modificar o mejorar la funcionalidad de este script? Enviar Solicitud de Servicio de pago
Si tiene alguna pregunta sobre este script, envíela a nuestra comunidad de Control de calidad – Haga una pregunta