Autor | Zpráva | ||
---|---|---|---|
xlifer Profil |
#1 · Zasláno: 24. 8. 2010, 14:24:14
Potřebuji v PHP realizovat stažení souboru, který bude vygenerován na vyžádání uživatelem a není tedy nikde umístěn na serveru.
V první kroku provedu autorizaci uživatele a následně mu chci vygenerovat obsah, který pak nabídnu ke stažení jako soubor .txt nebo .csv. Poradíte jak na to? |
||
Medvídek Profil |
#2 · Zasláno: 24. 8. 2010, 14:28:53
xlifer:
header("Content-Disposition: attachment; filename=".$_GET["stahni"]); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Description: File Transfer"); header("Content-Length: " . filesize("upload/".$_GET["stahni"])); readfile("upload/".$_GET["stahni"]); |
||
Alphard Profil |
#3 · Zasláno: 24. 8. 2010, 14:43:58
xlifer:
Viz [#2], když chcete obsah generovat, prostě ho vypište na výstup místo readfile(). Jen by bylo dobré znát jeho délku a dát ji do hlavičky na řádku 6. Samozřejmě upravte i filename na 1. řádku. |
||
xlifer Profil |
#4 · Zasláno: 24. 8. 2010, 14:45:44
Takže jestli dobře chápu, tak ten soubor musím stejně někde fyzicky vytvořit na serveru, ve vašem příkladu tedy vytvořím soubor do adresáre upload/ a pak odešlu uživateli.
A nelze soubor vytvořit pouze do proměnné, kterou pošlu přímo ze skriptu abych nemusel vytvářet fyzicky soubor na serveru? Případně, lze takovému souboru nastavit status něco jako dočasný? Jde o to, aby na serveru nezůstával bordel z žádosti uživatelů a mnoho vygenerovaných souborů. |
||
xlifer Profil |
#5 · Zasláno: 24. 8. 2010, 14:52:34
Alphard:
Ano, to je přesně co jsem potřeboval. Příspěvek pod vašim jsem psal, když vy jste psal svůj, takže se tam ptám na to co jste odpověděl... A budu vypisovat přímo na výstup pomoci echo $data; nebo jinak? |
||
DoubleThink Profil * |
#6 · Zasláno: 24. 8. 2010, 15:18:34
xlifer:
„musím stejně někde fyzicky vytvořit na serveru“ Ne. „nelze soubor vytvořit pouze do proměnné, kterou pošlu přímo ze skriptu abych nemusel vytvářet fyzicky soubor na serveru“ Lze, přesně takhle. O tom, co prohlížeč se souborem provede, rozhoduje hlavička Content-Type a (v případě IE) také jeho obsah - IE například rádo nabízí DOCX se špatnou hlavičkou ke stažení jako ZIP (protože to je zip). Medvídek: „application/download“ lépe application/x-download, vzhledem k tomu, že tento MIME typ neexistuje. |
||
xlifer Profil |
Takže by skript mohl vypadat takto?
$data = "promena obsahujici vygenerovane data ke stazeni"; header("Content-Disposition: attachment; filename=nazev.csv"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/x-download"); header("Content-Description: File Transfer"); header("Content-Length: ".Strlen($data)."); echo $data; |
||
xlifer Profil |
#8 · Zasláno: 25. 8. 2010, 11:19:27
Nevím jak poslat $data na stažení?
Přes echo $data; se mi data vypisují... Poradíte? Díky. |
||
Alphard Profil |
#9 · Zasláno: 25. 8. 2010, 11:26:05
Jestli používáte [#7], na 8. řádku chybí uvozovky.
|
||
xlifer Profil |
#10 · Zasláno: 25. 8. 2010, 11:33:55
Ano, vím, ale ani tak to nefunguje...
Používám přesně tento kód: $data = "promena obsahujici vygenerovane data ke stazeni"; header("Content-Disposition: attachment; filename=\"nazev.csv\""); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/x-download"); header("Content-Description: File Transfer"); header("Content-Length: ".Strlen($data)); echo $data; |
||
xlifer Profil |
#11 · Zasláno: 25. 8. 2010, 11:37:54
A vypadá, že je problém pouze v IE.
Google Chrom, FireFox, Safari i Opera funguje Co v IE vadí ?? |
||
Alphard Profil |
#12 · Zasláno: 25. 8. 2010, 11:44:34
xlifer:
„Co v IE vadí ??“ Mně nabídlo dialog Uložit / Otevřít / Storno. Dal jsem uložit a vše proběhlo správně. IE 8. |
||
__construct Profil |
#13 · Zasláno: 25. 8. 2010, 11:51:29
xlifer:
„Co v IE vadí ??“ Ja som to skúšal aj v IE6 a fuguje správne .. |
||
xlifer Profil |
#14 · Zasláno: 25. 8. 2010, 13:18:17 · Upravil/a: xlifer
Ano, funguje.
Já testuji na svém lokálním Apache Serveru a zřejmě bude někde něco špatně nastaveného i když netuším co? Nicméně na hostingu (jiný server) to funguje. |
||
Časová prodleva: 14 let
|
0