Avatar billede elskermad.dk Nybegynder
18. december 2005 - 14:38 Der er 9 kommentarer og
1 løsning

lave en fil gemt i mysql til en fysisk fil igen

Hej Eksperter!

Jeg har gemt en oploadet fil i mysql i et felt af typen mediumblob - altså binary - hvordan er det jeg får den gemt som en fysisk fil på mit webhotel når den ligger der?

På forhånd tak :)
Avatar billede hmortensen Nybegynder
18. december 2005 - 15:50 #1
Her er en guide til både indsættelse og udtræk:
http://www.phpbuilder.com/columns/florian19991014.php3
Avatar billede ajenbo Nybegynder
18. december 2005 - 17:59 #2
Det er en dårlig ide at gemme filer i db, det er tungt og ofte upraktisk, brug http://dk2.php.net/fwrite til at få filerne ud fra din db, gem istedet filstien i din db, eller give filen rækkens nummer til navn.
Avatar billede elskermad.dk Nybegynder
18. december 2005 - 18:02 #3
det er for at kunne sikre mig at man ikke kan hente filen uden login - kan ikke lige komme på en anden måde hvor man ikke bare kan indtaste adressen! (og jeg ønsker ikke htaccess-password)
Kigger på linket hmortensen
Avatar billede ajenbo Nybegynder
18. december 2005 - 19:54 #4
Læg filerne et nivo over din webroot (ofte kallet www), hvor for vil du ikke bruge htaccess-password?
Avatar billede elskermad.dk Nybegynder
18. december 2005 - 23:06 #5
så er det jo ikke muligt at hente filerne via et direkte link som man skal kunne når man er logget ind - fordi jeg vil have at brugeren skal kunne "nå" alle sektioner med sit ene php-login...
Avatar billede ajenbo Nybegynder
19. december 2005 - 00:37 #6
Det er lige netop hvor du får brug for php, skriver lige en kode til dig...

<?php
$dir = "../hemmelig_filer/";
if_set($_get[fil]);
set_time_limit(0);
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($dir.$fil)).' GMT');
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=$fil");
header("Content-Length ".filesize($dir.$fil));
$handle = fopen($dir.$fil, "rb");
while(!feof($handle)) {
  $buffer = fread($handle, 8192);
  echo $buffer;
}
fclose($handle);
?>

Gem den kode som dl.php i din web_root og oprat mappen "hemmelig_filer" i mappen over din web_root.
Liket til dine filer vil så være dl.php?fil=min.zip

Husk at check om brugeren er logget ind i dl.php.
Avatar billede hmortensen Nybegynder
19. december 2005 - 09:11 #7
ajenbo, der er intet galt for at gemme filer direkte i databasen.
Avatar billede ajenbo Nybegynder
19. december 2005 - 11:05 #8
Det har nu en tendens til at databasen bliver langtsomer jo flere filer du fylder I den, forbindelsen til din db vil også være optaget i meget længere tid. Hvis din database dør, hvis du skifter system eller hvis du ikke længer har adgang til din db, er det en støre changse for at du ikke den mister dine filer, der er en hel del fil funktioner du ikke kan udføre på en fil der er i en database, det kræver mere af din server at sende filerne og du vil ofte ikke kunde have mere ind 8MB filer på grund af hukommelses brgrænsinget i php. mage server har også en laver granse for hvor stor din db må være, ind hvor stor dit hotel er.

Det er måske ikke en katastrofe at filerne er i en db men jeg vil fraråde dig det.
Avatar billede elskermad.dk Nybegynder
23. december 2005 - 12:25 #9
smid et svar ajenbo
Avatar billede ajenbo Nybegynder
23. december 2005 - 12:54 #10
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