Avatar billede preet Nybegynder
29. december 2005 - 13:34 Der er 2 kommentarer og
1 løsning

Download fil med header - problem

Jeg bennytter følgende til at downloade en pdf-fil:

$file = "passwd/test.pdf";
$length = filesize($file);
  header( "Pragma: " );
  header( "Cache-Control: " );
  header( "Content-Length: $length" );
  header( "Content-Type: application/octet-stream" );
  header( "Content-disposition: attachment; filename=$file" );
  header( "Content-Transfer-Encoding: binary" );

  readfile( $file );

I stedet for at lade mig downloade, udskriver scriptet blot indholdet af pdf-filen på skærmen - ikke pdf-filen, men koderne bag (%PDF-1.4 %âãÏÓ 130 0 obj <> endobj osv...)

Jeg har forsøgt mig med application/pdf men med samme resultat. Hvad mangler jeg at skrive eller sætte?
Avatar billede dotcom1 Nybegynder
29. december 2005 - 14:03 #1
Prøv denne - med indbygget sikkerhed:

<?php
/*******************************************************************
  * Force download script:
  * Save this script as i.e. download.php
  *
  * Tested on Mozilla, Netscape 4.78 and 6.21, Internet Explorer 5.5, lynx,
  * Konqueror and Opera. It works fully on all.
  *
  * Usage: download.php?filename=name_of_file.extension
  * or
  * <a href="download.php?data.pdf">Download data</a>.
  * You can also use paths in the filename, as in
  * <a href="download.php?../include/data.pdf">Download data</a>.
  *
  * You can specialise the code by putting a line of the form
  * $filename="data.pdf"; immediately after this comment.
  * This will allow you to send exactly one file for download, viz data.pdf.
  *******************************************************************/
  $filename = isset($_GET['filename']) ? $_GET['filename'] : "";
  $shortname = basename( $filename );

if( file_exists( $filename )          // sanity check
    && !eregi( "p?html?", $filename ) // security check
    && !eregi( "inc", $filename )
    && !eregi( "php3?", $filename ) ){
  $size = filesize( $filename );
  header("Pragma: no-cache");
  header("Expires: 0");
  header("Content-Transfer-Encoding: binary");
  header("Cache-Control: must-revalidate, post-check=0, pre-check=0\r\n");
  header("Cache-Control: no-cache, must-revalidate");
  header("Content-Type: application/save");
  header("Content-Disposition: attachment; filename=$shortname");
  $fh = readfile("$filename");
  fpassthru($fh);
   
  exit;
} else {
print "The file $shortname is not available for download";
}
?>
Avatar billede preet Nybegynder
29. december 2005 - 14:27 #2
Har netop prøvet - samme problem. Serveren vil tilsyneladende ikke håndtere mine headers ordentligt...

Prøv evt selv at se på www.aarsspillet.dk/test.php. Jeg havde sjovt nok samme problem på en anden webserver hvor jeg eksperimenterede med XML dannet af php. Her kunne jeg heller ikke få xml som output, kun ren tekst. Kan det have noget at gøre med måden hvorpå jeg uploader? Uploader via stifinder i XP.

Jeg har nok ikke mulighed for at læse svar før om nogle dage - i tilfælde af at I stiller mig uddybende spørgsmål...
Avatar billede preet Nybegynder
02. januar 2006 - 13:39 #3
Og så virker det pludselig...? Uden at have ændret i koden.
Nu håber jeg ikke det er en fejl der kommer igen. Jeg lukker spørgsmålet.
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