Zoals eerder gezegd, blob
is echter de juiste keuze, zoals SanHolo aangeeft, is het niet echt prestatiegericht en zul je uiteindelijk in de problemen komen omdat je database echt heel snel kan groeien!
Waarom indexeer je de bestandsnaam niet in de database en bewaar je het bestand niet op de server ?
De belangrijkste reden om zoiets niet toe te staan, zijn beveiligingsproblemen. Als je echt je basis probeert te dekken door niet alle gebruikers toe te staan inhoud te zien of te pakken, heb je twee opties.
Optie A) geef het bestand een unieke, niet-identificeerbare naam zoals Flickr dat doet. De naam van het bestand omvat twee hashes. Een gebruikershash en een bestandshash. De tweede hash is geheim en de enige manier om deze te krijgen is door vallen en opstaan. Bekijk dit bestand dat ik op Flickr heb . Is door de gebruiker beveiligd (alleen familie kan het zien), maar je hebt er prima toegang toe omdat de URL zelf als bescherming dient:http://farm2.static.flickr.com/1399/862145282_bf83f25865_b.jpg , zelfs als je willekeurig hashes zou proberen te genereren en een geldige zou vinden, zou het door anonimiteit worden verborgen, omdat je niet zou weten van wie het afkomstig was.
Optie B) gebruik een server-side thecnology om de toegang te beperken. Deze methode is veiliger maar duurder voor de server. U zult een script opzetten dat toegang tot het bestand zal toestaan/weigeren op basis van session_permissions of iets dergelijks. Kijk naar de volgende code die zou worden aangeroepen door iets te openen als:
http://yourserver.com/getprotectedfile.php?filename=213333.jpeg
session_start();
// logic to verify the user is ok
if($_SESSION['user_access']!=true) {
exit('user not allowed here');
// WATCHOUT! THIS IS NOT SECURE! EXAMPLE ONLY.
// on a production site you have to be sure that $filename will not point to a system file
$filename = $_GET['filename'];
// gets the file and outputs it to the user
header('Content-type: image/jpeg');
header('Content-Length: '.filesize($filename));
readfile($filename);