Ahoj,,,
narazil jsem na problém v PHP 'Cannot modify header information'
mam formular a hodnoty z nej POSTuju na php soubor ktery prevezme do promenych hodnoty z formu, dale pomoci knihovny wkhtml vygeneruje PDF. Tento proces sam o sobě facha jak má, jenže trvá dlouho a tak jsem si řekl, že tam lupnu preloader/progress bar a ten se na stránku vygenrejuje pres echo, ale tím pádem odešle headers a následný proces (generováni PDF) se do té stejné stránky browseru snaží headers odeslat taky, což způsobý tu chybu.
dá se s tím nějak vyjebat?
díky za tip
No nejednodusi je asi nechat generovat pdf na pozadi a jak progress pozna, ze je soubor vygenerovan tak te presmeruje na jinou akci, kde dojde ke stazeni souboru.
Citace od: Deli kdy 29. 02. 2016, 14:42:52
No nejednodusi je asi nechat generovat pdf na pozadi a jak progress pozna, ze je soubor vygenerovan tak te presmeruje na jinou akci, kde dojde ke stazeni souboru.
-v mém případě, ale progress proces není synchroní s generováním PDF... uživatel prostě vidí, že se něco děje a to je lepší než blank page.
-dále já ten soubor na serveru neukládám (send to client as file download $pdf->send('report.pdf');)
Tak bych doporučil ten soubor ukládat...
Možná by mohlo jít posílat to jako multipart
header('Content-type: multipart/x-mixed-replace;boundary=endofsection');
print "Content-type: text/html\n\n";
(progress)
print "\n\n";
print "--endofsection\n";
ob_flush();
flush();
print "Content-type: něco/PDF\n\n";
(formulář)
Ale z uživatelského hlediska mi přijde, že to může dělat problémy.
Citace od: ZAJDAN kdy 29. 02. 2016, 15:48:44
-v mém případě, ale progress proces není synchroní s generováním PDF... uživatel prostě vidí, že se něco děje a to je lepší než blank page.
to se dela tak... <div id="throbber-id"> obvykle absolutni pozice. pozadi gif image. display: none;
$(".trida-odkazu-ke-stazeni").click(function() {
$("#throbber-id").show();
});
Citace od: to_je_jedno kdy 29. 02. 2016, 16:20:36
to se dela tak... <div id="throbber-id"> obvykle absolutni pozice. pozadi gif image. display: none;
$(".trida-odkazu-ke-stazeni").click(function() {
$("#throbber-id").show();
});
mas na mysli ten js kod+html element umistit na puvodni page(formular)...? protoze to by ztracelo smysl, pac by se po kliknuti zobrazil v ramci formulare, ale me to po kliknuti presmeruje na 'generatePDF.php' a tam se o tom html elementu(gif) jiz nic nevi
https://cs.wikipedia.org/wiki/AJAX
Citace od: Frontstart kdy 29. 02. 2016, 17:58:02
https://cs.wikipedia.org/wiki/AJAX
vzhledem k tomu, ze ja to pdf neukladam do souboru ani do db, bylo by nejspis velice obtizne si to zpracovat ajaxem,
vse se deje v pameti a hotove pdf je odeslano klientovy do prohlizece s vyzvou k ulozeni souboru(pdf)
Citace od: ZAJDAN kdy 29. 02. 2016, 16:28:59ale me to po kliknuti presmeruje na 'generatePDF.php' a tam se o tom html elementu(gif) jiz nic nevi
pokud nemas zadne presmerovani, ale uplne normalni odkaz tak to neodejde ze stranky nybrz nabidne stahovani - teda pokud z generatePDF.php posilas spravne hlavicky. a potom by mnou napsane easy reseni melo fungovat. Aspon me teda funguje pro uplne stejnou vec.
Citace od: to_je_jedno kdy 01. 03. 2016, 13:39:15
Citace od: ZAJDAN kdy 29. 02. 2016, 16:28:59ale me to po kliknuti presmeruje na 'generatePDF.php' a tam se o tom html elementu(gif) jiz nic nevi
pokud nemas zadne presmerovani, ale uplne normalni odkaz tak to neodejde ze stranky nybrz nabidne stahovani - teda pokud z generatePDF.php posilas spravne hlavicky. a potom by mnou napsane easy reseni melo fungovat. Aspon me teda funguje pro uplne stejnou vec.
u me je to tak, ze jakmile uzivatel na formulari klikne na button 'generovat PDF' ...prohlizec otevre nove okno(generatePDF.php) a v momente kdy je renderovani PDF hotovo, vybehne okno s vyzvou k ulozeni souboru
ale udelam to jak pises..je zbytecne otvirat nove okno...jinak by tomu bylo pokud by se PDF otevrelo primo do okna prohlizece, tam by to bylo na miste
zmenim tedy:
target="_blank" na target="_self"
a pouziju ten js hide/show jak jsi predtim zminil
díky moc
na target se vybodni. aby mu PDF neotevrela zabudovana ctecka tak na to jsou prave hlavicky... si to vygugli - "php header download file"
EDIT: ten js co jsem psal potrebuje jquery. ale prepsat to na cisty js by nemel byt zasadni problem.
Citace od: to_je_jedno kdy 01. 03. 2016, 14:43:59
na target se vybodni. aby mu PDF neotevrela zabudovana ctecka tak na to jsou prave hlavicky... si to vygugli - "php header download file"
EDIT: ten js co jsem psal potrebuje jquery. ale prepsat to na cisty js by nemel byt zasadni problem.
jj, diky za tipy..ted uz by to mela byt snadna akce :)
tož už to valí ..už to fachá :_) thanx once again
Citace od: ZAJDAN kdy 29. 02. 2016, 14:18:05
Ahoj,,,
narazil jsem na problém v PHP 'Cannot modify header information'
mam formular a hodnoty z nej POSTuju na php soubor ktery prevezme do promenych hodnoty z formu, dale pomoci knihovny wkhtml vygeneruje PDF. Tento proces sam o sobě facha jak má, jenže trvá dlouho a tak jsem si řekl, že tam lupnu preloader/progress bar a ten se na stránku vygenrejuje pres echo, ale tím pádem odešle headers a následný proces (generováni PDF) se do té stejné stránky browseru snaží headers odeslat taky, což způsobý tu chybu.
dá se s tím nějak vyjebat?
díky za tip
Jasně, že dá, to pdf získejte pomocí file_get_contents na url, které ho vygeneruje, to uložte do tmp souboru, pak redirect na url s parametrem název tmp souboru, které provede download.