Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: ZAJDAN 29. 02. 2016, 14:18:05

Název: PHP - Cannot modify header information
Přispěvatel: ZAJDAN 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
Název: Re:PHP - Cannot modify header information
Přispěvatel: Deli 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.
Název: Re:PHP - Cannot modify header information
Přispěvatel: ZAJDAN 29. 02. 2016, 15:48:44
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');)
Název: Re:PHP - Cannot modify header information
Přispěvatel: Jenda 29. 02. 2016, 16:11:51
Tak bych doporučil ten soubor ukládat…

Možná by mohlo jít posílat to jako multipart

Kód: [Vybrat]
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.
Název: Re:PHP - Cannot modify header information
Přispěvatel: to_je_jedno 29. 02. 2016, 16:20:36
-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;

Kód: [Vybrat]
$(".trida-odkazu-ke-stazeni").click(function() {
  $("#throbber-id").show();
});
Název: Re:PHP - Cannot modify header information
Přispěvatel: ZAJDAN 29. 02. 2016, 16:28:59
to se dela tak... <div id="throbber-id"> obvykle absolutni pozice. pozadi gif image. display: none;
Kód: [Vybrat]
$(".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
Název: Re:PHP - Cannot modify header information
Přispěvatel: Frontstart 29. 02. 2016, 17:58:02
https://cs.wikipedia.org/wiki/AJAX
Název: Re:PHP - Cannot modify header information
Přispěvatel: ZAJDAN 01. 03. 2016, 11:28:29
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)
Název: Re:PHP - Cannot modify header information
Přispěvatel: to_je_jedno 01. 03. 2016, 13:39:15
ale 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.
Název: Re:PHP - Cannot modify header information
Přispěvatel: ZAJDAN 01. 03. 2016, 14:09:57
ale 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
Název: Re:PHP - Cannot modify header information
Přispěvatel: ZAJDAN 01. 03. 2016, 14:15:09
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
Název: Re:PHP - Cannot modify header information
Přispěvatel: to_je_jedno 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.
Název: Re:PHP - Cannot modify header information
Přispěvatel: ZAJDAN 01. 03. 2016, 15:01:50
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 :)
Název: Re:PHP - Cannot modify header information
Přispěvatel: ZAJDAN 01. 03. 2016, 16:51:20
tož už to valí ..už to fachá :_) thanx once again
Název: Re:PHP - Cannot modify header information
Přispěvatel: Ivan Nový 10. 03. 2016, 15:26:32
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.