Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: ZAJDAN 06. 08. 2015, 13:13:43

Název: AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 06. 08. 2015, 13:13:43
Ahoj,
mam trochu nestandardni pripad:
na webu formular obsahujici SVG, ktere se dle interaktivity uzivatele meni, uzivatel formular odesle a v ten moment potrebuji na server toto svg ulozit.

- To jsem si nachystal javascripetm kde pomoci '.outerHTML'  dostanu do promene kompletni strukturu aktualniho svg (pravdepodobne string)
- Nasledne bych tuto promenou poslal ajaxem na server s partametrem url:'uploadSVG.php'
- predpokladam ze PHP zpracuje pozadavek ve kterem zachytne string a ted potrebuji poradit jak v PHP nastavit aby to ulozilo do souboru s datovym   
  typem .svg

díky
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 06. 08. 2015, 15:08:51
js:
var structureSVG = svgpic.outerHTML;
ajax attribut:
data:'structureSVG',
zkusil jsem si zatím sestrojit php zpracovaní na strane serveru:
Kód: [Vybrat]
$post_data = $_POST['structureSVG'];
if (!empty($post_data)) {
                            $dir = '/pdf/modelSVG/';
                            $file = uniqid().getmypid();
                            $filename = $dir.$file.'.svg';
                            $handle = fopen($filename, "w");
                            fwrite($handle, $post_data);
                            fclose($handle);
                            echo $file;
                        }

ted mi neni jasne zda v php POSTu mam zachytavat 'data' nebo 'structureSVG'
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: Hmmm 06. 08. 2015, 15:17:09
A preco si to nevyskusas? Vypis si cez var_dump co sa ti nechadza v POST a budes mat jasnejsie.  :)
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 06. 08. 2015, 15:25:19
v PHP to bude  hodnota attributu data
problem bude v tom ze nevim jak by mel presne vypadat zapis promene do attributu data

Kód: [Vybrat]
var structureSVG = svgpic.outerHTML;
.....
.......
dataType: 'json',
data:{structureSVG:$structureSVG}

?
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 06. 08. 2015, 15:35:12
co se týče ajaxu attributu data, tak takto by to mělo být správně:
var structureSVG = svgpic.outerHTML;
........
data:'structureSVG='+structureSVG,
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 06. 08. 2015, 16:00:00
dostal jsem se o kus dal ale pri zpracovani ajaxu mi debuger vyhodi:
XMLHttpRequest cannot load No 'Access-Control-Allow-Origin' header is present on the requested resource.
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 07. 08. 2015, 09:16:56
tak tento problem s pristupem byl zpusoben, ze jsem v ajaxu mel v parametru url zapasanou celou verejnou cestu
v mem pripade se cela akce deje v ramci stejneho webu, opravil jsem tedy url a je klid

co me trapi ted je jak debugovat php, to co prichazi do POST
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: pepa 07. 08. 2015, 09:36:48
ve firefoxu zkus firebug

ten vestaveny debugovaci nastroj jak firefox tak chrome sou prisery
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 07. 08. 2015, 10:45:36
vypozoroval jsem že pokud mám v php:

Kód: [Vybrat]
$post_data = $_POST['structureSVG'];

echo '<pre>';
print_r($post_data);
echo '</pre>';

ajax vratí error
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: huggog 07. 08. 2015, 11:08:16
Já bych řekl, že pro nás nejasnozřivé, by jsi mohl zveřejnit co za error vrací php. Pokud sem hodíš jen "error" a útržky kódu,tak lze jen hádat čím to je..
ale skusím to :-) vypiš si tam radsi print_r($_POST), jestli tam vůbec něco pošleš
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: Hmmm 07. 08. 2015, 11:22:00
Uz vcera som mu pisal, ze ma vypisat $_POST cez var_dump aby videl co v nom vlastne ma a podla toho to formatoval... :)
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 07. 08. 2015, 11:35:14
upresnim to tedy:
js:
Kód: [Vybrat]
var structureSVG = svgpic.outerHTML;
                                $.ajax({
                                                type:'POST',
                                                url: '/pdf/uploadSVG.php',
                                                dataType: 'json',
                                                contentType: 'application/json',
                                                data:'structureSVG='+structureSVG,
                                                success: function() { alert("Success"); },
                                                error: function() { alert('Failed!'); },
                                                });
php:
Kód: [Vybrat]
<?php
$post_data 
$_POST['structureSVG'];
var_dump($post_data);
?>

browser vyhodi Failed!
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: rootacek 07. 08. 2015, 11:52:32
upresnim to tedy:
js:
Kód: [Vybrat]
var structureSVG = svgpic.outerHTML;
                                $.ajax({
                                                type:'POST',
                                                url: '/pdf/uploadSVG.php',
                                                dataType: 'json',
                                                contentType: 'application/json',
                                                data:'structureSVG='+structureSVG,
                                                success: function() { alert("Success"); },
                                                error: function() { alert('Failed!'); },
                                                });
php:
Kód: [Vybrat]
<?php
$post_data 
$_POST['structureSVG'];
var_dump($post_data);
?>

browser vyhodi Failed!

Zkusil bych,

Kód: [Vybrat]
var structureSVG = svgpic.outerHTML;
                                $.ajax({
                                                type:'POST',
                                                url: '/pdf/uploadSVG.php',
                                                dataType: 'json',
                                                contentType: 'application/json',
                                                data:{structureSVG: structureSVG},
                                                success: function() { alert("Success"); },
                                                error: function() { alert('Failed!'); },
                                                });
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: huggog 07. 08. 2015, 12:24:14
místo $.ajax použij $.post
a skus ten firebug, co ti uz nekdo psal.. je v nem konzole, kde se ti zobrazi ten ajaxovy request i s odpovedi, v ktere bude co vratil server, tam by mela byt i chyba z php, ze $_post tam neni..
jinak tohle si najdes i tech default debuggerech co jsou v ff a chrome
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: huggog 07. 08. 2015, 12:27:27
tak nic, ze tam je type:'POST' jsem si vsiml hned jak odeslal :) kazdopadne debugger a to co vraci server te zajima..
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: Hmmm 07. 08. 2015, 12:34:16
upresnim to tedy:
js:
Kód: [Vybrat]
var structureSVG = svgpic.outerHTML;
                                $.ajax({
                                                type:'POST',
                                                url: '/pdf/uploadSVG.php',
                                                dataType: 'json',
                                                contentType: 'application/json',
                                                data:'structureSVG='+structureSVG,
                                                success: function() { alert("Success"); },
                                                error: function() { alert('Failed!'); },
                                                });
php:
Kód: [Vybrat]
<?php
$post_data 
$_POST['structureSVG'];
var_dump($post_data);
?>

browser vyhodi Failed!
Aky failed? Browser ti nevyhodi iba failed. A minimalne v console budes mat response z toho php skriptu, v ktorom bude dumpnuty POST. Mimo toho mas zle urobene data, pretoze sa to robi takto:

data: { structureSVG: structureSVG }

Ale to mas aj v dokumentacii k $.ajax
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 07. 08. 2015, 12:57:29
takze proc ajax failoval bylo zpusobeno parametrem
dataType: 'json',
zakomentoval jsem a nyni Success

to rootacek:
poslal jsem si obsah do konzole
data:'structureSVG='+structureSVG, .......posle citelnou nezmenenou strukturu SVG(xml) a tu ja potrebuji
data:{structureSVG: structureSVG}, ........posle  strukturu SVG(xml) doplnenou mnoha nezadoucimi znaky %

ohledne debugovani jsem se v dragonFly(Opera) podival do network co nyní vraci server:
Response Headers:
Connection:Keep-Alive
Content-Length:5
Content-Type:text/html; charset=UTF-8
Date:Fri, 07 Aug 2015 10:43:01 GMT
Keep-Alive:timeout=5, max=72
Server:Apache/2.4.10 (Debian)


v php mam nyní pouze:
$post_data = $_POST['structureSVG'];
var_dump($post_data);


mel bych ten dump nekde moznost precist?...ajax dokonci praci uspesne..response ze serveru je OK, ale neni mi jasne kam se vypsal ten dump v php
diky
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: rootacek 07. 08. 2015, 13:05:57
takze proc ajax failoval bylo zpusobeno parametrem
dataType: 'json',

mel bych ten dump nekde moznost precist?...ajax dokonci praci uspesne..response ze serveru je OK, ale neni mi jasne kam se vypsal ten dump v php
diky

Jasně když neposíláš JSON.To jsem nekontroloval.Je třeba se pozorně dívat no.

Vypsal se na straně serveru, ale nemůžeš ho získat jinak, než že ho přebereš ajaxem a přes funkci
Kód: [Vybrat]
.done(function( html ) {
alert(html);
  });
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 07. 08. 2015, 13:54:18
Vypsal se na straně serveru, ale nemůžeš ho získat jinak, než že ho přebereš ajaxem a přes funkci
Kód: [Vybrat]
.done(function( html ) {
alert(html);
  });

diky, upravil jsem tedy:
success: function( html ) {alert(html);  },

a vratí mi to:
string (535196) "<svg xmlns= ....cela spravnastruktura svg>
takze php dostane string data a spravna
ted jiz jen to spravne ulozit zpet do svg souboru na serveru:
Kód: [Vybrat]
if (!empty($post_data)) {
                            $dir = '/pdf/modelSVG/';
                            $file = uniqid().getmypid();
                            $filename = $dir.$file.'.svg';
                            $handle = fopen($filename, "w");
                            fwrite($handle, $post_data);
                            fclose($handle);
                            echo $file;
                        }

ale s timto zapisem mi ajax opet failuje :(
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: Hmmm 07. 08. 2015, 14:05:15
takze proc ajax failoval bylo zpusobeno parametrem
dataType: 'json',

mel bych ten dump nekde moznost precist?...ajax dokonci praci uspesne..response ze serveru je OK, ale neni mi jasne kam se vypsal ten dump v php
diky

Jasně když neposíláš JSON.To jsem nekontroloval.Je třeba se pozorně dívat no.

Vypsal se na straně serveru, ale nemůžeš ho získat jinak, než že ho přebereš ajaxem a přes funkci
Kód: [Vybrat]
.done(function( html ) {
alert(html);
  });
To nie je tak celkom pravda. Vypis php skriptu, ktory spustil ajax mozes vidiet v konzole v networks (chrome). Staci si len kliknut na url request a v nom na response.
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: Hmmm 07. 08. 2015, 14:07:24
Vypsal se na straně serveru, ale nemůžeš ho získat jinak, než že ho přebereš ajaxem a přes funkci
Kód: [Vybrat]
.done(function( html ) {
alert(html);
  });

diky, upravil jsem tedy:
success: function( html ) {alert(html);  },

a vratí mi to:
string (535196) "<svg xmlns= ....cela spravnastruktura svg>
takze php dostane string data a spravna
ted jiz jen to spravne ulozit zpet do svg souboru na serveru:
Kód: [Vybrat]
if (!empty($post_data)) {
                            $dir = '/pdf/modelSVG/';
                            $file = uniqid().getmypid();
                            $filename = $dir.$file.'.svg';
                            $handle = fopen($filename, "w");
                            fwrite($handle, $post_data);
                            fclose($handle);
                            echo $file;
                        }

ale s timto zapisem mi ajax opet failuje :(
Jo, failuje ti zrejme kvoli ceste v $dir. Skripty spustane ajaxom mozu mat ine relativne cesty kvoli url a podobne. Cize bud si osetri ci relativna cesta smeruje na spravne miesto alebo pouzi fixne cesty.
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: rootacek 07. 08. 2015, 14:12:17
To nie je tak celkom pravda. Vypis php skriptu, ktory spustil ajax mozes vidiet v konzole v networks (chrome). Staci si len kliknut na url request a v nom na response.
Ano ,ale nezískáte tak data pro využití.



ale s timto zapisem mi ajax opet failuje :(
Failuje, to znamená ajax vrátí failed?
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 07. 08. 2015, 14:13:30
To nie je tak celkom pravda. Vypis php skriptu, ktory spustil ajax mozes vidiet v konzole v networks (chrome). Staci si len kliknut na url request a v nom na response.
diky....mas pravdu....pouzivam DragonFly(Opera) a tam stacilo v nteworks kliknou na subzalozku 'Response'
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 07. 08. 2015, 14:17:12
Failuje, to znamená ajax vrátí failed?
yes...Failed! ,ktery ma nadefinovany v parametru erorr:
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: rootacek 07. 08. 2015, 14:25:37
Failuje, to znamená ajax vrátí failed?
yes...Failed! ,ktery ma nadefinovany v parametru erorr:

Se starým kódem to funguje, teda jen s tím dumpem? Pokud jo, tak je chyba v tom php kódu.
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 07. 08. 2015, 15:10:34
trochu jsem to upravil podle:
http://php.net/tempnam (http://php.net/tempnam)
Kód: [Vybrat]
$post_data = $_POST['structureSVG'];

 if (!empty($post_data)) {
                            $dir = '/pdf/modelSVG/';
                            $file=tempnam('/pdf/modelSVG', 'model_'.date(Y.m.d).'_').'.svg';
                            $handle = fopen($file, "w");
                            fwrite($handle, $post_data);
                            fclose($handle);
                        }
ajax se uspesne provede, response ze serveru OK, ale zadny soubor se na serveru nevytvori/nezapise
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: Hmmm 07. 08. 2015, 23:20:06
To nie je tak celkom pravda. Vypis php skriptu, ktory spustil ajax mozes vidiet v konzole v networks (chrome). Staci si len kliknut na url request a v nom na response.
Ano ,ale nezískáte tak data pro využití.
To ani nepotrebujem. Potrebujem iba zistit co sa tam nachadza. Je to rovnake ako to vypisat cez alert alebo console.log. Vyuzit tie data uz musi skript.
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: Hmmm 07. 08. 2015, 23:21:45
trochu jsem to upravil podle:
http://php.net/tempnam (http://php.net/tempnam)
Kód: [Vybrat]
$post_data = $_POST['structureSVG'];

 if (!empty($post_data)) {
                            $dir = '/pdf/modelSVG/';
                            $file=tempnam('/pdf/modelSVG', 'model_'.date(Y.m.d).'_').'.svg';
                            $handle = fopen($file, "w");
                            fwrite($handle, $post_data);
                            fclose($handle);
                        }
ajax se uspesne provede, response ze serveru OK, ale zadny soubor se na serveru nevytvori/nezapise
Tak mas zle zapisanu cestu. Ako som uz pisal, pouzi fixnu cestu, nie relativnu, aby si presne vedel kam to ulozi.
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: Lobo 08. 08. 2015, 04:14:50
Ak chces vidiet co ti chodi tam a naspat pouzi Fiddler
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: Hmmm 08. 08. 2015, 08:02:47
Ak chces vidiet co ti chodi tam a naspat pouzi Fiddler
Nemusi. Na to co potrebuje mu rovnako ako Fiddler posluzia developer tools v chrome alebo firefoxe.
Název: Re:AJAX upload a PHP zpracování
Přispěvatel: ZAJDAN 09. 08. 2015, 11:36:23
Tak mas zle zapisanu cestu. Ako som uz pisal, pouzi fixnu cestu, nie relativnu, aby si presne vedel kam to ulozi.

diky zkusil jsem upravit na absolutni, ale stale zadny soubor na serveru nevznikl...
podival jsem se tedy do error.log daneho webu a vidim nekolik chyb...prvni z nich je:

PHP Warning:  tempnam(): open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): (/var/www/www.mujweb.com) in /var/www/www.mujweb.com/pdf/uploadSVG.php

jdu se tedy podivat, kde a jak je nastavena PHP volba pro /tmp