Ahoj, jak vlastně funguje upload statusbar? Asi víte co myslím - člověk nahrává nějaký soubor na web a během nahrávání se mu zobrazuje, kolik ještě zbývá uploadnout, rychlost atd... Našel jsem několik kompletních kódů, ale většinou v nich byl takovej bordel, že jsem je naprosto nechápal. Tak se ptám tady, jak to vlastně funguje... Asi to bude nějak spojený PHP s JavaScriptem (AJAXem), ale naprosto netušim jak a jestli to vůbec jde bez zásahů na serveru (žádná nová extenze pro PHP, žádná úprava php.ini...)?
Myslíš asi progressbar - a www.google.com to určitě najde.
=MyFlower=
Myslim, ze v tom jen slozitosti hledas a pritom tam nejsou..
Pres AJAX si stahnes ze serveru informaci, kolik dat uz bylo nahráno, a informaci, jak nahrávaný soubor bude ve výsledku velký. A z techto informaci uz treba jen vypises % hotova.
Pripadne muzes zkusit odhadnou cas, pokud (napr.) si v JS ulozis cas zacatku uploadu a budes pocitat vteriny (nebo stahovat navic time() ze serveru..)...
Uprava ini mi prijde nemyslitelna - co bys upravoval? Jedine snad takove veci, ktere muzes chtit zmenit pro jakykoliv jiny upload (napr upload_max_filesize ..)
Ale mozna ze existuji i nejaka PHP rozsireni, ktere tyto akce zjednodusuji (treba rovnou vrati %, ktera uz jsou nahrána atd..) - ale tady fakt netusim..
Lama:
díky, progressbar vrací mnohem hezčí výsledky :-)
Freeze:
super, teoreticky jsem to zvládnul, už to jenom provést prakticky :-)
Neviděl čirou náhodou někdo tutoriál? Já když narazim na nějakej kompletní skript, tak je to většinou nějakej velkej "eye-candy" project, kterej má stovky řádků kódu, kterej je pro mě zbytečnej, případně vyžaduje doinstalovat moduly PHP a nebo to neni jenom PHP+Ajax (hlavně CGI)... Moc by mi pomohl nějakej tutoriál, případně nějakej malej hotovej projekt =D
Snad toho nechci moc, předem moc dík!
Malý, hotový... http://www.webappers.com/2007/07/31/webappers-simple-ajax-progress-bar-with-css/
Ale řekl bych, že je to snaha neúměrná výsledku. :-)
Další zdroje http://www.google.com/search?num=20&hl=cs&q=javascript+progressbar&btnG=Hledat&lr=
Asi tě zklamu. Dneska jsem se zájmem zkoušel najít jak by se to dalo provést čistě pomocí PHP + Ajax, ale zjistil jsem, že bohužel tato technologie, respektive objekt XMLHttpRequest, nedovoluje zjistit počet odeslaných dat. Zjišťování pomocí jiného PHP skriptu nepřipadá v úvahu, protože se soubor nejdříve uploaduje do tempu pod nějakým hashem.
Co jsem zatím viděl funkční byl upload pomocí flash objektu, patrně je action script mocnější než javascript ;)
Škoda, že vývojáři nedali do XMLHttpRequestu počet odeslaných přes socket, to by potom byla úplná hračka...
Každopádně kdyby někdo přišel na něco jiného tak se pochlubte, sám jsem zvědavý.
Lama:
Ráno na to kouknu, nechám si to jako překvápko :-)
Vojta:
Bohužel k podobným výsledkům jsem se dopídil taky, ale prý existuje od PHP 5.2.x nějaký "file upload hooks", se kterejma se dá pracovat, ale nikde jsem toho nenašel moc kloudnýho...
Lama:
Neodolal jsem a kouknul se na to.. Bohužel tohle už jsem viděl taky, je to jeden z mnoha a musim uznat, že vypadá moc hezky, ale není to upload statusbar - sice jsem ho někde viděl nasazený, ale zase na tom serveru běžela nějaká modifikace PHP, což mi neni moc platný. Ale i tak moc díky za snahu =D
=Vojta=
Jenomze tobe nejde o to, abys zjistoval v xmlhttprequestu odeslana data. Ty se pres ajax budes dotazovat na server, kolik uz jich dorazilo (budes merit filesize v tmp)..
(Jedine, nad cim ted uvazuju, jak zjistit nazev tmp uz v prubehu uploadu..)
"pomocí flash objektu" - nikdo nerekl, ze by to neslo.. Jen JS povazuji za standardni soucast prohlizecu, zatimco AS ani tak ne:)
Tak jsem zkusil i hledat.. nejzajimaveji vypada asi toto:
http://blog.joshuaeichorn.com/archives/2006/03/14/php-ajax-file-upload-progress-meter-updates/
zadne extensions to nevyzaduje (pouze k zobrazeni rychlosti ..)
Freeze:
dík, ale tohle je fakt naschvál - mam stáhnout nějaký "PAFUPMU" a jediná stránka, na který jsem to našel mi vypisuje DISABLED :-)
Teď jsem bez nějakýho většího rozmyslu zkoušel zjišťovat velikost toho dočasnýho souboru. Problém je hned ve dvou věcech - a) trvá skriptu dlouho, než mi řekne, název toho dočasnýho souboru - nevim proč, ale první přemejší tak 5 sekund a teprve potom mi sdělí název, ale hlavně b) mi to píše pořád stejnou velikost souboru. Tzn. soubor se zapíše a až do smazání má pořád stejnou velikost, což už nechápu vůbec.
=MyFlower=
Proc zjistuje nazev tak dlouho fakt netusim..
Ale problem s velikoti bude v tom, ze vysledek filesize() se cachuje .. ( musis pouzivat clearstatcache()..
Tak jsem to zkoušel s clearstatcache() a vypadá to pořád stejně... Asi to na pár dnů nechám a pak se k tomu vrátim, to mi dost často pomáhá. Všem moc dík!