ogólnie, gdy przesyłamy plik obrazu w PHP, przesłany obraz jest przechowywany w katalogu serwera, a odpowiednia nazwa obrazu jest przechowywana w bazie danych. W momencie wyświetlania plik jest pobierany z serwera, a obraz jest renderowany na stronie internetowej. Ale jeśli nie chcesz zużywać miejsca na serwerze, plik może być przechowywany tylko w bazie danych. Możesz przesłać obraz bez fizycznego przechowywania pliku na serwerze przy użyciu bazy danych MySQL. Bardzo łatwo jest przechowywać i pobierać obrazy z bazy danych za pomocą PHP i MySQL.
jeśli martwisz się o miejsce na serwerze i potrzebujesz wolnego miejsca na serwerze, możesz wstawić plik obrazu bezpośrednio do bazy danych bez przesyłania go do katalogu serwera. Ta procedura pomaga zoptymalizować przestrzeń serwera, ponieważ zawartość pliku obrazu jest przechowywana w bazie danych, a nie na serwerze. W tym samouczku pokażemy, jak przechowywać pliki obrazów w bazie danych MySQL i pobierać obrazy z bazy danych za pomocą PHP.
zanim zaczniesz integrować przesyłanie plików z bazą danych, spójrz na strukturę plików.
store_retrieve_image_from_database/├── dbConfig.php├── index.php├── upload.php├── view.php└── css/ └── style.css
Wstaw plik obrazu do MySQL
MySQL ma typ danych BLOB (Binary large object), który może pomieścić dużą ilość danych binarnych. Typ danych BLOB jest idealny do przechowywania danych obrazu w bazie danych. W MySQL dostępne są cztery typy obiektów BLOB-TINYBLOB, BLOB, MEDIUMBLOB i LONGBLOB. Typ danych LONGBLOB jest idealny do przechowywania danych Pliku obrazu.
Utwórz tabelę bazy danych
do przechowywania zawartości pliku wymagana jest tabela w bazie danych. Poniższy SQL tworzy tabelę images
z polem typu danych LONGBLOB w bazie danych 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 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Konfiguracja bazy danych (dbConfig.php)
plik dbConfig.php
służy do połączenia i wybrania bazy danych. Określ host bazy danych ($dbHost
), nazwę użytkownika ($dbUsername
), hasło ($dbPassword
) i nazwę ($dbName
) zgodnie z poświadczeniami bazy danych 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);
}
formularz przesłania obrazu
Utwórz formularz HTML z polem wprowadzania pliku, aby wybrać plik obrazu do przesłania. Upewnij się, że znacznik< form > zawiera następujące atrybuty.
- method=”post”
- enctype=”multipart / form-data”
<form action= " upload.php" method="post" enctype="multipart/form-data"> <label>Select Image File:</label> <input type="file" name="image"> <input type="submit" name="submit" value="Upload"></form>
przechowuj plik obrazu w bazie danych (upload.php)
plik upload.php
obsługuje proces przesyłania obrazów i wstawiania bazy danych.
- sprawdź, czy użytkownik wybiera plik obrazu do przesłania.
- Pobierz zawartość pliku obrazu za pomocą tmp_name za pomocą funkcji PHP file_get_contents ().
- Wstaw binarną zawartość obrazu do bazy danych za pomocą PHP i MySQL.
- Pokaż status przesłania obrazu użytkownikowi.
<?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;
?>
Pobieranie obrazu z bazy danych (widok.php)
w pliku view.php
pobierzemy zawartość obrazu z bazy danych MySQL i wymienimy je na stronie internetowej.
- dane, charset i parametry base64 w atrybucie src są używane do wyświetlania obiektów BLOB obrazu z bazy danych 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 } ?>
Prześlij wiele obrazów i przechowuj w bazie danych za pomocą PHP i MySQL
wniosek
ten poradnik pomaga zintegrować funkcję przesyłania plików bez przechowywania plików na serwerze. Możesz użyć tego przykładowego skryptu, aby przesłać & przechowuj obrazy w bazie danych, pobrać obrazy z bazy danych i wyświetlić je na stronie internetowej za pomocą PHP i MySQL. Aby proces przesyłania obrazu był przyjazny dla użytkownika, użyj jQuery do przesyłania plików z paskiem postępu przy użyciu Ajax i PHP.
chcesz uzyskać pomoc w implementacji, zmodyfikować lub zwiększyć funkcjonalność tego skryptu? Wyślij Zapytanie o płatną usługę
jeśli masz jakieś pytania dotyczące tego skryptu, wyślij je do naszej społeczności QA-Zadaj pytanie