Avatar billede jonasst Nybegynder
19. maj 2004 - 14:30 Der er 10 kommentarer og
1 løsning

Tving browseren til at downloade et billede

Hej Eksperter
Jeg har følgende kode til at vise en række billeder i en mappe

<?php
$dh = opendir ("/customers/vildskud.com/vildskud.com/httpd.www/pics/scene1/");
while ($file = readdir ($dh)) {
if ($file != '.' && $file != '..' && substr($file,strrpos($file,'.')) == '.JPG') {
echo("<img src='../pics/scene1/$file'>\n");
    }
}
closedir ($dh);
?>

Nu vil jeg så gerne lave et link så man kan downloade billederne men hvordan får jeg IE og andre browsere til at downloade et billede i stedet for at vise det.
Avatar billede sukos Juniormester
19. maj 2004 - 14:44 #1
<?php
$dh = opendir ("/customers/vildskud.com/vildskud.com/httpd.www/pics/scene1/");
while ($file = readdir ($dh)) {
if ($file != '.' && $file != '..' && substr($file,strrpos($file,'.')) == '.JPG') {
echo("<a href='download.php?fil=$file'>$file</a><br>\n");
    }
}
closedir ($dh);
?>


download.php:

<?php
if(isset($_GET["fil"])){


$path = "/customers/vildskud.com/vildskud.com/httpd.www/pics/scene1/";

header("Content-Disposition: attachment; filename=". $_GET["fil"] ."");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($path.$_GET["fil"]));
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");

$fp = fopen($path.$_GET["fil"],"r");
print fread( $fp, filesize($path.$_GET["fil"]) );
fclose($fp);
exit();
}
?>
Avatar billede jonasst Nybegynder
19. maj 2004 - 15:56 #2
Tak for det - ser spændende ud. Jeg har to spørgsmål
Er det muligt at få nogen kommentare til alle header linierne.

Skal man ikke sætte Content-Type: application/x-download if strrpos($HTTP_USER_AGENT,"MSIE")
Avatar billede coderdk Praktikant
20. maj 2004 - 01:17 #3
header("Content-Disposition: attachment; filename=". $_GET["fil"] ."");
Siger at det er en download med et specifikt filnavn.

  header("Content-Type: application/octet-stream");
Fortæller at det er en "rå" strøm af data (og derfor skal den downloade).

  header("Content-Length: ".filesize($path.$_GET["fil"]));
Størrelsen på downloaden

  header("Cache-Control: no-cache, must-revalidate");
  header("Pragma: no-cache");
  header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
Alle disse sikrer at dette ikke caches af browseren.

application/octet-stream skulle virke til MSIE, hvis det ikke gør, så ved jeg at application/x-ms-download gør ;)
Avatar billede jonasst Nybegynder
20. maj 2004 - 08:03 #4
Ok tak fo de kommentare jeg prøver lige og ser om det virker:)
Avatar billede jonasst Nybegynder
20. maj 2004 - 13:51 #5
Jeg får nu følgende fejl
Warning: Cannot modify header information - headers already sent by (output started at /customers/vildskud.com/vildskud.com/httpd.www/php/download.php:9) in /customers/vildskud.com/vildskud.com/httpd.www/php/download.php on line 15

Warning: Cannot modify header information - headers already sent by (output started at /customers/vildskud.com/vildskud.com/httpd.www/php/download.php:9) in /customers/vildskud.com/vildskud.com/httpd.www/php/download.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at /customers/vildskud.com/vildskud.com/httpd.www/php/download.php:9) in /customers/vildskud.com/vildskud.com/httpd.www/php/download.php on line 17

Warning: Cannot modify header information - headers already sent by (output started at /customers/vildskud.com/vildskud.com/httpd.www/php/download.php:9) in /customers/vildskud.com/vildskud.com/httpd.www/php/download.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at /customers/vildskud.com/vildskud.com/httpd.www/php/download.php:9) in /customers/vildskud.com/vildskud.com/httpd.www/php/download.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at /customers/vildskud.com/vildskud.com/httpd.www/php/download.php:9) in /customers/vildskud.com/vildskud.com/httpd.www/php/download.php on line 20
Avatar billede coderdk Praktikant
20. maj 2004 - 13:57 #6
Der bliver skrevet noget ud på siden (måske en fejlmeddelelse) før du sender headerne...
Avatar billede jonasst Nybegynder
21. maj 2004 - 19:57 #7
Øh hvad skulle det være første fejlmeddelelse er jo netop at headeren allerede er sent??
Avatar billede sukos Juniormester
23. maj 2004 - 18:36 #8
Som betyder at der er output inden du sætter header
Sørg for der IKKE er nogen mellemrum eller andet, før du bruger <?php
Hvis du bruger f.eks. Golive til at skrive filen, så prøv med notepad eller lign. teksteditor :O)
Avatar billede jonasst Nybegynder
31. maj 2004 - 11:41 #9
Fedt nu virkede det :) Jeg fjernede de to <head> + <html> tag og så var den i vinkel. Undskyd jeg først er vendt tilbage nu men har haft drøn travlt med andre ting.
Håber i stadig abonnere på spørgmålet og gider smide et svar :)
Avatar billede sukos Juniormester
06. juni 2004 - 09:26 #10
Jow da! :O)
Avatar billede jonasst Nybegynder
07. juni 2004 - 07:33 #11
Fedt :)
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