Autor Zpráva
tonda13
Profil
Zdravim všechny,
potřeboval bych poradit nebo nasměrovat co konkrétně hledat.

Potřeboval bych při volání PDF souboru (nebo jiného souboru co se normálně otevírá v prohlížeči) takový script, který by takový soubor stáhl a nikoli zobrazil v prohlížeči.

Doufám že je to pochopitelné a děkuji za vaše rady.
wolfik
Profil
Dělá se to například pomocí sad hlaviček.
$soubor = $_GET['nazev'];
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Length: ".filesize($soubor));
header('Content-Disposition: attachment; filename=' . basename($soubor));
readfile($soubor); 


Je nutné ošetřit, aby nešly stáhnout všechny soubory (například konfigurační).
tonda13
Profil
wolfik:
Díky toto funguje.
Akorát když to stáhnu, konkrétně PDF soubor, tak při otevírání v Acrobat Readeru to vypíše hlášku, že jej nemůže otevřít kvůli špatnému dekódování...
wolfik
Profil
tonda13:
Nemyslím si, že by to byla chyba skriptu. Je to originální PDF funkční? Stáhl se ten soubor celý?
tonda13
Profil
wolfik:
Pravda, soubor se nestáhl celý, ale proč?

Celý script je takto:
$soubor = $_GET['co'];
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header('Content-Length: '.filesize($soubor));
header('Content-Disposition: attachment; filename=' . basename($soubor));
readfile('data/' . $soubor);

Název souboru včetně připony pak zadávam v parametru 'co'. Při přímém zadání souboru se normálně v pořádku otevře uvnitř prohlížeče.
Keeehi
Profil
problém je zde:
header('Content-Length: '.filesize($soubor));
v proměnné $soubor je např. soubor.pdf, jenže ten soubor je ve skutečnosti umístěn data/soubor.pdf, takže je funkci filesize předaná špatná cesta.

srávně:
header('Content-Length: '.filesize('data/'.$soubor));
tonda13
Profil
Jo no jo, děkuji funguje to :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.