Autor | Zpráva | ||
---|---|---|---|
leonek Profil |
#1 · Zasláno: 24. 2. 2012, 16:00:38
Dobrý den.
Každý tady řeší otázku "Nechci aby se mi zobrazilo okno Otevřít/Uložit". Já mám opačný problém. Mám soubor.pdf a nechci aby se návštěvníkovy otevřel v prohlížeči, ale aby šel pouze stáhnout. Nejlépe i bez možnosti "Otevřít", ale pouze "Uložit". HTML, PHP, JS Děkuji |
||
Honza.P Profil |
#2 · Zasláno: 24. 2. 2012, 16:13:50
Každý si ten soubor .pdf může otevřít když bude chtít, jediné možné řešení je ten soubor .pdf zabalit do .ZIPu, tím nepůjde otevřít a návštěvník si jej bude muset stáhnout.
|
||
Louka Profil |
#3 · Zasláno: 24. 2. 2012, 16:24:56 · Upravil/a: Louka
Pomocí hlavičky jde vynutit ten dialog:
soubor.php <?php header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename="downloaded.pdf"'); readfile('original.pdf'); ?> A pak asi musíš odkázat <a href="soubor.php">Stáhnout</a> Doplním - "downloaded.pdf" je jméno souboru, co se zobrazí v tom dialogu, "original.pdf" je adresa souboru, který se stahuje. Snad mě někdo opraví, ale mám pocit že po dobu stahování bude zabrané vlákno PHP procesu, takže pokud server podporuje nějaký maximální počet paralelních vláken, tímto se jedno "odstřihne" (takže podporuje-li server max 10 vláken, tak pokud bude stahovat najednou 10 lidí, nikdo se na web nedostane, dokud aspoň jedno stahování neskončí). |
||
weroro Profil |
Nie je to najšťastnejšie riešenie ale pre ako takú bezpečnosť si daj tie PDF do priečinka share
<?php $subor = "share/". basename($_GET['file']); if(! file_exists($subor)) die("Subor <b>".basename($_GET['file'])."</b> neexistuje "); header("Content-Description: File Transfer"); header("Content-Type: application/force-download"); header("Content-Disposition: attachment; filename=\"$subor\""); readfile ($subor); ?> PDFko potom stiahneš tak, že to zapíšeš ako: subor.php?file=subor.pdf |
||
leonek Profil |
Honza.P:
„zabalit do .ZIPu, tím nepůjde otevřít a návštěvník si jej bude muset stáhnout“ Nechci obtěžovat uživatele rozbalováním zipu weroro: Jde mi jen o jeden konkrétní soubor v kořenovém adresáři. (statické stránky) doplněk: ale děkuji za tip, napdlo mě použit váš kód s tím že budu odkazovat na stejnou stranku _POSTem |
||
Keeehi Profil |
#6 · Zasláno: 24. 2. 2012, 18:10:51
Louka:
Nevím, jak je to udělané a na simulaci zatím nemám čas, ale zdá se mi, že to takto nefunguje. Můj názor je takový, že funkce readfile vezme data z disku a přepošle je na standardní výstup a tím končí. Tato operace by měla být podle mého názoru poměrně rychlá. A pak už skončí script a následně i jeho vlákno. To že pak data k člověku cestují pomalu a tudíž nějaký soubor stahuje třeba hodinu, to už je podle mě věc jiná. |
||
Louka Profil |
#7 · Zasláno: 24. 2. 2012, 18:47:49
Keeehi:
Vím, že takovýmto "problémem" (i když spíše je to "feature" ;-)...) trpí funkce file_get_contents() a file_put_contents(), u readfile právě jistotu nemám. |
||
leonek Profil |
Použil jsem poupravené werorovo řešení. Bohužel jsem narazil na druhý problém, kterým je tlačítko button v IE. Odesílá mi totiž ne hodnotu value ale samotný text uvnitř tagu.
<form action="kontakt.php" method="post"> <button type="submit" name="soubor" value="nazev.pdf">Stáhnout soubor</button> </form> v IE přijde: $_POST['soubor'] = Stáhnout soubor |
||
Chamurappi Profil |
#9 · Zasláno: 24. 2. 2012, 20:36:46
Reaguji na leonka:
„Odesílá mi totiž ne hodnotu value ale samotný text uvnitř tagu.“ To je původní fungování <button> u. Ostatní prohlížeče používají nový způsob, kdy posílají value . Řešení je prosté — nepoužívat k předávání informací <button> .
|
||
Keeehi Profil |
#10 · Zasláno: 24. 2. 2012, 20:44:09
leonek:
Neboli použít input hidden a input submit. |
||
leonek Profil |
Ano, to jsem také použil, vše již funguje jak má. Děkuji všem za příspěvky, zejména Loukovi (pardon :) a Werorovy.
|
||
Louka Profil |
#12 · Zasláno: 25. 2. 2012, 00:56:17
leonek:
Offtopic, ale musím to zmínit - jsem ten Louka (=Loukovi). Děkuji za pozornost :D. |
||
Časová prodleva: 12 let
|
0