PHP sa progres barom

codemaker

Iskusan
Banovan
Poruka
6.514
Uradio sam neku PHP skriptu koja prihvata zahtev za upload fajla od strane klijenta. To radi ok, jedino sto je nezgodno sto ne mogu da nadjem nacina, da se vidi progres dok se fajl uploaduje.
Nista ne mogu da ispisem dok se fajl u celosti ne primi, a to kod korisnika moze da izazove nedoumicu sta se desava ako je fajl koji uploaduje veliki.

Ima li neko ideju kako da to resim na ovaj ili onaj nacin, samo da se vidi sta se otprilike desava? Ima li neko iskustva?
 
To ce najbolje Sale83 da ti kaze da li tako nesto postoji,
a ja ti jedino mogu reci da je na www.uploading.com postojao
takav "preloader" sa tim je oznacavo koliko je fajl veliki i koliko je dosad poslato.
Sad otkako su uradili redizajn ta scripta izgleda ne radi.

Znaci postoji fora, samo je treba naci.
Pitaj na zoni tamo ce ti sigurno reci, posto ovde Sale83 i ne dolazi bas cesto.
pozz
 
Nasao sam taj Mega Upload.
Toliko je zamrseno, da sam na kraju odustao...
Takodje, ima nekioliko sajtova koji to sve nude, a onda se ispostavi da treba toliko silna podesavanja da je postalo besmisleno....
Koristicu PHP kod koji sam uradio, pa cu klijenta upozoriti da ce svakako dobiti poruku o zavrsetku uploada (uspesno ili neuspesno). Prethodno cu mu saopstiti duzinu fajla i estimaciju trajanja uploaada, pa nek ceka...
Ima jos da se na projektu radi i nemam vremena da se bakcem sa progres barom.

Ako je neko implementirao neko PHP resenje, nadam se da ce se javiti, do tada idemo dalje :)
 
loop:
To ce najbolje Sale83 da ti kaze da li tako nesto postoji,
a ja ti jedino mogu reci da je na www.uploading.com postojao
takav "preloader" sa tim je oznacavo koliko je fajl veliki i koliko je dosad poslato.
Sad otkako su uradili redizajn ta scripta izgleda ne radi.

Znaci postoji fora, samo je treba naci.
Pitaj na zoni tamo ce ti sigurno reci, posto ovde Sale83 i ne dolazi bas cesto.
pozz
Kako bese link za zonu? Negde mi se zaturilo...
Mada mislim da je mrka kapa za sada...

Ono na uploading.com, je radjeno u flasu, sto necu da koristim.
 
Obersturmfuehrer:
a moze i tako...ja sam jednom hteo isto da uradim, al sam odustao iz slicnog razloga :)
Da, generalno PHP to i ne moze. Koriste se razni trikovi, koji zauzvrat traze instalaciju te Jave, te nekih drugih stvari, te pacovanje PHP, te da se drzis za levo uvom dok uploadujes ili da stojis na jednoj nozi itd,....
Problem kod PHP varijante je sto, ma sta napisao u skriptu, kad treba da se izvrsava donload (od strane PHP je to download), NISTA se ne moze prikazati dok se ta operacija (streaming) ne zavrsi, tako da ne mogu ni napraviti PHP koji najpre prikaze neki tekst, barem "Upload, sacekajte..." makar staticno, nema nista od toga. Dok se download ne zavrsi, nista drugo ne radi....
Cim PHP oseti da treba da vrsi download, sve drugo postaje nevazno i samo to radi...

PERL vec bi trebalo da moze ali i to nesto kilavo.
ASP moze ali opet komplkiovano do zla boga...

Staces, security issues su postali prava mora.... tako da prakticki treba da "varas" sistem da bi ti dozvolio upload, pri cemu naravno treba jos i proveravati sta stize itd, itd....
 
codemaker:
Da, generalno PHP to i ne moze. Koriste se razni trikovi, koji zauzvrat traze instalaciju te Jave, te nekih drugih stvari, te pacovanje PHP, te da se drzis za levo uvom dok uploadujes ili da stojis na jednoj nozi itd,....
Problem kod PHP varijante je sto, ma sta napisao u skriptu, kad treba da se izvrsava donload (od strane PHP je to download), NISTA se ne moze prikazati dok se ta operacija (streaming) ne zavrsi, tako da ne mogu ni napraviti PHP koji najpre prikaze neki tekst, barem "Upload, sacekajte..." makar staticno, nema nista od toga. Dok se download ne zavrsi, nista drugo ne radi....
Cim PHP oseti da treba da vrsi download, sve drugo postaje nevazno i samo to radi...

PERL vec bi trebalo da moze ali i to nesto kilavo.
ASP moze ali opet komplkiovano do zla boga...

Staces, security issues su postali prava mora.... tako da prakticki treba da "varas" sistem da bi ti dozvolio upload, pri cemu naravno treba jos i proveravati sta stize itd, itd....

Uvek postoji opcija da obavestis Korisnika.
Napravis jedan skriveni layer sa porukom Upload je u toku ili nekom gif animacijom. a dugmetu upload od forme namestis akciju na onClick da prikaze skriveni layer.
Tako ce odma kad neko pritisne upload dugme da mu pokaze poruku da je upload u Toku.
Kad se upload zavrsi automatski se sakriva layer i ispisuje se poruka Uspesno uplodovan fajl..

Recimo Sasvim obican PHP kod da ti docaram to:


upload.php
Kod:
<html>

 <script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}
//-->
</script>
<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="524288">
<fieldset>
  <legend>Ubaci Fajl:</legend>
    <p><b>File:</b> 
    <input type="file" name="upload" />
  </p>
  </fieldset>
<div align="center">
    <input name="dodaj" type="submit" onClick="MM_showHideLayers('Layer1','','show')" value="dodaj" />
  </div>
</form>
<?
if (isset($_POST['dodaj'])) {

//$poruka="Upload je u toku...";
if(move_uploaded_file($_FILES['upload']['tmp_name'], "uploads/".$_FILES['upload']['name'])) {
//echo '<p>Uplodali smo slikicu!</p>';
$poruka="Uspesno ubacen Fajl";
} else {
echo '<p><font color ="red">Nisam uspio uplodat sliku zbog system errora. Sorry!</font></p>';
}
echo $poruka;
}
?>
<div id="Layer1" style="position:absolute; width:200px; height:115px; z-index:1; overflow: hidden; visibility: hidden;">Upload Fajla u Toku...</div>
</html>

Kopiraj kod i snimi ga kako upload.php prebaci na server.
U dir gde ti bude upload.php napravi i folder uploads gde ce ti se uplodovati test fajlovi da vidis kako to mozes docarati sa layerom.

Poz od sale83


To gore ti je jedna opcija:

Druga opcija jeste da probas ovaj progres bar radjen u PHP-u

DEMO:
http://www.modphp.org/upload/
Download:
http://www.modphp.org/viewtopic.php?t=324 - Forum link je tamo !!
Tj ovi linkovi:

Ja sam skino upload-progress-php-5.0.1-patch.tar.gz !!!

http://www.modphp.org/src/upload-progress-php-4.3.6-patch.tar.gz

http://www.modphp.org/src/upload-progress-php-5.0.1-patch.tar.gz

Poz od sale83
 
Sale, hvala na odgovoru.
Sve ono oko direktorija, oko poziva i oko PHP koda mi je jasno i to vec neko vreme funkcionise.
jedino mi je bio problem ovo sa progres barom.

Koristim iskljucivio IIS 6 (Windows 2003 server) i PHP je vec instalisan.
Kako sam shvatio, pachevi koje pominjes su za verziju kad se radi pod Apache serverom?
Nije mi jasno sta i kako da patchujem, jer imam neki izvrsni EXE fajl, kojim automatski instalisem i konfigurisem osnovno za PHP, a u uputstvu pise da se patchuje PHP a onda reinstalise? Ja nemam sta da patchujem kad mi je instalacion EXE jedino sto ima, sto za instalaciju sto za reinstalaciju.

Malo mi sve to sa patchevima azvuci komplikovano, i mislim da cu odustati,osim ako ima neko jednostavno resenje.

Primeri koji psotoje na forumu, predpostavljaju da se krece (korisnicki deo) iz PHP-a a ja krecem iz HTM-a, tako da i tu bih morao da previse "gimnasiticiram:

Osim toga, mislim da cu ici na prvu varijantu, imacu jedno dugme, koje ce biti malo vece, ustvari GIF, a izmenicu ga onog momenta kada korisnik klinke da salje fajl, prikazivace se ustvari drugi GIF itd...

U svakom slucaju, hvala na odgovoru.

(Ono sa MegaUpload, je veoma ruzno uradjeno, pa mi i to ne odgovara, na stranu to sto je komplikovano podesavanje do zla boga.

Pozdrav
 

Back
Top