sql >> Database >  >> RDS >> Mysql

Upload afbeelding in MYSQL-database en toon deze met PHP met Swift

De afbeelding van de gebruiker ophalen

Zie http://php.net/manual/en/reserved.variables. bestanden.php en http://php.net/manual/en/features.file- upload.php en vrienden voor de details over het gebruik van $_FILES om de geüploade te ontvangen.

Zodra je de afbeelding in een variabele hebt, zeg je $jpg , gebruik geen functies voor het coderen/decoderen van tekst; het zal alleen dingen verminken. De verschillende benaderingen hieronder zullen aangeven wat u moet doen om te voorkomen dat u over 8-bits codes struikelt.

Er zijn drie manieren om de afbeelding te presenteren, elk is enigszins complex

Bewaren van de afbeelding in de database; afbeelding inline weergeven

Ik heb deze aanpak gebruikt voor miniaturen, maar raad het niet aan voor grote afbeeldingen.

Bewaar het in een MEDIUMBLOB gebruik in een tabel bin2hex() in PHP om de afbeelding in een string te veranderen. Gebruik dan INSERT ... VALUES (UNHEX('...')) om terug te schakelen naar binair aan de kant van de MySQL-server.

Laat de verwijzende PHP na het herladen iets zeggen als

$b64 = base64_encode($blob);
echo "<img src='data:image/jpeg;base64,$b64'/>";

Bewaren van de afbeelding in de database; PHP-script om afbeelding te genereren

Ik gebruik dit wanneer ik de "image*"-functies van PHP wil gebruiken om de afbeelding te wijzigen voordat deze wordt weergegeven. Aangezien dit meer omslachtig is dan je waarschijnlijk nodig hebt, zal ik alleen overlopen wat er moet gebeuren.

De html voor de pagina zou een ander script aanroepen, met alle argumenten die je nodig hebt:

<img src=modify.php?this=stuff&that=stuff>

Dan in modify.php , begin met

header('Content-type: image/jpeg');

En eindig hiermee (ervan uitgaande dat je een JPEG aan het bouwen bent):

imagejpeg($im);

De afbeelding opslaan in een bestand

Dit is de manier waarop de meeste grote websites het meestal doen.

Als je bestand afkomstig is van een upload, dan verplaatst zoiets het naar een beter pad zonder de jpg aan te raken.

$tmpfile = $_FILES['userfile']['tmp_name'];
move_uploaded_file($tmpfile, $uploadfile);

Meer info en voorbeelden:http://php.net/manual/ nl/function.move-uploaded-file.php

Genereer in de HTML eenvoudig zoiets als dit:

<img src=path/to/file>

Doe wat onderzoek naar waar in het pad van uw server u afbeeldingen kunt plaatsen en zorg ervoor dat de machtigingen voldoende zijn.

Opmerking:de database is niet betrokken bij het bewaren van de afbeelding, maar heeft een kolom voor het bewaren van de url "path/to/file" :

image VARCHAR(255) NOT NULL

Voor verdere discussie

  • In welke van de 3 technieken zou je dieper willen ingaan?
  • Laten we eens kijken naar de HTML die u aan het genereren bent.
  • Laten we eens kijken SHOW CREATE TABLE .


  1. hoe het resultaat van de zoekopdracht weer te geven?

  2. Verkrijg de korte dagnaam in PostgreSQL

  3. Slaapstand forceren tijdstempel om te blijven bestaan/laden als UTC

  4. PHP:mysql v mysqli v pdo