Files ed immagini in MySQL

Spesso si ha la necessità di realizzare un sito che permetta all'utente di scaricare dei files. Altre volte invece bisogna realizzare delle gallerie di immagini. Nulla di particolarmente complicato, basta preparare delle pagine con dei classici links ai files in questione che avremo salvato sul server, magari in una apposita cartella, ed il gioco è fatto. E se volessimo rendere queste risorse accessibili solo a determinati utenti? In questo articolo vedremo come poter risolvere questo problema attraverso la memorizzazione dei files all'interno di MySQL.

Se infatti i files sono conservati nel database, sarà l'applicazione PHP a verificare se l'utente ha i diritti necessari per accedervi e l'utente non potrà bypassare in alcun modo questi controlli poiché sarà il PHP a fornirgli i files che richiede. Le possibilità sono innumerevoli, dalla creazione di complessi sistemi di distribuzione file alla realizzazione di tecniche anti-leach che eviteranno la creazione di links diretti di altri siti alle vostre risorse.

Per illustrare le linee guida da seguire nella creazione di un sistema di memorizzazione e recupero di files da MySQL realizzeremo tre semplici script. Il primo avrà il compito di prelevare un file inviato da un utente e di inserirlo in MySQL. Il secondo script genererà un elenco dei files presenti all'interno del database. Cliccando su uno di questi link verrà lanciato il terzo script, che si occuperà dell'estrazione del file selezionato e del suo invio al browser.

Per ragioni didattiche gli script proposti contengono le sole istruzione necessarie al raggiungimento nei vari scopi. Non possono essere quindi considerati pronti per l'utilizzo in un sito web di produzione, ma costituiscono sicuramente un buon punto di partenza per coloro che vorranno implementare tali tecniche.

 

Pagine: 12 3 4 5 6

18 commenti

1 paolo paolo mercoledý 28 luglio 2010, ore 00:38
Complimenti per lo script!
L' unica cosa che mi da errore nella riga 15 nella pagina mostra.php

header('Content-Type: '.$tmp['tipo_file']);

Carico dei jpg e quando vado a cliccare sul link per visualizzare l' immagine mi escono tutti dei simboli strani , segno che non ha codificato l' immagine jpg. come posso fare per risolvere il problema? grazie
2 andrea andrea martedý 21 settembre 2010, ore 09:37
io ho lo stesso problema... hai risolto? se si come?
grazie mille

Andrea
3 Gianni Tomasicchio Gianni Tomasicchio martedý 21 settembre 2010, ore 10:09
Verificate l'inserimento accidentale di spazi o "a capo" in testa o in coda agli script.
4 massimiliano massimiliano giovedý 28 ottobre 2010, ore 09:18
diciamo semplicemente che dopo averlo modificato coni parametri di connesisone miei personali 1no inserisce alcun file nel data base e 2 i file come gia detto da altri utenti non vieve visualizzato con immagini ma simboli ^_^.
5 Fabio Fabio venerdý 11 febbraio 2011, ore 19:58
Stesso problema.
C'è una soluzione?
Grazie
6 Gianni Tomasicchio Gianni Tomasicchio venerdý 11 febbraio 2011, ore 20:23
Per qualsiasi problema riscontrato con gli script dell'articolo potete scrivere nel nostro forum.
7 davide davide giovedý 24 marzo 2011, ore 00:00
Ciao ho fatto esattamente quello che hai detto ma non mi salva il file sicuramente per il blob..può essere qualche impostazione?
8 Gianni Tomasicchio Gianni Tomasicchio giovedý 24 marzo 2011, ore 08:53
Ricevi qualche messaggio di errore?
9 alykiss alykiss mercoledý 13 aprile 2011, ore 17:42
ciao

due richieste in un giorno forse sono troppe:-)

veniamo a questo codice, intanto lo uso con wordpress, quindi ho dovuto cambiare qualcosa, ovviamente sono andato per intuito visto che di php non capisco un'H, ho eliminato queste due righe
// connessione e selezione del database
mysql_connect('localhost', 'utente_db', 'password_db')
or die('Connessione non riuscita: ' . mysql_error());

if(!mysql_select_db('nome_database'))
die('Selezione database fallita!');

connessione al database la fa wordpress
ho creato il db
ho inserito un'immagine .bmp
quando la richiamo però mi da questo errore:
Query non valida: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1.

nella linea 1 non c'è niente, quindi non capisco

aspetto notizie con impazienza grazie :-)
10 seingh seingh giovedý 21 aprile 2011, ore 11:37
Gli header vanno in cima al codice, perciò l'errore può essere quello.
11 lollo89 lollo89 sabato 7 maggio 2011, ore 16:38
Salve, invece di far stampare l'immagine in una pagina unica, e possibile far stampare l'immagine da una tag IMG.
Grazie
12 Gianni Tomasicchio Gianni Tomasicchio domenica 8 maggio 2011, ore 08:16
Si, basta impostare l'url del tag img in modo che punti allo script mostra.php:

<img src="mostra.php?id=123" />
13 tia96 tia96 martedý 19 luglio 2011, ore 10:14
Le immagini non mele visualizza complete, ma solo a metà, come risolvo?
14 foska28mm lunedý 16 luglio 2012, ore 12:35
Buongiorno vorrei un chiarimento cortesemente.

nel mio database è presente una tabella di nome "file" ed all'interno un campo di nome "indirizzo" che riferisce al percorso dov'è posizionato il file nel server.

Io per accedere a questi file devo inserire i file all'interno del database creato con mysql o posizionandoli in cartelle riesco comunque ad accedervi ed ottenerli tramite query? In poche parole non capisco se devo creare uno spazio apposito per loro nel database o se mi basta far puntare il database alla loro posizione, in qualche cartella del pc, per prelevarli e gestirli.
I file trattano prevalentemente immagini, o audio o documenti.

Grazie e buona giornata
15 Gianni Tomasicchio martedý 17 luglio 2012, ore 09:19
Se nel DB è presente il percorso del file sul server allora significa che il file non è fisicamente nel DB. La tabella si limita a referenziarlo attraverso il suo percorso. In questo articolo invece si spiega come memorizzare l'intero file nel database. Le due soluzioni sono alternative, o il file è sul server (sul filesystem del server) o è nel database. Nel tuo caso è stata adottata la prima soluzione.
16 foska28mm martedý 17 luglio 2012, ore 09:29
Volevo porti un quesito che mi attanaglia e che non vengo a soluzione e riguarda la sessione.

Se mi concedi questo spazio te lo spiego, se magari invado troppo posso farlo magari per mail.
Nel caso non vuoi saperne, resto zitto :)
17 Gianni Tomasicchio martedý 17 luglio 2012, ore 11:29
C'è la sezione "domande" per questo...
18 naruto1234 martedý 4 dicembre 2012, ore 09:46
Salve a tutti, mi funziona tutto tranne alla fine quando clicco sul link dell'immagine mi da l'errore 404 oggetto non trovato eccovi il report:

Oggetto non trovato!

L'URL richiesto non esiste su questo server. Il link della pagina da cui sei arrivato potrebbe essere errato o non essere più valido. Per favore, informa dell'errore l'autore della pagina.

Se pensi che questo sia un errore del server, per favore contatta il webmaster.

Error 404

127.0.0.1
12/04/12 09:45:41
Apache/2.2.13 (Win32) PHP/5.3.0
Effettua l'accesso o registrati per inserire un commento