Obecně platí, že když nahrajeme obrazový soubor v PHP, nahraný obrázek je uložen v adresáři serveru a příslušný název obrázku je uložen v databázi. V době zobrazení je soubor načten ze serveru a obrázek je vykreslen na webové stránce. Pokud však nechcete spotřebovat prostor serveru, lze soubor uložit pouze do databáze. Můžete nahrát obrázek bez fyzického uložení souboru na server pomocí databáze MySQL. Je velmi snadné ukládat a načítat obrázky z databáze pomocí PHP a MySQL.
pokud máte obavy o místo na serveru a potřebujete volné místo na serveru, můžete vložit obrazový soubor přímo do databáze, aniž byste jej nahráli do adresáře serveru. Tento postup pomáhá optimalizovat prostor serveru, protože obsah obrazového souboru je uložen spíše v databázi než na serveru. V tomto tutoriálu vám ukážeme, jak ukládat obrazové soubory do databáze MySQL a načíst obrázky z databáze pomocí PHP.
než začnete integrovat nahrávání souborů do databáze, podívejte se na strukturu souborů.
store_retrieve_image_from_database/├── dbConfig.php├── index.php├── upload.php├── view.php└── css/ └── style.css
vložte obrazový soubor do MySQL
MySQL má datový typ BLOB (binary large object), který pojme velké množství binárních dat. Datový typ BLOB je ideální pro ukládání obrazových dat do databáze. V MySQL jsou k dispozici čtyři typy BLOB – TINYBLOB, BLOB, MEDIUMBLOB a LONGBLOB. Datový typ LONGBLOB je ideální pro ukládání dat obrazového souboru.
vytvořit databázovou tabulku
Chcete-li uložit obsah souboru, je v databázi vyžadována tabulka. Následující SQL vytvoří images
tabulku s datovým typem LONGBLOB v databázi MySQL.
vytvořit tabulku ' 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;
Konfigurace databáze (dbConfig.php)
soubor dbConfig.php
se používá pro připojení a výběr databáze. Zadejte hostitele databáze ($dbHost
), uživatelské jméno ($dbUsername
), heslo ($dbPassword
) a jméno ($dbName
) podle pověření databáze 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);
}
formulář pro nahrání obrázku
vytvořte formulář HTML s polem pro zadání souboru a vyberte soubor obrázku pro nahrání. Ujistěte se, že značka <form> obsahuje následující atributy.
- method= „post“
- enctype= „multipart / form-data“
<form action= " Nahrát.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>
Store Image File in Database (upload.php)
soubor upload.php
zpracovává proces nahrávání obrázků a vkládání databáze.
- zkontrolujte, zda uživatel vybere soubor obrázku, který chcete nahrát.
- načte obsah obrazového souboru pomocí tmp_name pomocí funkce PHP file_get_contents ().
- vložte binární obsah obrázku do databáze pomocí PHP a MySQL.
- zobrazit stav nahrávání obrázku uživateli.
<?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;
?>
načíst obrázek z databáze (pohled .php)
v souboru view.php
načteme obsah obrázku z databáze MySQL a uvedeme je na webové stránce.
- parametry dat, znakové sady a base64 v atributu src se používají k zobrazení obrazu BLOB z databáze 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 } ?>
Nahrajte více obrázků a uložte je do databáze pomocí PHP a MySQL
závěr
tento tutoriál vám pomůže integrovat funkci nahrávání souborů bez ukládání souborů na server. Tento příklad skriptu můžete použít k nahrání & ukládání obrázků do databáze a načtení obrázků z databáze a jejich zobrazení na webové stránce pomocí PHP a MySQL. Chcete-li, aby byl proces nahrávání obrázků uživatelsky přívětivý, použijte jQuery k nahrávání souborů s progress bar pomocí Ajax a PHP.
chcete získat nápovědu k implementaci nebo upravit nebo vylepšit funkčnost tohoto skriptu? Odeslat Žádost o placenou službu
Máte-li jakékoli dotazy týkající se tohoto skriptu, odešlete jej naší komunitě QA-zeptejte se