Come detto prima, blob
è la strada da percorrere, tuttavia, come sottolinea SanHolo, non è proprio dal punto di vista delle prestazioni e alla fine incontrerai problemi poiché il tuo database può crescere davvero molto velocemente!
Perché non indicizzi il nome del file sul database e memorizzi il file sul server ?
Il motivo principale per non consentire qualcosa del genere sarebbero problemi di sicurezza. Se stai davvero cercando di coprire le tue basi non consentendo a tutti gli utenti di vedere o acquisire contenuti, hai due opzioni.
Opzione A) dai al file un nome univoco e non identificabile come fa Flickr. Il nome del file comprende due hash. Un hash utente e un hash di file. Il secondo hash è segreto e l'unico modo per ottenerlo sarebbe per tentativi ed errori. Dai un'occhiata a questo file che ho su Flickr . È protetto dall'utente (solo la famiglia può vederlo) ma sarai in grado di accedervi bene poiché l'URL stesso funge da protezione:http://farm2.static.flickr.com/1399/862145282_bf83f25865_b.jpg , anche se stavi cercando di generare hash in modo casuale e ne trovassi uno valido, verrebbe nascosto dall'anonimato poiché non sapresti da chi proveniva.
Opzione B) utilizzare una tecnologia lato server per limitare l'accesso. Questo metodo è più sicuro ma più costoso per il server. Imposterai uno script che consentirà/nega l'accesso al file in base a session_permissions o qualcosa di simile. Guarda il codice seguente che verrebbe chiamato accedendo a qualcosa come:
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);