Autor Zpráva
cosimo
Profil
Dobrý den,
hledal jsem univerzální script na vynucené stahování pdf, obrázků apod.
Ve Firefoxu, Opeře, Chrome i Safari pěkně funguje kód z tohoto zdroje:
http://krouzek.slavkuv.net/index.php?obdobi=2009-10&prispevek=02

Jenže IE (10) mi nabízí stažení souboru download.php namísto cílového pokusny.pdf, nevíte, kde je chyba?

Tedy ideálem je v html kódu volat php s parametrem souboru:
<a href="download.php?co=pokusny.pdf">pokusny.pdf</a>
(Soubor pokusny.pdf je uložen ve složce "soubory" dle návodu.)

Vlastní kód je tady:
<?php
  if ( isset($_GET["co"]) )
   {
    $cesta  = "soubory/";
    $soubor = htmlspecialchars($_GET["co"], ENT_QUOTES);
    $soubor = stripslashes($soubor);       // odstraní \
    $soubor = str_replace("/","",$soubor); // odstraní /
    $max = (int) ini_get("post_max_size");
    if ( file_exists("$cesta$soubor") )
     {
      if ( filesize("$cesta$soubor") >= $max*1024*1024 )
       header ("Location: $cesta$soubor");
        else
         {
          header ("Content-Description: File Transfer");
          header ("Content-Type: 
                   application/force-download");
          header ("Content-Disposition: attachment; 
                   filename=$soubor");
          header ("Expires: 0");
          header ("Cache-Control: must-revalidate,
                   post-check=0, pre-check=0");
          header ("Pragma: public");
          header ('Content-Length: '.filesize
                   ("$cesta$soubor"));
          readfile($cesta.$soubor);
         }
     }
      else
       echo "Soubor nenalezen";
   }
    else 
     echo "Voláno bez parametru";
?>

(Případně nebyl by odzkoušený jiný bezpečný kód pro všechny prohlížeče? Zkusil jsem kde co, a tenhle byl nejslibnější.)
Enko
Profil
Toto mi valí všude. Tak si to zakomponuj do toho tvého a dej vědět.

 $file = "soubor.pdf";
 header('Content-Description: File Transfer');
 header('Content-Type: application/octet-stream');
 header('Content-Disposition: attachment; filename='.basename($file));
 header('Content-Transfer-Encoding: binary');
 header('Expires: 0');
 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
 header('Pragma: public');
 header('Content-Length: ' . filesize($file));
 readfile($file);
exit;
cosimo
Profil
Enko:
Díky za tip, ale tam máš soubor zadaný natvrdo.
Mě šlo o jeden univerzální php script, kam budu posílat rozličné stahované soubor přes parametr. Nicméně jsem prozatím použil a odzkoušel řešení, které mi vyhovuje:
http://stackoverflow.com/questions/3814856/pdf-files-opening-up-in-browser/3815022#3815022

Avšak script, na který se ptám původně by se mi líbil víc, stran univerzálnosti a bezpečnosti, jen kdyby fungoval i v IE...
Enko
Profil
No však jo, jen si změň svůj řádek 15 až 25 za moje 2 až 9. Zkoušel jsi? Toto mám vyzkoušené na vynucení stahování souboru snad ve všech v dnešní době používaných prohlížečích.
cosimo
Profil
Enko:
Zkoušel, změna hederů nepomohla, IE10 pořád vybízí ke stažení souboru download.php, problém bude jinde...
Tori
Profil
cosimo:
Název souboru, který stahujete, obsahuje jen znaky bez diakritiky? Anebo i mezery, ěščřžýáíé apod.?
cosimo
Profil
Tori:
jednoslovný název malými písmeny bez diakritiky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: