Newsgroup: it.comp.www.php
Titolo: Immagini esterne al db

Ciao a tutti,
ho la necessità di fare una select all'interno di un database mysql per 
estrarre un record e contemporaneamente anche una sua immagine correlata.
Esempio:
 
SELECT * FROM utenti where nome="ciccio";
 
come faccio a selezionare la sua foto all'interno di una directory sul 
webserver?
 
Grazie in anticipo per il vostro supporto

webserver?
 
Be', bisognerà che qualche informazione sulla foto sia archiviata nella
tabella utenti.
 
Lo puoi fare esplicitamente, con un campo "foto" contenente il nome del
file JPEG.
 
Oppure implicitamente: dài al file JPEG di ciccio il nome della primary
key del record di ciccio.
 
O puoi usare una tabella collegata, se ciccio ha più di una foto.
 
Altrimenti, spiega cosa intendi per "immagine correlata".
 
Leonardo
-- 
 
A terrible beauty is born.
                                     - W. B. Yeats, Easter 1916

 ltrimenti, spiega cosa intendi per "immagine correlata".
 
L'immagine deve fare riferimento al contatto cercato, credo che 
inserendola nel db lo "appesantirebbe" troppo.
Hai qualche link da suggerirmi ?


Di solito nel db si inserisce il riferimento al filesystem
 
ad esempio
select id, nome, riferimento_photo from utenti where nome = 'ciccio';
 
riferimento_photo può essere un nome univoco all'interno del filesystem 
oppure un path+file
 
io di solito metto un riferimento ad un nome univoco
 
 
uuid_nome_file
esempio
dgs567554ghdgf_ferie_natale.xls *1*
 
e il path in un file xml di configurazione *2*
 
NB
*1* l'uuid mi serve per non rischiare di sovrascrivere se dovessi 
salvare su disco un file con lo stesso nome (ferie_natale.xls).
 
*2*
utilizzo questo metodo in modo che cambiando disco o spostando i file su 
altro path, devo solo cambiare il puntamento sul file XML di 
configurazione, oppure averne più di uno
 
 
poi successivamente vado a prendere il file
 
// prendo il path da un file di configurazione
$this->path_allegato = $config['media']['allegati_contatto'];
 
// prendo il riferimento al file dal DB
$dati_allegato = 
$this->AllegatoModel->GetAllegatoById($this->attributes['id_allegato']);
 
** (la tua select * from utenti where nome = 'ciccio')
 
// controllo se il file esiste su filesystem
if (file_exists($this->path_allegato .$dati_allegato['file_allegato'])) {
// faccio quel che mi serve come ad esempio il download
$body = new Stream($this->path_allegato . $dati_allegato['file_allegato']);
 
 
return $this->response->withHeader('Content-Type', 
'application/octet-stream')
                     ->withHeader('Content-Disposition', 'attachment; 
filename=' . $dati_allegato['nome_file'])
                     ->withHeader('Content-Transfer-Encoding', 'Binary')
                     ->withHeader('Content-Description', 'File Transfer')
                     ->withHeader('Pragma', 'public')
                     ->withHeader('Expires', '0')
                     ->withHeader('Cache-Control', 'must-revalidate')
                     ->withBody($body)
                     ->withHeader('Content-Length', "{$body->getSize()}");
 
}
else
{
// non esiste il file su filesystem
faccio altro
}
 
 
 
Ciao


La mia preferenza va a 
http://tuosito.it/immagini/hash_id_database.jpg
 
 
Ovvero quale che sia la chiave primaria dell'utente, l'immagine la salvi come
/immagini/$filename, e $filename è
 
	$filename = sha1($secret . $tuple['PrimaryKeyField']) . '.jpg';
 
Comunque no, a meno di salvare interi background 1920x1080 un po' di dati nel
formato JPEG in un DB ce li fai stare facile, ed è più comodo per i backup.
