Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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
-
js:
var structureSVG = svgpic.outerHTML;
ajax attribut:
data:'structureSVG',
zkusil jsem si zatím sestrojit php zpracovaní na strane serveru:
$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'
-
A preco si to nevyskusas? Vypis si cez var_dump co sa ti nechadza v POST a budes mat jasnejsie. :)
-
v PHP to bude hodnota attributu data
problem bude v tom ze nevim jak by mel presne vypadat zapis promene do attributu data
var structureSVG = svgpic.outerHTML;
.....
.......
dataType: 'json',
data:{structureSVG:$structureSVG}
?
-
co se týče ajaxu attributu data, tak takto by to mělo být správně:
var structureSVG = svgpic.outerHTML;
........
data:'structureSVG='+structureSVG,
-
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.
-
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
-
ve firefoxu zkus firebug
ten vestaveny debugovaci nastroj jak firefox tak chrome sou prisery
-
vypozoroval jsem že pokud mám v php:
$post_data = $_POST['structureSVG'];
echo '<pre>';
print_r($post_data);
echo '</pre>';
ajax vratí error
-
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š
-
Uz vcera som mu pisal, ze ma vypisat $_POST cez var_dump aby videl co v nom vlastne ma a podla toho to formatoval... :)
-
upresnim to tedy:
js:
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:
<?php
$post_data = $_POST['structureSVG'];
var_dump($post_data);
?>
browser vyhodi Failed!
-
upresnim to tedy:
js:
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:
<?php
$post_data = $_POST['structureSVG'];
var_dump($post_data);
?>
browser vyhodi Failed!
Zkusil bych,
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!'); },
});
-
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
-
tak nic, ze tam je type:'POST' jsem si vsiml hned jak odeslal :) kazdopadne debugger a to co vraci server te zajima..
-
upresnim to tedy:
js:
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:
<?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
-
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
-
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 .done(function( html ) {
alert(html);
});
-
Vypsal se na straně serveru, ale nemůžeš ho získat jinak, než že ho přebereš ajaxem a přes funkci .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:
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 :(
-
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 .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.
-
Vypsal se na straně serveru, ale nemůžeš ho získat jinak, než že ho přebereš ajaxem a přes funkci .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:
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.
-
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?
-
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'
-
Failuje, to znamená ajax vrátí failed?
yes...Failed! ,ktery ma nadefinovany v parametru erorr:
-
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.
-
trochu jsem to upravil podle:
http://php.net/tempnam (http://php.net/tempnam)
$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
-
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.
-
trochu jsem to upravil podle:
http://php.net/tempnam (http://php.net/tempnam)
$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.
-
Ak chces vidiet co ti chodi tam a naspat pouzi Fiddler
-
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.
-
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