Avatar billede encorez Nybegynder
14. september 2010 - 20:10 Der er 7 kommentarer og
1 løsning

Vis billede fra DB

Hej

Jeg vil gerne at folk kan uploade et billede til min hjemmeside. For at holde styr på billederne og gemme dem tænker jeg at jeg enten kan gemme billederne i my MySQL DB eller jeg kan gemme dem på filserveren og så i en database holde styr på billederne, med navn, sti, filnavn, osv.

Vil I foreslå den sidste løsning? Gemme billede på filserver og holder styr på sti og filnavn i DB?

En anden ting er at lige nu når jeg skal læse billeder ud af DB, så gør jeg sådan <img scr="hent_fil.php=id=55">. Så kan I nok regne I hvad jeg gør.
Jeg vil gerne have et rigtigt filnavn til at stå der istedet for hent_fil.php, kan bare ikke gennemskue konsekvenserne.
Det skal sættes op på en måde så man ikke bare kan indtaste et filnavn og så andre billeder.

Jeg kunne også bare gemme billederne på filserver som en random-20-strengs-navn og så udlæse den. Lidt som jeg tror facebook gør. Jeg prøvede at downloade et billeder og filnavnet ser sådan ud "29406_556571944_6411_q.jpg".

Det er lidt kompliceret at beskrive hvad jeg ønsker, men håber I kan gennemskue det ud fra dette.

Mvh. Simon
Avatar billede arne_v Ekspert
14. september 2010 - 20:29 #1
Hvis det er din egen server (og billederne ikke er enormt store), saa ville jeg putte billederne i databasen. Langt nemmere at administrere. Og performance problemet er en ammestue historie.

Men er det et web hotel, saa check pladsen. Hvis du har 1 GB fil plads og 5 MB database plads, saa var det nok en god ide med filer paa disk.

hent_fil.php boer checke om brugere er logget ind og har adgang til det paagaeldende billede - det vil loese 90% af problemerne.

Det kan du saa supplere med et navn som er svaert at gaette.
Avatar billede encorez Nybegynder
14. september 2010 - 20:44 #2
Det er rigtigt. Jeg tænker bare at hvis folk vil downloade billedet så vil alle billeder hedde "hent_fil.php.jpg".

Er der nogen måde hvorpå man i hent_fil.php kan sige at filnavnet skal være noget andet når man downloader det?

Min kode i hent_fil.php ser således ud
$q = mysql-query(bla bla);
extract(mysql_fetch_array($q));
header("Content-type: $file_type");
echo $file_code;

Måske kan man sætte en header på der angiver et filnavn???

Enig i at der skal være et check i filen på at vedkommende har lov til at se det.
Avatar billede arne_v Ekspert
14. september 2010 - 20:55 #3
header('Content-Disposition: attachment; filename="' . fnm . '"');

burde fixe det
Avatar billede encorez Nybegynder
14. september 2010 - 21:00 #4
Ok, det må jeg afprøve senere. Håber det virker.

Men vi enig om at uden for meget DB-plads, så er måden at gemme det på filserver, og bruge databasen til at holde styr på hvem må få vist hvad ikke sandt?
Avatar billede arne_v Ekspert
14. september 2010 - 21:15 #5
Ja.
Avatar billede coderdk Praktikant
14. september 2010 - 23:41 #6
Eller rewrite dig ud af det. I din .htaccess:

RewriteEngine On
RewriteBase /
RewriteRule /hentfil/(.+)$ /hent_fil.php?filnavn=$1

Den kaldes så f.eks. med <img src="/hentfil/dit_billede.jpg">
hent_fil.php skal checke at filen eksisterer, brugeren har rettigheder samt at sende korrekt MIME-header.
Avatar billede encorez Nybegynder
16. september 2010 - 21:59 #7
Headeren til filnavnet ser ud til at virke perfekt. Så er det for mig lidt ligegyldigt hvad der står i koden.

coderdk, det lyder egentlig også meget smart. I koden ville det se lidt pænere ud, men når man med headeren kan udskrive et rigtigt filnavn, så tror jeg det er nok for mig.

Arne_v, læg gerne et svar som tak for hjælpen
Avatar billede arne_v Ekspert
16. september 2010 - 22:22 #8
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester