[php]Upload status balk

Pagina: 1
Acties:
  • 110 views sinds 30-01-2008
  • Reageer

Onderwerpen


Verwijderd

Topicstarter
Heb een upload scripje gemaakt zodat bezoekers van een website een file kunnen uploaden van Max 5MB.

Dit script werkt verders goed.

Maar ik zit met 1 nadeel waar ik 123 geen oplossing voor weet.

Als men aan het uplaoden is en de bezoeker is ongeduldig wil hij wel eens nogmaals op upload klikken. Opzich niet erg echter er wordt ook iets in een database geschreven en dat gebeurd dan nogeens.

Nu had ik gedacht om een progress balk te maken, maarja handig gezegd als gedaan. Geen idee dus hoe dat werkt.
Een 2de idee was een stuk simpeler, tijdens de upload alle buttons uitschakelen, dit lijkt me wel te maken echter hoe?! Heb gezocht op de bekende websites maar kom niet echt veel verder.

Iemand een tip hoe ik op de meest simpele manier kan maken? (liefst met progress balk)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Over de progressbalk is laatst nog een topic geweest (erg makkelijk te vinden met de search trouwens [rml][ php / javascript] Voortgang van upload *[/rml] )

Dat disablen kun je heel simpel met een stukje javascript doen (in de onsubmit)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • MasterM
  • Registratie: Februari 2001
  • Laatst online: 23:35
nah een progress balk lijkt me onmogelijk in i.e.... maar ik ben ook niet echt ervaren ofzo... maar i.e. heeft wel zo'n blauw balk onderaan waarnaar je kan verwijzen... en je zou een pop-upje kunnen laten kunnen komen met gewon een snel repeterend gifje.. zodat mensen weten dat er 'iets' gebeurt :P het is best vals... maar de meeste mensen zullen w8ten...
duz of maak een nep laadbalk (snel repeterend dus bijv. 3 puntjes die 'laden')
of verwijs naar de blauwebalk in onderaan in de status balk van i.e.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kijk eens bij www.dundas.com. Die hebben een gratis upload componentje MET progress bar. Gezien je niet vermeld of het ASP/PHP of whatever is... PHP dus (titel) :)

En knoppen disablen doe je met myKnop.disabled= true; in javascript.... Simple...

/edit/
linkje http://www.dundas.com/oth...undasUpload&body=body.htm

Het KAN dus wel :)

[ Voor 23% gewijzigd door RobIII op 20-02-2003 23:44 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • wim__k
  • Registratie: Februari 2003
  • Laatst online: 21-11-2020
net even een manier uitgedacht, nooit geprobeerd dus ik weet absoluut niet of het gaat werken.

zodra de gebruiker heeft gekozen voor het uploaden van het bestand wordt er een volgende pagina geopened met hierin 2 frames die 2 verschillende PHP script oproepen...pagina 1 zorgt voor de daadwerkelijke upload. Pagina 2 wordt via bijvoorbeeld een meta-refresh elke 5 seconden herladen en zal de grote van het tot nu geuploade bestand controleren tegenover de content-length van het totale te uploaden bestand. Deze zal dus ook de progress-bar weergeven...

het enige problemen die ik zo snel kan verzinnen en nodig zijn om dit te realiseren:

is het mogelijk om VOOR een file upload de bestandgrote te achterhalen?
is het mogelijk om bij het uploaden van een bestand de tmp naam te krijgen die PHP gebruikt?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

wim_k schreef op 21 februari 2003 @ 00:00:
net even een manier uitgedacht, nooit geprobeerd dus ik weet absoluut niet of het gaat werken.

zodra de gebruiker heeft gekozen voor het uploaden van het bestand wordt er een volgende pagina geopened met hierin 2 frames die 2 verschillende PHP script oproepen...pagina 1 zorgt voor de daadwerkelijke upload. Pagina 2 wordt via bijvoorbeeld een meta-refresh elke 5 seconden herladen en zal de grote van het tot nu geuploade bestand controleren tegenover de content-length van het totale te uploaden bestand. Deze zal dus ook de progress-bar weergeven...

het enige problemen die ik zo snel kan verzinnen en nodig zijn om dit te realiseren:

is het mogelijk om VOOR een file upload de bestandgrote te achterhalen?
is het mogelijk om bij het uploaden van een bestand de tmp naam te krijgen die PHP gebruikt?

Het id is leuk, maar je weberver handeld het uploaden voor je af. PHP 'krijgt' het pas waneer het helemaal binnen is. Het is dus niet zomaar mogenlijk om de hoeveelheid tot nu toe op te vragen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • wim__k
  • Registratie: Februari 2003
  • Laatst online: 21-11-2020
ja idd, maar de webserver schrijft die file wel ergens naar toe...en DAT kan je wel controleren (met het 5 sec refresh php script), als je de bestandnaam zou weten. Dat is ook eigenlijk het enige zwakke punt wat ik kan verzinnen op dit moment...(mhja het is laat) ;)

Acties:
  • 0 Henk 'm!

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 21:55

me1299

$ondertitel

wim_k schreef op 21 February 2003 @ 00:14:
ja idd, maar de webserver schrijft die file wel ergens naar toe...en DAT kan je wel controleren (met het 5 sec refresh php script), als je de bestandnaam zou weten. Dat is ook eigenlijk het enige zwakke punt wat ik kan verzinnen op dit moment...(mhja het is laat) ;)
je kan misschien de directory listen waar het naar geupload wordt en dan kijken welk bestand de nieuwste datum heeft.

Maar volgens mij weet je niet hoe groot het bestand gaat worden. Tenzij het zo is dat hij de volledige ruimte reserveerd zoals bij sommige andere programma's het geval is. Maar dat zou ik niet kunnen voorspellen.

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

wim_k schreef op 21 February 2003 @ 00:14:
ja idd, maar de webserver schrijft die file wel ergens naar toe...en DAT kan je wel controleren (met het 5 sec refresh php script), als je de bestandnaam zou weten. Dat is ook eigenlijk het enige zwakke punt wat ik kan verzinnen op dit moment...(mhja het is laat) ;)

Nee, want het process start pas op het moment dat de request compleet binnen is, bij mijn weten iig.

Naast het feit dat je de bestandsnaam niet weet :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou de bestandsnaam weet je wel.
Voordat je upload moet je "bladeren" naar de file op je HD, als je dan op upload klikt wordt ook gekeken wat voor file het is, als het namelijk geen zip of rar is krijgt men een error.
Dus de bestandnaam is bekend voordat ie begint te uploaden.

Acties:
  • 0 Henk 'm!

  • ET
  • Registratie: Mei 2000
  • Laatst online: 10-07 14:05

ET

Verwijderd schreef op 21 februari 2003 @ 12:44:
Nou de bestandsnaam weet je wel.
Voordat je upload moet je "bladeren" naar de file op je HD, als je dan op upload klikt wordt ook gekeken wat voor file het is, als het namelijk geen zip of rar is krijgt men een error.
Dus de bestandnaam is bekend voordat ie begint te uploaden.
Dat is dus de naam die het bestand heeft op je eigen machine, en niet de naam van het bestand op de server, dus hier heb je niks aan.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zie de logica niet in die beredenering....

Als je bestand "a" upload dan heet dat na het uploaden toch nog steeds "a"
De naam wordt toch niet veranderd als men gaat uploaden, dus weet je ook hoe het bestand heet op de server. Of zieik dit verkeerd ?!?!

Acties:
  • 0 Henk 'm!

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 12-09 14:07

BierPul

2 koffie graag

Wel ff checken of de de max upload in de ini wel 5mb is.

* BierPul was dat ook vergeten en dan maar zoeken waarom een 3mb file niet doorkomt :P

Ja man


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier


Ja...

Wat als er in 10 processen 10 mensen tegelijk een bestand uploaden met de naam 'a' ? Dan moet dat toch niet 10x dezelfde file worden??

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou dat is geen probleem, voor elke gebruiker wordt een map met zijn gebruikersnaam aangemaakt en daarin komt het bestand te staan.
Bij mij dus en jou:
/Uploads/B3rt/a
/Uploads/ACM/a

De gebruikersnaam is uniek, deze kun je maar 1 keer aanmaken, dus geen probleem dus..

Acties:
  • 0 Henk 'm!

  • RupS
  • Registratie: Februari 2001
  • Laatst online: 17-07 14:45
Verwijderd schreef op 21 februari 2003 @ 15:00:
Nou dat is geen probleem, voor elke gebruiker wordt een map met zijn gebruikersnaam aangemaakt en daarin komt het bestand te staan.
Bij mij dus en jou:
/Uploads/B3rt/a
/Uploads/ACM/a

De gebruikersnaam is uniek, deze kun je maar 1 keer aanmaken, dus geen probleem dus..
Volgens mij mis je nu een stap, namenlijk de upload zelf...
Die gaat naar een in php.ini gespecificeerde tmp map. En daar staat dus een tijdelijk bestand met een random naam, omdat: zie ACM....

Hoe je het daarna opslaat doet er niet toe, want het gaat hier om iets uitlezen _tijdens_ het uploaden, wat dus, volgens mij, in PHP gewoon niet kan ...
Maar eigenlijk was dat een post of wat geleden al duidelijk ... :)

[ Voor 6% gewijzigd door RupS op 21-02-2003 16:04 ]


Acties:
  • 0 Henk 'm!

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
maar hoe werkt de statusbalk van explorer dan?.. die laat toch een indicatie van de voortgang zien :?

Acties:
  • 0 Henk 'm!

Verwijderd

IE is natuurlijk Client Side en dus direct "aanpasbaar" om het zo maar ff te noemen. Ofwel na elke actie kan het dus die progess bar "updaten".

Dus bijv. zoeken naar het domein, 3 blokjes erbij na voltooing, na het vinden van het domein, weer 3 blokjes erbij na voltooing. Enz. Totdat het dus de gehele pagina heeft geladen.

In tegenstelling dus van PHP, wat dit in dit geval vrijwel niet kan. Of het moet iets zijn wat slechts een "simulatie" is en dus niet de werkelijke progessie weergeeft...

[ Voor 32% gewijzigd door Verwijderd op 21-02-2003 17:16 . Reden: Toevoeging ]


Acties:
  • 0 Henk 'm!

  • wim__k
  • Registratie: Februari 2003
  • Laatst online: 21-11-2020
Om mijn verhaaltje nog even duidelijker te maken. Een klein tekeningetje en een iets duidelijker (hoop ik) verhaal.


code:
1
2
3
4
5
6
7
8
                     upload_file.php
                    /
upload_file.php -- <
                    \
                     indicator.php---+
                          ^          |
                          |          |
                          +---5 sec--+


Bij upload_file.php worden de gegevens voor de upload opgegeven in een normaal file form. Daarna zal dmv een klik op submitbutton de gegevens worden gepost en zal er een 2de frame worden geladen (indicator.php) die zich om de zoveel tijd refreshed. Dit php-script zal de file in de temp directory moeten controleren op bestandsgroote (die natuurlijk groter wordt sinds deze wordt geupload door upload_file.php).
De enige 2 gegevens die indicator.php dus nodig zal hebben is de uiteindelijke grote van het bestand en de tmp filename om de grote van het bestand op dat moment te achterhalen.
En daar zit waarschijnlijk ook het probleem, zoals velen al hebben opgemerkt. Beide waarden Zijn waarschijnlijk niet te achterhalen met php. Nu zou je de geuploade bestandgroote nog kunnen checken door het verschil van groote van alle bestanden in de tmp directory te vergelijken tijdens de upload met wat het in het begin van de upload was. Maar dan bestaat het probleem van de orginele bestandgroote nog steeds..Dus een progress bar die het geuploade deel in KB's laat zien is mischien nog mogelijk. Alleen krijg je een probleem als meerdere personen tegelijk bezig zijn in de upload tmp directory.

Met andere woorden, het is volgens mij niet goed echt mogelijk met php en apache tenzij er apache module voor is....

Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
okeej, en wat als twee mensen tegelijkertijd uploaden...?

Acties:
  • 0 Henk 'm!

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
Dus een progress bar die het geuploade deel in KB's laat zien is mischien nog mogelijk. Alleen krijg je een probleem als meerdere personen tegelijk bezig zijn in de upload tmp directory.
dat stipte wim dus zelf al aan.. dat gaat fout :)

Acties:
  • 0 Henk 'm!

  • atacama
  • Registratie: Februari 2003
  • Laatst online: 16-09 11:19
ik weet dat bij gallery iets zit dat verschijnt zolang er nog word geupload... misschien dat je daar wat mee kan als je t script bestudeert/ziet?
link naar gallery is: http://gallery.sourceforge.net/

-= Its dry in the dessert =- So what??


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 19:05
Zoals Atacama al zegt: gebruik een gif met een loop. Maak dan zoiets als de IE download scherm ofzo (dus die bestandjes die van mapje wisselen). Bij eProject gebruiken ze zoiets ook. Dit is dan wel in ASP gemaakt, maar het principe is hetzelfde: je toont een schermpje met daarop een gif of iets, en zodra je klaar bent met uploaden dan toon gaat het scherm weer weg.

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Atacama schreef op 21 februari 2003 @ 20:34:
ik weet dat bij gallery iets zit dat verschijnt zolang er nog word geupload... misschien dat je daar wat mee kan als je t script bestudeert/ziet?
link naar gallery is: http://gallery.sourceforge.net/
Deze openen bij het submitten van het form een nieuw window met een animated gifje, wanneer de hoofdpagina is geladen, wordt de popup weer ge-closed..

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 05-09 07:32

Willem2

Ω is futile

ik denk dat wim een eind in de goede richting zit. Uiteindelijke bestandsgrootte kun je iig met MSIE achterhalen. Is dus ok voor 90~95% van de gebruikers op dit moment.

PHP kan je /tmp inlezen, dus ipv de volledige bytecount van die dir te bekijken, kun je ook kijken naar de timestamp van een file die eruit ziet als 'php%' en overeenkomt met de submit tijd. Als er dan 2 mensen zijn die binnen 1 seconde een file submitten, heb je idd nog steeds een probleem. Maar ik denk dat het voor 99% van de tijd dan wel gaat werken...

Ik ben aan het coden; kom hier op terug als het ergens op begint te lijken! 8-)

en nee, ik houd niet van voetbal... :)


Acties:
  • 0 Henk 'm!

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
hmm .. klinkt goed inderdaad... ben benieuwd! :)

Acties:
  • 0 Henk 'm!

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 21:55

me1299

$ondertitel

Ik heb nog een site die ook een progressie erin heeft zitten:

http://www.web2ftp.com

Dus het is iig mogelijk ;)

Ik moet het binnenkort ook voor m'n werk gaan kijken in hoeverre het mogelijk is, dus mocht ik wat werkends hebben dan post ik het hier wel.

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


Acties:
  • 0 Henk 'm!

Verwijderd

Misschien een idee om de ftp functies van PHP te gebruiken ipv dmv een submit in een HTTP formulier?

Acties:
  • 0 Henk 'm!

Verwijderd

Alleen krijg je een probleem als meerdere personen tegelijk bezig zijn in de upload tmp directory.
Dat is inderdaad waar.
Daarnaast heb je ook erg veel connecties lopen door dat refreshen.
Erg vervelend voor 'drukke' webservers.
Met andere woorden, het is volgens mij niet goed echt mogelijk met php en apache tenzij er apache module voor is....
Wat is dat nou, natuurlijk kan het wel (denk ik), alleen niet met php.

Als het goed is kan je ook een java-applet schrijven, waar je het bestand selecteerd.
Dan laat je dat appletje een http verbinding op bouwen, naar je script en hij gaat vrolijk (of niet) het bestand posten.
Je kan dat gewoon controleren hoeveel er geupload is en aan de hand daarvan niets doen (of een progressbar laten lopen ;) ).

Het zou natuurlijk kunnen dat je geen verbinding mag openen ivm beveiliging, maar dat lijkt me toch wel een beetje onwaarschijnlijk.

Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Verwijderd schreef op 13 April 2003 @ 16:56:
Misschien een idee om de ftp functies van PHP te gebruiken ipv dmv een submit in een HTTP formulier?
Anders schop je ff een topic van bijna 4 maanden :D

Ouwe }:O

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 13 april 2003 @ 16:56:
Misschien een idee om de ftp functies van PHP te gebruiken ipv dmv een submit in een HTTP formulier?
Nee.
Het probleem is:
1: php wordt pas aangeroepen als het bestand in zijn *geheel* binnen is.
2: php zijn werk op de server doet, en tijdens zijn werk geen signalen terug kan geven (nou jah, flush() kan wel, maar dan zit je nog met de browser).
Pagina: 1