generellt, när vi laddar upp bildfil i PHP, lagras den uppladdade bilden i en katalog på servern och respektive bildnamn lagras i databasen. Vid tidpunkten för visning hämtas filen från servern och bilden återges på webbsidan. Men om du inte vill konsumera serverns utrymme kan filen bara lagras i databasen. Du kan ladda upp en bild utan att lagra filen fysiskt på servern med hjälp av MySQL-databasen. Det är väldigt enkelt att lagra och hämta bilder från databasen med PHP och MySQL.
om du är orolig för serverutrymmet och behöver ledigt utrymme på din server kan du infoga bildfilen direkt i databasen utan att ladda upp den till serverns katalog. Den här proceduren hjälper till att optimera serverutrymmet eftersom bildfilinnehållet lagras i databasen snarare än servern. I den här handledningen visar vi dig hur du lagrar bildfiler i MySQL-databasen och hämtar bilder från databasen med PHP.
innan du börjar integrera filuppladdning med databasen, ta en titt på filstrukturen.
store_retrieve_image_from_database/├── dbConfig.php├── index.php├── upload.php├── view.php└── css/ └── style.css
infoga bildfil i MySQL
MySQL har en BLOB (binary large object) datatyp som kan innehålla en stor mängd binär data. BLOB – datatypen är perfekt för att lagra bilddata i databasen. I MySQL finns fyra BLOB-typer tillgängliga-TINYBLOB, BLOB, MEDIUMBLOB och LONGBLOB. LONGBLOB-datatypen är perfekt för att lagra bildfildata.
skapa databastabell
för att lagra filinnehållet krävs en tabell i databasen. Följande SQL skapar en images
– tabell med fältet LONGBLOB-datatyp i MySQL-databasen.
Skapa tabell `bilder` ('id' int (11) inte NULL AUTO_INCREMENT, `bild` longblob inte NULL, `skapad` datetime inte NULL standard current_timestamp (), primärnyckel (`id`)) ENGINE=InnoDB standard CHARSET=utf8 COLLATE=utf8_unicode_ci;
Databaskonfiguration (dbConfig.php)
dbConfig.php
– filen används för att ansluta och välja databasen. Ange databasvärd ($dbHost
), användarnamn ($dbUsername
), lösenord ($dbPassword
) och namn ($dbName
) enligt dina MySQL-databasuppgifter.
<?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);
}
Bildöverföringsformulär
skapa ett HTML-formulär med ett filinmatningsfält för att välja en bildfil för uppladdning. Se till att taggen <form> innehåller följande attribut.
- metod= ”post”
- enctype= ”multipart / form-data”
<form action= " ladda upp.php " method=" post"enctype=" multipart/form-data"> <etikett>Välj bildfil:</etikett> <input type="file"name=" image"> <input type="submit"name=" submit"value=" Upload"></form>
lagra bildfil i databasen (ladda upp.php)
filen upload.php
hanterar bilduppladdning och databasinsättning.
- kontrollera om användaren väljer en bildfil att ladda upp.
- hämta innehållet i bildfilen med TMP_NAME med PHP file_get_contents () – funktionen.
- sätt in det binära innehållet i bilden i databasen med PHP och MySQL.
- Visa bilduppladdningsstatus för användaren.
<?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;
?>
Hämta bild från databasen (visa.php)
i filen view.php
hämtar vi bildinnehållet från MySQL-databasen och listar dem på webbsidan.
- data -, charset-och base64-parametrarna i SRC-attributet används för att visa bildblob från MySQL-databasen.
<?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 } ?>
Ladda upp flera bilder och lagra i databasen med PHP och MySQL
slutsats
denna handledning hjälper dig att integrera filuppladdning funktionalitet utan att lagra filer på servern. Du kan använda det här exempelskriptet för att ladda upp & lagra bilder i databasen och hämta bilder från databasen och visa dem på webbsidan med PHP och MySQL. För att göra bilduppladdningsprocessen användarvänlig, använd jQuery för att ladda upp filer med förloppsindikator med Ajax och PHP.
vill du få implementeringshjälp, eller ändra eller förbättra funktionaliteten i det här skriptet? Skicka in betald serviceförfrågan
om du har några frågor om detta skript, skicka det till vår QA-community-Ställ fråga