Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: ZAJDAN 04. 10. 2016, 10:17:45
-
Ahoj
mam web na kterém je formulář a SVG. Submitem vše odešlu na server ke zpracování.
Server data zpracuje a vytvoři PDF, které pošle do okna klientova prohližeče.
PHP script, který zapisuje soubory z dat poslané ajaxem používá jeden soubor jako kontajner a ten se každým dalším submitem přepíše.
PROBLEM:
odesílané SVG je někdy větší (6MB) a v závisloti na rychlosti klientova uploadu je čas 'relativní' a někdy nastanou situace že do generovaného PDF se dostane předchozí/neaktuální SVG.
poradili by jste mi?... jak synchronizovat proces zapsaní souboru 'scrip1.php' a generování PDF obsahující mimo jiné i SVG 'script2.php'
pro snadné pochopení jsem načtrtl jak jsou procesy navázány nyní.
-
nesmis "prepisovat", ale dat si tam nejakou signaturu, treba sess_id + timestamp. a pak to cronem likvidovat kdyz je to starsi nez x.
-
díky, ale jak ziskam ten 'random name' nově vytvořeného souboru do scriptu, který generuje PDF?
-
K čemu je dobré poslat submitem formulář a svg ajaxem zvlášť a potom to synchronizovat k vytvoření jednoho souboru?
-
K čemu je dobré poslat submitem formulář a svg ajaxem zvlášť a potom to synchronizovat k vytvoření jednoho souboru?
protože mne lepší metoda nenapadla, nejsem na tyto věci expert
zatím to řeším tak, že do scriptu co generuje PDF jsem dal delay
nechám si rád poradit od zkušenych, jak to dělat lépe
díky
-
OK. Ale pořád tomu nerozumím. Proč to neposíláš v jenom požadavku?
Možná to má být rozdělení do "více vláken"? Tady ale ty procesy o sobě navzájem nevědí. Posunutím čekání na zpracování svg to nejspíš nevyřešíš. Budou chodit různé požadavky s různou dobou zpracování a jsi tam, kde jsi byl
Když uděláš 1 požadavek, tak celý script čeká, než se vyřeší všechny části a pak to pošle.
K tématu paralelního zpracování jsem našel https://php.vrana.cz/paralelni-zpracovani.php.
Víc jsem nehledal. Snad ti to pomůže.
Stejně mě zajímá ta motivace. Já taky žádný expert nejsem, třeba se přiučím (bez ironie)
-
OK. Ale pořád tomu nerozumím. Proč to neposíláš v jenom požadavku?
Možná to má být rozdělení do "více vláken"? Tady ale ty procesy o sobě navzájem nevědí. Posunutím čekání na zpracování svg to nejspíš nevyřešíš. Budou chodit různé požadavky s různou dobou zpracování a jsi tam, kde jsi byl
Když uděláš 1 požadavek, tak celý script čeká, než se vyřeší všechny části a pak to pošle.
K tématu paralelního zpracování jsem našel https://php.vrana.cz/paralelni-zpracovani.php.
Víc jsem nehledal. Snad ti to pomůže.
Stejně mě zajímá ta motivace. Já taky žádný expert nejsem, třeba se přiučím (bez ironie)
máš namysli submitnou vše jedním Ajaxem?
-
Ano.
A ještě jedna otázka. Jak může mít SVG 6 MB? Je to jen popis křivek odkud kam vedou a jakou mají polohu apod. Je to textový soubor
Jirka
-
A ještě jedna otázka. Jak může mít SVG 6 MB? Je to jen popis křivek odkud kam vedou a jakou mají polohu apod. Je to textový soubor
jde o velmi složitou grafiku s několika vrstvy, ktere se daji interaktivně ovládat
-
Tak dej vědět pls, jak to dopadlo
-
A nebylo by lepsi nahravat ajaxem jen to SVG? Dat to jako prvni krok formulare. Jakmile to uzivatel vybere, tak spustit nahravani, zobrazit nejakej citlivej progress bar a zakazat odeslani formulare. Mezi tim by mohl uzivatel vyplnovat zbytek. Nahravani na success posle nejaky ID toho SVG. To uz vygenerovat nahodne na serveru (napr. ClientSVG_timestamp.svg). ID pripojim k datum ve formulari (napr. hidden field) a povolim uzivateli odeslat formular. Na serveru diky tomu budu mit jak jistotu, ze uz SVG mam, tak i informaci, kde ji hledat.
-
A nebylo by lepsi nahravat ajaxem jen to SVG? Dat to jako prvni krok formulare. Jakmile to uzivatel vybere, tak spustit nahravani, zobrazit nejakej citlivej progress bar a zakazat odeslani formulare. Mezi tim by mohl uzivatel vyplnovat zbytek. Nahravani na success posle nejaky ID toho SVG. To uz vygenerovat nahodne na serveru (napr. ClientSVG_timestamp.svg). ID pripojim k datum ve formulari (napr. hidden field) a povolim uzivateli odeslat formular. Na serveru diky tomu budu mit jak jistotu, ze uz SVG mam, tak i informaci, kde ji hledat.
ne to by neslo, protoze formular ma checkboxy, kterymi se to svg interaktivne meni a teprve jeho finalní stav je potreba odeslat
-
napumpoval jsem tedy vsechno do ajaxu, ale server mi vraci chybu:
XMLHttpRequest cannot load http://mujweb/pdf/create-pdf.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://www.mujweb.cz' is therefore not allowed access. The response had HTTP status code 500.
-
cross-domain request?
AJAX by měl chodit na stejné doméně. To voláte z localhost?
-
Napadlo mě, jak pojmenovat to PDF: Sesbírat vstupní data, provést hash (třeba SHA1) a podle toho to výstupní PDF pojmenovat a ten název poslat klientovi. Při reloadu stejných vstupních dat se to tedy pojmenuje stejně.
-
cross-domain request?
AJAX by měl chodit na stejné doméně. To voláte z localhost?
ne to jsem právě zkusil přímo na doméně....
napadlo mne, zda to nekoliduje s ContentSecurityPolicy nasazene na Apachi...je to mozne?
-
XMLHttpRequest cannot load http://mujweb/pdf/create-pdf.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://www.mujweb.cz' is therefore not allowed access. The response had HTTP status code 500.
http://mujweb/pdf/create-pdf.php - toto je správně?
-
XMLHttpRequest cannot load http://mujweb/pdf/create-pdf.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://www.mujweb.cz' is therefore not allowed access. The response had HTTP status code 500.
http://mujweb/pdf/create-pdf.php - toto je správně?
ten odkaz/link je smyšlený, ale ty máš nejspíše namysli to non www a ...s www...překontroluju to
-
XMLHttpRequest cannot load http://mujweb/pdf/create-pdf.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://www.mujweb.cz' is therefore not allowed access. The response had HTTP status code 500.
http://mujweb/pdf/create-pdf.php - toto je správně?
ten odkaz/link je smyšlený, ale ty máš nejspíše namysli to non www a ...s www...překontroluju to
taky to může http a https, nebo prostě nastuduj tu hlavičku a pošli ji též. S ajaxem maturuju pokaždé, když chci něco složijějšího a odpověď 500 je to nejhorší - chyba požadavku? chyba serveru? konjunkce merkura s venuší? :-)
-
taky to může http a https, nebo prostě nastuduj tu hlavičku a pošli ji též. S ajaxem maturuju pokaždé, když chci něco složijějšího a odpověď 500 je to nejhorší - chyba požadavku? chyba serveru? konjunkce merkura s venuší? :-)
je pravdou, že na tom webu je nasazene SSL, ale neni tam force redirect na SSL, tak předpokladam, ze pokud na domenu pristoupim z http:// ...tak response pujde take z http:// ...coz i tak vypada....ceho jsem si ted jeste vsiml, je ze v ajaxu mam celou cestu na php, tak jeste zkusim cestu relativni bez http://...
-
opravil jsem v ajaxu cestu k php , taky nekolik spatnych nazvu promenych
nyni vse probehne bez erroru, na serveru se vytvori svg, debuger hlasi vse ok
jediny problem je, ze vytvorene PDF se do prohlizece neposle, tak tedy netusim co se deje
-
je pravdou, že na tom webu je nasazene SSL, ale neni tam force redirect na SSL, tak předpokladam, ze pokud na domenu pristoupim z http:// ...tak response pujde take z http:// ...coz i tak vypada....ceho jsem si ted jeste vsiml, je ze v ajaxu mam celou cestu na php, tak jeste zkusim cestu relativni bez http://...
Také je dobré si uvědomit, že komunikační protokol je sice HTTPS, ale hlavičky protokolu jsou HTTP.
-
Také je dobré si uvědomit, že komunikační protokol je sice HTTPS, ale hlavičky protokolu jsou HTTP.
upravil jse to tedy aby request i response byl na https://
odeslu formular a pozoruju co se deje v debugeru....vse ok
v response dokonce vidim zdrojak pdf:
%PDF-1.4
1 0 obj
<<
/Title (þÿ)
/Creator (þÿwkhtmltopdf 0.12.2.1)
/Producer (þÿQt 4.8.6)
/CreationDate (D:20161007114945+02'00')
>>
endobj
3 0 obj
....
...
..
ale stále se PDF nevráti okna prohlizece
metodou ulozeni do slozky jsem si overil, ze se PDF skutecne vytvori
-
projistotu jsem zalozil dotaz i na Githubu knihovny kterou pouzivam:
https://github.com/mikehaertl/phpwkhtmltopdf/issues/192
-
odeslu formular a pozoruju co se deje v debugeru....vse ok
v response dokonce vidim zdrojak pdf:
%PDF-1.4
..
ale stále se PDF nevráti okna prohlizece
metodou ulozeni do slozky jsem si overil, ze se PDF skutecne vytvori
Je nutné nastavit funkcí header() správné hlavičky MIME, na které bude prohlížeč adekvátně reagovat. Zkus tohle:
header("Content-type: application/pdf");
header("Content-Disposition: attachment;filename='dokument.pdf'");
// kód generující PDF
-
Je nutné nastavit funkcí header() správné hlavičky MIME, na které bude prohlížeč adekvátně reagovat. Zkus tohle:
header("Content-type: application/pdf");
header("Content-Disposition: attachment;filename='dokument.pdf'");
// kód generující PDF
díky za tip
nejde mi do hlavy proc toto nastane jen kdyz jsou data predana AJAXem...v puvodni variante vse fachalo spravne
PHP script generujici PDF zustal stejny jen jsem doplnil to ziskani a zapsani SVG
zkusil jsem tedy doplnit tu hlavicku, ale nepomohlo to
-
jestli je to pravda co rika Haertl(tvurce knihovny), tak je to pekne v pr....
You can not trigger a download dialog with AJAX request.
-
tak a je po slavě, slavnym AJAXem se ve jeste vice zkomplikovalo...zkusim se podivat zde se s tim da nejak vybruslit
-
Tak si dej na ajaxComplete js presmerovani na vytvoreny pdf.
-
imho bys mel najit nejakyho seniora aby ti zkouknul celkovou architekturu toho reseni. me to prijde cele nejake divne.
-
Tak si dej na ajaxComplete js presmerovani na vytvoreny pdf.
Přesně tak, ať ajax vrátí třeba json, podle které poznáš, zda vše proběhlo správně a jaké je url vygenerovaného pdf souboru. V javascriptu si ověříš úspěch a pokud je vše ok, přeměruješ stránku na to vygenerované pdf. Anebo třeba zobrazíš odkaz ke stažení apod.
-
SOLVED:
hoši moc díky za rady....
cílem bylo PDF na server neukládat, ale nezbylo mi nic jiného, než soubor na server uložit...
PHPkem jsem do Ajaxu vratil cestu k souboru, který ma vždy unikatní název a přes
window.open(data)
browser clientovi otevře nové okno s vygenerovaným PDF.
-
pozoruju, ze se mi casto otevre prazdne PDF...zkousim si alertnout co mi vraci PHP a prázdno
je mozne aby ajax provedl success a PHP jeste nezpracovalo vsechny ulohy?
-
po odeslani formulare vidim v debuggeru v zalozce Network status 'canceled' ...hmm proc?
-
vypada to, ze reseni je do js zakomponovat
event.preventDefault();
-
no aby toho nebylo malo, tak zjistuji, ze to facha pouze v Chromu a Vivaldi :(
Firefox vyhodí:
ReferenceError: event is not defined
-
Firefox vyresen...pro firefox je potreba predat parametr event:
$( "#createPDF" ).click(function(event) {
event.preventDefault();
ted jeste ten sileny IE a melo by byt hotovo