Autor | Zpráva | ||
---|---|---|---|
Mara Profil * |
#1 · Zasláno: 26. 8. 2008, 23:27:17
Čao, potřebuji help, mám formulář
<form method="post" enctype="multipart/form-data" name="form"> <label>Vlož obrázek:</label><br /> <input name="zdroj" type="file" size="20" onchange="javascript:ftp_source();"> </form> a chtěl bych zjistit úplnou cestu k vybranému souboru přes js. Pomocí document.form.zdroj.value; mi to akorát zjistí název souboru. Šlo by to přes $_FILES v php, ale to by znamenalo nutný refresh stránky, a to já nechci, potřebuji to zjistit "za pochodu". Díky |
||
Chamurappi Profil |
#2 · Zasláno: 26. 8. 2008, 23:42:41 · Upravil/a: Chamurappi
Reaguji na Maru:
„Pomocí document.form.zdroj.value; mi to akorát zjistí název souboru“ To vrací v Explorerech celou cestu, jinde ne, pokud vím. „Šlo by to přes $_FILES v php“ To vrací v Explorerech celou cestu, jinde ne, pokud vím. Příští verze Exploreru bude také při výchozím nastavení pracovat jen se samotným jménem souboru bez cesty. Ochrana soukromí je neúprosná. „ale to by znamenalo nutný refresh stránky, a to já nechci“ Element <form> může mít target mířící na <iframe>. |
||
Mara Profil * |
#3 · Zasláno: 27. 8. 2008, 10:22:51
No myslel jsem že existuje nějaký jednoduchý příkaz, který by zjistil úplnou cestu ve všech prohlížečích.
$_FILES vrací úplnou cestu ve všech prohlížečích, vždyť php je serverový jazyk. Iframe bych použil nerad, už jen kvůli validitě, to bych musel všude měnit doctype:( |
||
peta Profil |
#4 · Zasláno: 27. 8. 2008, 10:42:15 · Upravil/a: peta
Mara
'chtěl bych zjistit úplnou cestu k vybranému souboru přes js' Javascript neumi pracovat se soubory, javascript je jazyk spousteny www prohlizecem. To je zaklad. www prohlizec ti nesmi dovolit pracovat se soubory, jinak by mohlo dojit k jejich poskytnutim cizi osobe. Hodne by to vadilo u bankovnich kont. www prohlizec sam o sobe neumi prohlizet soubory na serveru. K tomu slouzi programy na serveru urcene, proto te odkazuji na PHP $files. Existuje jediny zpusob, jak otevrit soubor na aktualnim pocitaci a to je MS ActiveX. Komunikovat s tim muzes jen ve www prohlizeci Explorer. A nevim, co to presne umi, ale dostane se to k souborum a prenasi to cervi tam a zpet. Takze IE nepouzivam. Vyjimecne na windows.update, coz dela totez se soubory. Javascriptem muzes pouze zprostredkovat komunikaci mezi tvym PHP programem, ktery umi zjistit informace o souboru a www prohlizecem. Jediny zpusob, jak muze javascript neco delat ze souborem je, ze si jej otevre, pokud vi nazev. Otevrit si ho muze bud do aktualni stranky nebo do frame. Ve frame si muzes zjistit pak nektere informace, jako delku html kodu, url=tentoram.location.href a pod. Jenze url si nepotrebujes zjistovat, kdyz ji musis do IFRAME href=url zadat. Zprostredkovani = Ajaxove metody zde nekolik tipu na ajax http://www.volny.cz/peter.mlich/www.htm#mssub16 jinak google.com ajax simple example Neni treba refreshovat stranku, muzes do ni pridat tag script, iframe s jinou strankou a pod. |
||
Chamurappi Profil |
#5 · Zasláno: 27. 8. 2008, 11:30:25
Reaguji na Maru:
„$_FILES vrací úplnou cestu ve všech prohlížečích, vždyť php je serverový jazyk.“ Jenže serverový jazyk ví o souborech jen to, co mu pošle prohlížeč. Ten mu posílá POSTem hlavičku: Content-Disposition: form-data; name="jméno-políčka"; filename="jméno-souboru.přípona" „Iframe bych použil nerad, už jen kvůli validitě, to bych musel všude měnit doctype:(“ Jestli je tebou uvedený kus kódu validní: 1) Máš tam <br />, ale zároveň <input> bez lomítka => deklaruješ HTML. 2) Máš tam <label> => deklaruješ HTML 4. 3) Uvádíš atribut name na <form>u => deklaruješ HTML 4.01. 4) <label> a <input> neobaluješ blokovým elementem => deklaruješ HTML 4.01 Transitional. V HTML 4.01 Transitional je <iframe> dovolený. Navíc validita není důležitá, <iframe> spolehlivě funguje při jakémkoliv <!doctype> a vyhýbat se mu jen kvůli nemyslícím byrokratům z konsorcia není zrovna moudré. Ty se mu ovšem vyhneš hlavně kvůli tomu, že problém s cestami uploadovaných souborů nevyřeší. Reaguji na peta: „www prohlizec sam o sobe neumi prohlizet soubory na serveru.“ Fascinující. „Existuje jediny zpusob, jak otevrit soubor na aktualnim pocitaci a to je MS ActiveX“ Ukaž. „Vyjimecne na windows.update, coz dela totez se soubory.“ Důvěryhodné ActiveX se spouští s vyššími oprávněními, stejně jako v Mozille různá rozšíření. Pokud v prohlížečích funguje něco víc, než by mělo, je to bezpečnostní díra, na kterou nelze moc spoléhat, takže ji nemá smysl zmiňovat. |
||
Mara Profil * |
#6 · Zasláno: 27. 8. 2008, 12:38:58
No ajax jsem už zkoušel, funguje, vloží mi do již načtené stránky soubor ftp.php, a to bez refreshe, dokonce jede v IE i v FF a Opeře. Když mám třeba v ftp.php echo "něco"; tak se to provede i bez aktualizace. Ale to $_FILES prostě ne. Asi proto, že se neprovede $_POST z toho formuláře.
function ftp_source() { var source = document.form.zdroj.value; if (source != 0) { if (window.ActiveXObject) { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } else { httpRequest = new XMLHttpRequest(); } httpRequest.open("GET", "ftp.php?source="+source, true); httpRequest.onreadystatechange= function () {processRequest(); } ; httpRequest.send(null); } else { document.getElementById("ukazka").innerHTML = ""; } } function processRequest() { if (httpRequest.readyState == 4) { if(httpRequest.status == 200) { var mistoZobrazeni = document.getElementById("ukazka"); mistoZobrazeni.innerHTML = httpRequest.responseText; } else { alert("Chyba pri nacitani stanky " + httpRequest.status +":"+ httpRequest.statusText); } } } |
||
Chamurappi Profil |
#7 · Zasláno: 27. 8. 2008, 13:21:08
Reaguji na Maru:
XMLHttpRequestem můžeš nasimulovat i odeslání POSTem, ale nikdy nemůžeš poslat obsah souboru z návštěvníkova počítače, to je výsada skutečných formulářů. |
||
Mara Profil * |
#8 · Zasláno: 27. 8. 2008, 13:30:42
Reaguji na Chamurappiho:
Pokud by to pomohlo k tomu, abych pak jakkoli zjistil tu cestu k souboru, třeba $_FILES, tak bych rád věděl, jak to pls nasimulovat. Mi jde jen o tu cestu, samotný přenos zprostředkuju přes ftp v phpéčku. |
||
Chamurappi Profil |
#9 · Zasláno: 27. 8. 2008, 13:43:13
Reaguji na Maru:
Pokud ti prohlížeč nechce cestu říct, tak ti ji neřekne. Tečka. Neexistuje žádná tajná value <input>u, kterou by dokázali vyloupnout jen místní šamani. POST lze nasimulovat tak, že vygeneruješ celý požadavek ve formátu „multipart/form-data“ přesně tak, jak ho posílá prohlížeč. Sestavíš si ho písmenko po písmenku sám JavaScriptem, vyplníš si názvy políček, vyplníš si i hodnoty. Když ti ale v JS nejde zjistit cesta k souboru, nemůžeš ji vepsat do POSTovaného požadavku. |
||
peta Profil |
#10 · Zasláno: 27. 8. 2008, 16:09:36
if (ajax.newRequest()!=null)
{ ajax.sendGet = function(url,args,func) { ajax.func = func; var z = ajax.newRequest(); if (args!=="") {url+= ((url.indexOf("?")>-1)?"&":"?") + args;} z.open("GET",url,true); z.send(null); }; ajax.sendPost = function(url,args,func) { ajax.func = func; var z = ajax.newRequest(); z.open("POST",url,true); z.setRequestHeader('Content-type','application/x-www-form-urlencoded' ); // z.setRequestHeader('Content-type','application/x-www-form-urlencode d; charset=UTF-8'); //+charset z.send(args); }; predpokladam, ze si s tim poradis a uprovis si svuj GET na POST. Jenze ono se to vzdy odesila. Jenom moderni prohlizece to neukazuji ve status. Mam pocit, ale ze to jde nekde zapnout, aby i to ukazoval. |
||
Mara Profil * |
#11 · Zasláno: 27. 8. 2008, 23:15:18
Reaguji na petu:
ok díky za kód, zkusím to s tím POSTem. V Opeře jsem projel celé nastavení ale nikde nebylo zobrazování statusu. |
||
Chamurappi Profil |
#12 · Zasláno: 27. 8. 2008, 23:22:49
Reaguji na Maru:
To by mě zajímalo, co vyplníš do proměnné „args“. Protože petův kód sám o sobě nic nedělá, jen posílá vstupy přes HTTP. Samotná metoda POST ti žádná zázračná data nevyčaruje. Už sis ověřil, že prohlížeče (vyjma Exploreru) cestu neposílají na server? Že ji tedy nemůžeš zjistit ani v PHP? |
||
ninja Profil |
#13 · Zasláno: 27. 8. 2008, 23:46:22 · Upravil/a: ninja
Mara: Mohu se zeptat k cemu ti je vlastne dobre vedet, jestli soubor "fotka.jpg" ma v "C:\obrazky", nebo "D:\moje\fotky\nahata-pritelkyne\fotka.jpg" a hlavne proc by ti to mel uzivatel sdelovat?
|
||
Mara Profil * |
#14 · Zasláno: 28. 8. 2008, 09:47:02
přes $_files mi to vyhodí ve všech prohlížečích to samé - pole s názvem $file:
$file = $_FILES['file']; a pro mě je důležitá tahleta část pole: $file[tmp_name]; ta mi předává cestu k dočasnému souboru, který se vytvořil (asi) při výběru obrázku v prohlížeči. Tu potřebuji abych při přenosu na server věděl, který soubor a odkud vlastně mám uploadovat. Takže se omlouvám všem za způsobené zmatky, myslel jsem adresu temporary souboru, a né toho opravdového. |
||
Časová prodleva: 16 let
|
0