Autor Zpráva
tinko
Profil
Zdravím,

Nevím si rady s jednou věcí. Mám php kód jehož výsledkem je proměnná obsahující x řádků textu. Tento text chci vypsat na stránku a pod něj rovněž přidat tlačítko kdy při kliknutí na něj vyskočí uživateli klasické windows okno "uložit jako" a on si uloží onen text jako txt soubor do počítače. Taky bych potřeboval aby se mu při uložení nabídl název onoho souboru jako soubor-datum-cas.txt
Keeehi
Profil
file-data.php
$data = "foo";
$_SESSION['data'] = $data;
echo $data;
echo '<a href="file-download.php">Stáhnout jako soubor</a>';

file-download.php
header("Content-Description: File Transfer"); 
header("Content-Type: application/force-download"); 
header("Content-Disposition: attachment; filename=\"soubor_".date("Y-m-d_H-i-s").".txt\"");

echo $_SESSION['data'];

Toto je jen taková kostra na ukázku. Pro reálné použití to bude třeba upravit. Co z toho má být vidět jsou dvě věci.
1) Je to dvoukrokový proces. A je tedy třeba data mezi jednotlivými kroky uložit. Já jsem v tomto případě zvolil session, protože je to na ukázku nejjednodušší, ale podle typu dat či požadavků aplikace může být vhodnější třeba databáze.
2) Jak se tvoří to, že prohlížeč ze serveru stáhne soubor, který tam fyzicky ani není. Stačí pár hlaviček (hlavně druhá) a prohlížeč to vezme jako soubor pro stáhnutí. Cokoli se vypíše po těch hlavičkách bude obsah toho souboru.
tinko
Profil
Díky. Akorát se mi nedaří přenést obsah $_SESSION['data'] do toho souboru. Pokud soubor uložím je prázdný.
tinko
Profil
Tak už jsem to vyřešil, díky za nakopnutí.
Kajman
Profil
Ta data v session si nějak identifikujte, pokud si člověk otevře dva taby, dostal by vždy kód z posledního. Případně můžete na server data poslat celá a on je zase vrátí jako txt soubor.

Dalším řešením je vyvolat dialog uložení nad javascriptovou proměnnou. Různé prohlížeče potřebují různá řešení, tak mrkněte např. na knihovnu
github.com/koffsyrup/FileSaver.js

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: