Avatar billede majbom Novice
05. oktober 2005 - 14:11 Der er 5 kommentarer og
1 løsning

download af fil i stedet for visning

hey, har en simpel sektion på min side, hvor der er listen nogle filer, der er både .pdf, .doc, .jpg og mange andre.
problemet er at f.eks. når jeg klikker på en pdf-fil, viser den filen i browseren, i stedet for at downloade den. det jeg prøver at sige er: at uanset hvilken fil man trykker på, skal den spørge om man vil downloade den...

hoprdan gøres dette?

på forhånd tak
Avatar billede dotcom1 Nybegynder
05. oktober 2005 - 14:20 #1
Prøv dette:

<?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
  *
  * Examples:
  * <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.
  *
  * Only one variable, $filename, is not defined by default. In
  * principle, you can send a the name of the file to download
  * through a POST request (e.g. on a form button). Untested.
  *
  * Restrictions: by default you can't download files with the
  * extensions html, phtml, htm, phtm, inc, php or php3. This is to
  * avoid potential security problems. For example, it is possible
  * to use a PHP file to hide sensitive data such as the password
  * to connect to an SQL server. If we allowed this script to offer
  * php scripts for download, then a client request of the form
  * http://../download.php?sensitive.php could show the raw php file.
  *
  * Security issues: see the comments under Restrictions above. If
  * in doubt, define $filename immediately after this comment and
  * use a separate script for each downloadable file. I've tried
  * using header( "Location: ... " ) to retrieve the file. It doesn't
  * work on a solaris server, but does work on gnu/linux.
  *******************************************************************/
  $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 majbom Novice
06. oktober 2005 - 07:25 #2
takker, det vil jeg prøve det der...
Avatar billede majbom Novice
07. oktober 2005 - 10:22 #3
hmm, det lader ikke til at virke...

er det noget du har erfaring med?

pft
Avatar billede majbom Novice
07. oktober 2005 - 10:29 #4
der kommer en popup-boks med at Internet Explorer kan ikke indlæse download.php?filename=aa.jpg fra www.splazz.dk
Avatar billede majbom Novice
07. oktober 2005 - 10:32 #5
nå, det virker alligevel... mange tak for scriptet..

smid et svar, så får du lige den 50'er :)

go weekend
Avatar billede dotcom1 Nybegynder
07. oktober 2005 - 11:46 #6
Undskyld, jeg først svarer nu. Min internetforbindelse har været nede... Men du kan evt. ændre headersne til dette:

  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("Content-Type: application/octet-stream");
  header("Content-Type: application/save");
  header("Content-Disposition: attachment; filename=$shortname");
  set_time_limit(0);
  $fh = readfile("$filename");
  fpassthru($fh);

- så får du ikke timeout ved store filer.
Tak i lige måde. :)
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







Læses lige nu