Autor | Zpráva | ||
---|---|---|---|
radekHH Profil * |
#1 · Zasláno: 22. 12. 2013, 17:17:33
XMl mám ve stringu
$xml=""; a potřeboval bych mít možnost tento string nabídnout k uložení do PC = ke stažení. Jak na to?
|
||
Micruss Profil |
#2 · Zasláno: 22. 12. 2013, 17:22:25
uložit do souboru? file_put_contents/fwrite.....
|
||
radekHH Profil * |
#3 · Zasláno: 22. 12. 2013, 17:46:40
Do souboru na FTP nee ... chci, aby mě prohlížeč nabídnul soubor stáhnout. Načtu stránku a vyskočí okno ... uložit.
|
||
juriad Profil |
Dříve než vypíšeš xml na výstup, pošli hlavičku:
header('Content-type: text/xml'); header('Content-Disposition: attachment; filename="soubor.xml"'); ... echo $xml; |
||
Rfilip Profil |
#5 · Zasláno: 22. 12. 2013, 18:03:12
<?php header('Content-type: text/xml'); header('Content-Disposition: attachment; filename="soubor.xml"'); echo $xml; |
||
Mike8748 Profil |
#6 · Zasláno: 22. 12. 2013, 18:03:57
radekHH:
třeba $xml="tvuj xml kod"; $name="soubor.xml"; // jmeno stahovaneho souboru, nemusi existovat, prohlizec stahovane xml bude chtit ukladat s timto nazvem header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"" . $name) . "\""); echo $xml; |
||
Časová prodleva: 10 dní
|
|||
VelkýBubák Profil |
#7 · Zasláno: 1. 1. 2014, 17:04:08
Mike8748:
první řádek hlavičky by pro xml asi měl být: header('Content-Type: text/xml'); Čemu pomáhá ten druhý? Když to zakomentuju, nevidím rozdíl. V třetím řádku změnit $name) na $name Má proměnná $xml nějakej velikostní limit? |
||
Alphard Profil |
#8 · Zasláno: 1. 1. 2014, 17:28:01
V těch hlavičkách Mike8748 vynucuje nabídku k výběru programu/stažení, proto tam není přímo xml. Vhodně určeným kódováním se nic nezkazí, když není nastaveno, cílové zařízení ho odhadne/použije defaultní.
$xml je omezená velikostí paměti. Klidně tam může být postupné generování výstupu, je to jedno. Jen pak nepůjde nastavit délka souboru, což se tady stejně neděje (šlo by hlavičkou Content-Length ).
|
||
VelkýBubák Profil |
Alphard:
Aha, děkuji. Já to udělal bez proměnné. Prostě vypisuji co chci pomocí echo a na konci mám header("Content-Type: text/xml"); header("Content-Disposition: attachment; filename=\"$soubor\""); |
||
Alphard Profil |
#10 · Zasláno: 1. 1. 2014, 18:05:09
Hlavičky rozhodně jako první, před jakýkoliv výstup.
|
||
VelkýBubák Profil |
Alphard:
Chápu, že když to je hlavička, asi by to tak být mělo, ale na výsledek to nemá vliv (alespoň u mě se nic nestalo) Aj, ale koukám, že ta proměná u mě ve výpisu s tím nesouvisí (vypisuje se i když dám pryč hlavičku) |
||
Alphard Profil |
#12 · Zasláno: 1. 1. 2014, 18:45:18
Vy moc věříte tomu, to za určitých příznivých okolností funguje. Budiž :-) Až se něco rozbije, navštivte naše FAQ.
|
||
VelkýBubák Profil |
Alphard:
Omlouvám se, předpokládám že k důvod proč hlavičky před výstupem se dozvím z dokumentace, ale víc mne zaujala zmínka o příznivých okolnostech. A poté co jsem konečně přišel na důvod, proč se mi ta proměnná vypisovala to začímám brát vážně (stačilo změnit uvozovky, ono tam bylo $_POST["tabulka"] - ale bylo na na začátku kódu před výpisem ostatního...) |
||
Alphard Profil |
#14 · Zasláno: 1. 1. 2014, 21:41:36
VelkýBubák [#13]:
Výstup se neodesílá hned klientovi, ale bývají nastaveny výstupní buffery. Pokud stihnete poslat hlavičky dřív, než tyto buffery přetečou, projde to. Když ne, vidíte už jen klasickou hlášku headers already sent…. |
||
VelkýBubák Profil |
#15 · Zasláno: 2. 1. 2014, 05:32:01
Aha, děkuji
|
||
VelkýBubák Profil |
Jde nějak posílat z jednoho scriptu více xml souborů?
<?php $pocetSouboru = 0; $pocetZaznamu = 0; $textik = ""; while($zaznam=mysql_fetch_array($vysledek5)) { $textik .= "<P>Příliš žluťoučký kůň úpěl ďábelské ódy. I příšerně červeňoučký kůň úpěl ďábelské ódy. Hleď, toť přízračný kůň v mátožné póze šíleně úpící. Zvlášť zákeřný učeň s ďolíčky běží podél zóny úlů. Loď čeří kýlem tůň obzvlášť v Grónské úžině. Ó, náhlý déšť již zvířil prach a čilá laň teď běží s houfcem gazel k úkrytům.</P> <P> Kŕdeľ šťastných ďatľov učí pri ústí Váhu mĺkveho koňa obhrýzať kôru a žrať čerstvé mäso. </P> "; if(ceil(strlen($textik)/1024)>= 1020) { $textik .= " </myanimelist>"; header("Content-Description: File Transfer"); header("Content-Type: text/xml"); header("Content-Disposition: attachment;filename=\"".$tabulka."-file".$pocetSouboru.".xml\""); echo $textik; unset($textik); $textik = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> <myanimelist>"; $pocetSouboru++; } $pocetZaznamu++; } $textik .= " </myanimelist>"; header("Content-Description: File Transfer"); header("Content-Type: text/xml"); header("Content-Disposition: attachment;filename=\"".$tabulka."-file".$pocetSouboru.".xml\""); echo $textik; unset($textik); $pocetSouboru++; $info = "Informace k přenosu: Přeneseno: ".$pocetSouboru." souborů, pro AniDB Zpracováno: ".$pocetZaznamu." záznamů"; header("Content-Description: File Transfer"); header("Content-Type: text/txt"); header("Content-Disposition: attachment;filename=\"info-".$tabulka.".txt\""); echo $info; ?> |
||
Jan Tvrdík Profil |
#17 · Zasláno: 2. 1. 2014, 21:24:01
VelkýBubák:
„Jde nějak posílat z jednoho scriptu více xml souborů?“ Ne, jedině, že bys to zabalil do archivu. |
||
VelkýBubák Profil |
Jan Tvrdík:
myslíš jako jeden vytvořil, zabalil, a tvořil další? |
||
juriad Profil |
#19 · Zasláno: 2. 1. 2014, 21:49:18
Ne, vytvořil všechny, zabalil je (například do zipu) a zip nabídnul ke stažení.
|
||
VelkýBubák Profil |
juriad:
aha, takže pokud to dobře chápu, lze nějak udělat více souborů v jednom scriptu, ale pokud bych je chtěl i všechny z jednoho scriptu poslat, musím je zabalit. Pokud vezmu v potaz ten script co už mám, proměnná $textík by se vkládala do nějaké balicí funkce, jež by to zabalila až po vytvoření poslední části (posledního souboru na zabalení), a za ní by ve scriptu zůstala jen jedna trojice hlaviček na konci, aby vytvořený archiv poslala. Rozumím tomu správně? |
||
juriad Profil |
#21 · Zasláno: 2. 1. 2014, 22:28:15
Ano; podívej se na první příklad http://cz1.php.net/manual/en/zip.examples.php a také na http://us2.php.net/manual/en/ziparchive.open.php#84646
|
||
VelkýBubák Profil |
juriad:
Mnohokrát děkuji, pomohlo. Vytvořil se zip archiv a uložil ke mně do adresáře. Teď už jen zjistit, jak to nabídnout ke stažení jako původně ten xml soubor. |
||
juriad Profil |
#23 · Zasláno: 3. 1. 2014, 11:26:02
VelkýBubák:
To je v tom druhém odkazu :) // Stream the file to the client header("Content-Type: application/zip"); header("Content-Length: " . filesize($file)); header("Content-Disposition: attachment; filename=\"a_zip_file.zip\""); readfile($file); |
||
Časová prodleva: 5 dní
|
|||
VelkýBubák Profil |
#24 · Zasláno: 8. 1. 2014, 04:33:07
juriad
Jau, toho jsem si nějak nevšiml. Bohužel, toto mi nefunguje. Respektive, vyskočí okénko na stažení zip souboru s příponou xml o velikosti 20bajtů... jako prozatimní řešení tam mám ma tvrdo danou cestu k vytvořenému souboru, ale stejně by mě zajímalo. |
||
VelkýBubák Profil |
Opravdu nechápu.
Když ty dvě akce (tvorba souboru a automatická nabídka ke stažení) provedu ručně dvouma scriptama php kódu - lze to. Když to dám dohromady - nelze. -že by za to mohl nějaký buffer (viz [#14] Alphard)? |
||
Časová prodleva: 11 let
|
0