PHP: Jak donutit prohlížeč, aby uložil stránku

Pokud generujeme soubor a chceme, aby v prohlížeči nedošlo po kliknutí na odkazu k jeho otevření, ale uložení, je třeba poslat správné HTTP hlavičky. Bohužel, různé verze Internet Exploreru obsahují různé chyby, takže je třeba zvolit správnou kombinaci hlaviček. Další možný problém je, pokud se soubor nachází na zabezpečeném spojení HTTPS, případně pokud používáme sessions v PHP.

Pro rozumný prohlížeč (např. Mozilla) stačí v PHP poslat následující hlavičky:

header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="nazev_souboru.txt"');
header('Content-Transfer-Encoding: binary');

a poté data, která chceme uložit.

Internet Explorer ale soubor buď otevře (místo uložení) nebo zobrazí chybu, že soubor nelze zapsat do mezipaměti nebo že nebyl nalezen (chyba záleží na verzi Internet Exploreru nebo případném service packu). Proto je potřeba přidat následující hlavičky, abychom přinutili i tento prohlížeč k tomu, co po něm chceme:

header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="nazev_souboru.txt"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');

následováno daty, které chceme uložit. Poslání těchto tří hlaviček navíc nemá vliv na funkčnost jiných prohlížečů.


Zpět na hlavní stránku