[php] Bestanden Upload Progress Indicator

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 21:11
Weet toevallig iemand een goede php upload progress indicator die niet werkt met PERL of waarbij php.ini moet worden aangepast?

Liefst zo standaard mogelijk.

Ik heb mega Upload geprobeerd maar hiervoor moet je helaas CGI ondersteuning voor hebben. Bij andere moet je php.ini aanpassen en speciale php extension's installeren.

De bedoeling is dat wanneer je een zipfile (van 20 tot 100 MB) upload (dmv een standaard html formpje) je een popup krijgt met een progress indicator waarin je kunt zien hoe ver je upload al is.

[edit]
Is dit eigenlijk wel mogelijk met standaard php? Ik las op een andere website gevonden via google dat php je geen toegang geeft tot het bestand voordat deze helemaal is geupload.

[ Voor 16% gewijzigd door GewoonNico op 30-10-2004 14:00 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Is dit eigenlijk wel mogelijk met standaard php?
Nee, het php script wordt pas gestart als het bestand helemaal binnen is. Apache bepaald dit. Misschien zou je wel met een cronjob-script kunnen kijken of er in de Apache upload map al een bestandje staat en hoe groot dit is. Dat moet je echter wel mogen en vaak mag dit niet op shared hosts.

Misschien een cliënt side oplossing zoeken?

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 21:12

Tux

In een popup valt dit volgens mij best te realiseren. Je moet zorgen dat de popup zich om de zoveel seconden herlaadt en het script moet ongeveer het volgende doen:

popup.php?tmp_name=...&size=... (zo moet het script dan aangeroepen worden)

de $_FILES array heeft namelijk de items tmp_name (de locatie waar het bestand tijdelijk opgeslagen wordt) en size (het formaat in bytes van het bestand).

Dan is het dus mogelijk om bij elke aanroep de filesize van het temp bestand op te vragen en te vergelijken met de opgegeven size. Hierdoor kan je dan een percentage uitrekenen en bijvoorbeeld een progress indicator maken.

[edit]
Als ik de post van djluc lees, blijkt het dus niet te kunnen.

[ Voor 6% gewijzigd door Tux op 30-10-2004 14:05 ]

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

Verwijderd

Dit is niet op te lossen met php, de enige oplossing die ik ken is jupload. PHP is gewoon serverside, en JavaScript is te dicht getimmerd om dit soort dingen weer te geven. Daarom kom je uit bij Java.

[ Voor 3% gewijzigd door Verwijderd op 30-10-2004 14:07 . Reden: Verkeede url ]


Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 21:11
Jupload heb ik ook geprobeerd. Werkt goed, alleen die vervelende security warning zit me weer dwars.

Als je wist wat de TMP filename van te voren wordt dan is het misschien wel mogelijk...

Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
Tux schreef op 30 oktober 2004 @ 14:04:
de $_FILES array heeft namelijk de items tmp_name (de locatie waar het bestand tijdelijk opgeslagen wordt) en size (het formaat in bytes van het bestand).
De size is 0 totdat het hele bestand binnen is, helaas :(

Ik spoor veilig of ik spoor niet.


Acties:
  • 0 Henk 'm!

  • Mayco
  • Registratie: Augustus 2002
  • Laatst online: 13-08 08:00
het is mogelijk met php hoor, heb al eens zo'n scriptje gezien, weet wel niet meer waar. Het werkte inderdaad met een popup, maar mss dat een iframe een mooiere oplossing zou zijn... Of mss een image die zich met javascript elke paar seconde refresht?

Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 21:11
Mayco schreef op 30 oktober 2004 @ 14:27:
het is mogelijk met php hoor, heb al eens zo'n scriptje gezien, weet wel niet meer waar. Het werkte inderdaad met een popup, maar mss dat een iframe een mooiere oplossing zou zijn... Of mss een image die zich met javascript elke paar seconde refresht?
Ja goed,dat is voor latere zorg.
Eerst eens uitzoeken of het uberhaupt mogelijk is.


Flash zou misschien ook wel een goede oplossing zijn. Helaas weet ik hier geen snars vanaf...

Acties:
  • 0 Henk 'm!

  • noMSforme
  • Registratie: Oktober 2000
  • Laatst online: 10-03-2022
Mega Upload version 1.43
------------------------

MEGA UPLOAD 1.4x IS EXPERIMENTAL PLEASE DON'T USE IT ON PRODUCTION
SITES USE 1.35 INSTEAD. 1.35 IS STABLE.


What is it?
-----------
Mega Upload was originally a progress monitor for file uploads with PHP.
The project has now grown to be a file upload progress indicator for
PHP as well as perl and JSP. You have downloaded the PHP edition.

Additional information is available from the website
http://www.raditha.com/php/progress.php

Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 21:11
noMSforme schreef op 30 oktober 2004 @ 15:12:
Mega Upload version 1.43
------------------------

MEGA UPLOAD 1.4x IS EXPERIMENTAL PLEASE DON'T USE IT ON PRODUCTION
SITES USE 1.35 INSTEAD. 1.35 IS STABLE.
What is it?
-----------
Mega Upload was originally a progress monitor for file uploads with PHP.
The project has now grown to be a file upload progress indicator for
PHP as well as perl and JSP. You have downloaded the PHP edition.

Additional information is available from the website
http://www.raditha.com/php/progress.php
Die heb ik geprobeerd, maar dit is niet wat ik zoek omdat er CGI aan te pas komt. Ik wil een 100% pure php uploader

Acties:
  • 0 Henk 'm!

  • adewidt
  • Registratie: November 2002
  • Laatst online: 24-05 12:15
Het kan met php, maar het is niet simpel en ervaring heb ik er ook niet mee.
Het is belangrijk gebruik te maken van flush in combinatie met sleep. Dit moet in een oneindige loop die stopt zodra de upload klaar is.

flush:
http://nl3.php.net/flush
Flush zorgt dat php een output kan doen voordat de hele pagina klaar is. Je kan php dan in een loop laten zitten waarbij continu wat weergeven wordt.

sleep:
http://nl3.php.net/sleep
Om je server niet helemaal te laten stikken in een php proces. Is het van belang wel kleine pauzes in een loop in te bouwen (het is niet verplicht). Je moet het namelijk zo zien dat een php script in een loop via flush continu rekenkracht vraagt en als je niet oplet er miljoenen berekeningen worden uitgevoerd voordat de upload klaar is. Door kleine sleeps in te bouwen is het script niet overbelastend. Ik heb me cpu wel is op 60 graden gekregen door een verkeerde loop en flush combinatie :) .

Verder is het bijna verplicht dit op een linux gebasseerde server te maken aangezien windows php zeer slecht met sleep omgaat!

Theoretisch is het mogelijk. Ik heb het nooit geprobeerd en kan dus geen garantie of extra hulp geven meer.

Ik heb verscheidene malen chatboxen gezien die op deze techniek werkte. Het zal nooit zo soepel reageren als bijv flash, maar ik was best onder de indruk hoe goed het nog werkte.

Acties:
  • 0 Henk 'm!

Verwijderd

Theoretisch is het helemaal ONMOGLEIJK en in de practijk dus ook, er zijn meerdere topics over geweest.

Een PHP script wordt pas gedraaid nadat a. of alle $_POST elementen binnen zijn (dit wordt verwerkt door je webserver (apache of whatever) en nadat alles klaar is wordt het script pas gedraaid met de eventuele gegevens.

Sorry, PHP is hier absoluut (nog) niet geschikt voor.

Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Als je met de search zoekt naar topics over dit onderwerp kom je erachter dat het achterhalen van de filesize van een file aan de client side kan door middel van een activex object. Probleem is dan dat het alleen werkt in IE.

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Brakkie schreef op 30 oktober 2004 @ 16:06:
Als je met de search zoekt naar topics over dit onderwerp kom je erachter dat het achterhalen van de filesize van een file aan de client side kan door middel van een activex object. Probleem is dan dat het alleen werkt in IE.
Het ging toch om serverside? :) .

DM!


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
JHS schreef op 30 oktober 2004 @ 16:08:
[...]
Het ging toch om serverside? :) .
Staat er toch niet echt? Alleen is het een probleem om het met Java te doen omdat je dan een beveiligingwaarschuwing krijgt.

Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Het ging toch om serverside? :) .
Het gaat om een combinatie van serverside en client side als je php gebruikt om die file te uploaden. (vandaar dat activex object) Het probleem is dat je bij een upload dmv php de filesize pas na de upload weet. Als je die filesize dus client side al kan bepalen en je weet ook de locatie van de temp file op de server zou je die informatie kunnen versturen naar een iframe. In dat iframe zou je dan een php pagina kunnen laten refreshen die het percentage berekend van wat er al van de file binnen is.

Puur serverside is het met php niet mogelijk.

[ Voor 3% gewijzigd door Brakkie op 30-10-2004 16:21 ]

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Brakkie schreef op 30 oktober 2004 @ 16:17:
[...]


Het gaat om een combinatie van serverside en client side als je php gebruikt om die file te uploaden. (vandaar dat activex object) Het probleem is dat je bij een upload dmv php de filesize pas na de upload weet. Als je die filesize dus client side al kan bepalen en je weet ook de locatie van de temp file op de server zou je die informatie kunnen versturen naar een iframe. In dat iframe zou je dan een php pagina kunnen laten refreshen die het percentage berekend van wat er al van de file binnen is.

Puur serverside is het met php niet mogelijk.
Ah, idd, nu volg ik je ook :P :) .

DM!


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan uiteraard wel een indicatie geven, gooi een 2 frames in de popup.

frame 1:

Maak de layout van de vooruitgang, gebruik een layer voor de indicatie weergave, balkje bv. Zorg ervoor dat je de status kan wijzigen met dhtml.

frame 2:

Reload deze om de bv 20 seconde, laat daar een speedtest in doen zodat je kan bereken hoe snel hij kan downloaden (houd rekening met de huidige download, tel die dus ook mee!).

Laat in frame aan de hand van frame 2 de indicatie weergeven met deze berekening:

bestandsgrootte/(speedtest snelheid+huidige download)

Let wel op, dit geeft slechts een indicatie! het voordele is, is dat de gebruiker kan zien hoelang d edownload ongeveer zal duren en wordt steeds bijgewerkt dus is enigzins accuraat.

Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Verwijderd schreef op 30 oktober 2004 @ 17:46:
Je kan uiteraard wel een indicatie geven, gooi een 2 frames in de popup.

frame 1:

Maak de layout van de vooruitgang, gebruik een layer voor de indicatie weergave, balkje bv. Zorg ervoor dat je de status kan wijzigen met dhtml.

frame 2:

Reload deze om de bv 20 seconde, laat daar een speedtest in doen zodat je kan bereken hoe snel hij kan downloaden (houd rekening met de huidige download, tel die dus ook mee!).

Laat in frame aan de hand van frame 2 de indicatie weergeven met deze berekening:

bestandsgrootte/(speedtest snelheid+huidige download)

Let wel op, dit geeft slechts een indicatie! het voordele is, is dat de gebruiker kan zien hoelang d edownload ongeveer zal duren en wordt steeds bijgewerkt dus is enigzins accuraat.
Met deze (of eigenlijk elke) oplossing blijft de bestandsgrootte noodzakelijk, en die kan je alleen achterhalen met ActiveX o.i.d.

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

Verwijderd

Ik neem aan dat als je downloads aanbied dat je ook weet hoe groot die zijn, gebruik gewoon filesize() als het op je eigen server staat.

Natuurlijk kan je altijd nog bij de "oplossing" die ik beschreef gewoon neerzetten hoe ver de download ongeveer is, dan weet de gebruiker dat tenminste.

Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Verwijderd schreef op 30 oktober 2004 @ 18:50:
Ik neem aan dat als je downloads aanbied dat je ook weet hoe groot die zijn, gebruik gewoon filesize() als het op je eigen server staat.

Natuurlijk kan je altijd nog bij de "oplossing" die ik beschreef gewoon neerzetten hoe ver de download ongeveer is, dan weet de gebruiker dat tenminste.
Euh, hij heeft het denk ik over het uploaden door middel van een formulier.

Systeem | Strava


Acties:
  • 0 Henk 'm!

Verwijderd

Echt wakker was ik niet vandaag, ik dacht dat het over downloaden ging...

Zie mijn posts maar als niet geschreven... |:(

Acties:
  • 0 Henk 'm!

Verwijderd

mocean schreef op 30 oktober 2004 @ 18:03:
[...]

Met deze (of eigenlijk elke) oplossing blijft de bestandsgrootte noodzakelijk, en die kan je alleen achterhalen met ActiveX o.i.d.
Yup of je vraagt het aan de gebruiker (gebruikersgemak :+)

Acties:
  • 0 Henk 'm!

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 08-09 13:47
Het kan wel met alleen PHP maar dan kom je uit bij wat minder nette oplossingen. Een optie is in je upload_tmp_dir gaan zoeken naar een file die gemaakt is na het moment dat je user de upload pagina opgevraagd heeft. Je zorgt er dus voor dat er b.v. met een iframe of met een popup twee schermen zijn bij de user, 1 voor de POST en 1 met een scriptje dat laat zien hoe groot dat tijdelijke bestand is. Je loopt natuurlijk het risico dat er toevallig een ander bestand aangemaakt is in upload_tmp_dir of dat er twee mensen tegelijkertijd aan het uploaden zijn. Volgensmij is het namelijk niet mogelijk van te voren al op te geven wat tmp_name moet worden. Zorg er iig voor dat upload_tmp_dir een directory is die echt alleen voor uploads wordt gebruikt.

Andere oplossing is:
http://pdoru.from.ro/
maar dan moet je PHP gaan patchen en als je dat kan/mag dan kan je net zo goed dat MegaUpload script gebruiken dat een beetje Perl nodig heeft...

Succes iig :)

Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 20-09 06:39

Willem2

Ω is futile

Wat bartvb zegt ben ik ooit eens mee begonnen, maar nooit volledig afgemaakt:
http://www.vddh.com/tweak/ul.php


Het is volledig PHP/Javascript maar heeft al de bovengenoemde beperkingen:

1) je moet toegang hebben tot de tmp upload directory op de server waar het PHP script draait
2) het werkt alleen met MSIE en plaatjes (is het enige type object waarvan MSIE de filesize kan pakken clientside zonder activex of java te hoeven gebruiken)
3) het gaat ervanuit dat alles sequentieel wordt opgeladen; dus met simultane uploads zou je in de problemen kunnen komen; door goed te kijken naar filestamps valt dat ik praktijk reuze mee.

Als er interesse is voor de source hoor ik het wel!

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


Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 18-09 22:50

PanMan

Spun!

Ik heb ook wel's een script gemaakt, dat de temp dir afzoekt naar bepaalde files, en dan de filesize en het aantal weergeeft. Daarmee heb je een indicatie van wat er al binnen is. Bovendien kan je door die refresh ook de snelheid tonen (door simpel te vergelijken. Dan nog een mooi moving gifje erbij, en je bezoeker ziet dat er iets gebeurt. Helaas is er idd geen manier om de filenames al te weten voor de upload klaar is. Ik heb zelf's wel's een patch voorgesteld bij PHP, maar die is er niet doorgekomen.

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 21:11
Willem2 schreef op 31 oktober 2004 @ 13:04:
Wat bartvb zegt ben ik ooit eens mee begonnen, maar nooit volledig afgemaakt:
http://www.vddh.com/tweak/ul.php


Het is volledig PHP/Javascript maar heeft al de bovengenoemde beperkingen:

1) je moet toegang hebben tot de tmp upload directory op de server waar het PHP script draait
2) het werkt alleen met MSIE en plaatjes (is het enige type object waarvan MSIE de filesize kan pakken clientside zonder activex of java te hoeven gebruiken)
3) het gaat ervanuit dat alles sequentieel wordt opgeladen; dus met simultane uploads zou je in de problemen kunnen komen; door goed te kijken naar filestamps valt dat ik praktijk reuze mee.

Als er interesse is voor de source hoor ik het wel!
Ziet er goed uit. Werkt goed met afbeeldingen alleen wat minder met ZIP Files en daar is het eigenlijk voor bedoeld.
Zou ik misschien de source mogen hebben ?

n i c o @ partypassion . n e t

Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 20-09 06:39

Willem2

Ω is futile

zoals ik al zei; werkt alleen icm MSIE en plaatjes! :)
Van zipfiles kun je clientside met javascript geen filesize bepalen; dan moet je idd richting activeX gaan en daar houd ik niet zo van...

Btw. Check je mail voor code

[ Voor 8% gewijzigd door Willem2 op 02-11-2004 19:49 ]

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


Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 21:11
Thanx...
Ik heb een functie in PHP gevonden waarmee het misschien wel wil gaan lukken.


en anders kan ik altijd nog een indicatie geven. Bijv:

10 MB: @ <speed> = 1M 55 Sec
20 MB: @ <speed> = 2M 55 Sec
30 MB: @ <speed> = 3M 55 Sec

Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 09-09 17:18
kan je niet zoiets maken met flash ?

Acties:
  • 0 Henk 'm!

  • bramseltje
  • Registratie: September 2001
  • Laatst online: 17-09 14:01
Ik weet niet hoe groot je kennis van andere (script) talen is, maar ik heb ooit ergens een ASP versie van wat jij (volgens mij) wil gevonden. Deze heet 'PureASP Upload' en is hier te vinden.

Je zou kunnen proberen dezelfde functionaliteit te maken door een beetje af te kijken, het is tenslotte P&W :Y). Er wordt gewerkt (voor zover ik het kan zien) met een aantal eigenschappen van de standaard HTML forms, dus ik denk dat daarvoor in PHP vrijwel dezelfde voorzieningen zullen zitten als in ASP...

Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
In php is dit niet eenvoudig.
De reden is, zoals al eerder aangegeven, dat php zelf eerst alle data wil ontvangen en verwerken voordat het jouw php-script gaat uitvoeren. Bij cgi kan je de POST data van standaard-in lezen. Php doet dit alvast voor je. Meestal is dat makkelijker, behalve als je meer controle wilt.

Er is echter wel een oplossing voor. In het upload form zet je:
PHP:
1
2
<form action="http://".$_SERVER['SERVER_ADDR'].":".$port."/ 
          method="post" enctype="multipart/form-data">"

Het andere php script opent een socket op die poort. Die moet van tevoren wel op een of andere manier bekent zijn. Dus je kan een vaste poort proberen en 1 php script dat in de lucht gehouden wordt om de uploads af te handelen. Je kan ook (denk ik) vlak voor een submit met javascript het php-script oproepen dat een poort opent en die teruggeeft. Met javascript kan dan naar de juiste poort submitten.

Het script dat het socket opent moet de rauwe http-requests verwerken. Hoe dat werkt kan staat in diverse rfc's. Omdat je hier zelf de postdata uitleest kan je de voortgang bijhouden en data naar de client versturen.
Deze oplossing staat of valt met de mogelijkheid om sockets te openen. Als dat niet mag van je hostingprovider dan heb je pech.

Je geeft trouwens aan dat je php.ini niet wilt of kan aanpassen. Meestal is de maximale grootte van een POST op 8 MB gelimiteerd. Dus 20 tot 100 MB ga je dan niet redden.
edit:
hmm.., als je je eigen 'server' schrijft heb je natuurlijk geen last van een max POST-size. :P

[ Voor 7% gewijzigd door Sjaaky op 03-11-2004 01:23 ]


Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 18-09 22:50

PanMan

Spun!

Bramseltje schreef op 02 november 2004 @ 20:55:
Ik weet niet hoe groot je kennis van andere (script) talen is, maar ik heb ooit ergens een ASP versie van wat jij (volgens mij) wil gevonden. Deze heet 'PureASP Upload' en is hier te vinden.

Je zou kunnen proberen dezelfde functionaliteit te maken door een beetje af te kijken, het is tenslotte P&W :Y). Er wordt gewerkt (voor zover ik het kan zien) met een aantal eigenschappen van de standaard HTML forms, dus ik denk dat daarvoor in PHP vrijwel dezelfde voorzieningen zullen zitten als in ASP...
Dat is dus een groot verschil: ASP schijnt de gegevens al binnen te krijgen voordat de upload klaar is, PHP heeft ze pas als de upload al is afgelopen (en dan heb je geen progress meter meer nodig).

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 21:11
Sjaaky schreef op 03 november 2004 @ 00:17:
Je geeft trouwens aan dat je php.ini niet wilt of kan aanpassen. Meestal is de maximale grootte van een POST op 8 MB gelimiteerd. Dus 20 tot 100 MB ga je dan niet redden.
edit:
hmm.., als je je eigen 'server' schrijft heb je natuurlijk geen last van een max POST-size. :P
Dit heb ik al opgelost met INI_SET();
en kan ook in een htaccess worden opgelost.

Het script is voor een module in een zelfgemaakt CMS. Dit CMS moet op elke mogelijke server kunnen draaien. Dus het openen van sockets en dergelijke wil ik ook vermijden.
Zodra ik tijd heb, (morgen avond) zal ik eens met het script van willem2 gaan stoeien en kijken wat eruit komt. Zelf vond ik het ook een goede oplossing om een indicatie te geven

Bestandsgrootte:
10 MB: @ <speed> = 1M 55 Sec resterend
20 MB: @ <speed> = 2M 55 Sec resterend
30 MB: @ <speed> = 3M 55 Sec resterend

Acties:
  • 0 Henk 'm!

  • Willem2
  • Registratie: Oktober 2000
  • Laatst online: 20-09 06:39

Willem2

Ω is futile

Als je toegang hebt tot je /tmp_upload dir kan het (mijn) script iig een gemiddelde upload bepalen.

Maar het bovenstaande idee van via een poort de raw http headers inlezen spreekt mij ook wel aan.
Komend weekend eens kijken wat daarmee te bereiken valt! :)

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


Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 18-09 22:50

PanMan

Spun!

Willem2 schreef op 03 november 2004 @ 22:19:
Als je toegang hebt tot je /tmp_upload dir kan het (mijn) script iig een gemiddelde upload bepalen.

Maar het bovenstaande idee van via een poort de raw http headers inlezen spreekt mij ook wel aan.
Komend weekend eens kijken wat daarmee te bereiken valt! :)
Als je zoiets hebt, zou je dan eens (een deel?) van de source willen posten?

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Voordat ik mijn vorige post plaatste heb ik natuurlijk even een proof-of-concept geschreven. Die heb ik iets verder uitgewerkt en is hier te downloaden.

Let wel: Het is geen production quality code. Het script is niet geschikt voor multi-user. Ik heb zelfs niet eens naar een rfc gekeken om te kijken of ik dingen wel goed afhandelt, zeker ivm verschillende character encodings etc. Verder geven sommige browsers (IE) de bestandsnaam met pad door, dat wordt niet gestript.
Alle bestanden komen in de $upload directory terecht, uiteraard moet deze de juiste rechten hebben. Ik gebruik nu poort 5001, als je de poort op 0 instelt wordt er automatisch een poort toegewezen. Deze moet dan wel op een andere manier aan het uploadform doorgegeven worden. :)
Ik heb het script getest in IE en FF met bestanden tot 700MB. Het gebruik van een iframe of div ipv popup venster lukte niet met FF. Ik weet niet waarom. Of mijn javascript was niet goed, of FF kan niet tegelijkertijd up en downloaden in dezelfde pagina.

Iig veel succes ermee.

Acties:
  • 0 Henk 'm!

Verwijderd

Willem2, ik ben zeker geinteresseerd in je script wat
je op http://www.vddh.com/tweak/ul.php hebt staan!

kun je me deze toesturen of ergens neerzetten?
zoniet, wil je het dan mailen naar:

babedieboe2 at hotmail dot com

bedankt! owe u 1!~

Acties:
  • 0 Henk 'm!

Verwijderd

lees eens een post boven je eigen post :?

[ Voor 3% gewijzigd door Verwijderd op 09-11-2004 17:38 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ja, had ik gezien ja, maar deze is gebaseerd op socket-principe, de andere van willem2 niet, vandaar. Die wil ik nl. nog wat verder uitwerken.
Kan iemand me hier aan helpen?

Bedankt alvast!
Ik zal zeker de code hier posten als ik deze heb aangepast: ik wil nl. alles (eenmaal begonnen) client side zonder cs-refresh houden.......

Acties:
  • 0 Henk 'm!

Verwijderd

Is het anders niet een idee om via ini_set de uploaddirectory aan te passen? Als je een gebruikersdatabase maakt waardat een gebruiker moet inloggen voordat hij kan uploaden dan kan je het naar een persoonlijke directory laten uploaden. Teminste dat lijkt me te doen.
php.net - ini_set - upload_tmp_dir:
The temporary directory used for storing files when doing file upload. Must be writable by whatever user PHP is running as. If not specified PHP will use the system's default.
Je moet er wel voor zorgen dat een gebruiker maar 1 file tegelijkertijd kan uploaden naar zijn persoonlijke directory. Tijdens het aanmaken van de gebruiker maak je dan een persoonlijke upload map aan (bv in de /site/upload/$userid als je site in /site/html staat, dus buiten je webroot, binnen de webroot kan ook natuurlijk, geen directory index aanzetten in die mappen).

[nieuw idee]
Je kan het ook zonder userdatabase doen, dan moet je sessions aanmaken, nadat je een session hebt gestart moet je iets doen als:
PHP:
1
mkdir('/path/naar/iets/'. session_id());

[ Voor 10% gewijzigd door Verwijderd op 09-11-2004 19:31 ]


Acties:
  • 0 Henk 'm!

Verwijderd

@Sjaaky

Straks maar ffies je script bekijken, maar het idee wat je geeft vind ik erg goed. Ik zat al eens te denken over sockets, maar wist niet hoe ik naar de gebruiker een socket moest openen vanaf php. (kan iig niet). Jij hebt deze rollen gewoon omgedraaid wat me aan het denken heeft gezet.

Trouwens de megaupload is niet iets om echt te gebruiken. Het is grappig, maar er zitten te veel bugs in. Zelf heb ik nog diverse bug fixes voorgesteld, maar gaf het na een tijdje op. Kreeg het script niet 100% bug free om ook daadwerkelijk te gebruiken. (kreeg hem geen eens 50 % bug free :/)

Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Verwijderd schreef op 09 november 2004 @ 19:28:
Is het anders niet een idee om via ini_set de uploaddirectory aan te passen?
Op php.net is ook te lezen dat upload_tmp_dir alleen in php.ini of httpd.conf is aan te passen. Ik zie niet hoe je daarmee een upload dir per user zou kunnen maken.

Acties:
  • 0 Henk 'm!

Verwijderd

upload_tmp_dir is runtime readonly ja.

probeer via htaccess of de php.ini in de directory van het upload script te zetten
(gaat niet bij elke hoster) en daarin alleen de vars die je wilt veranderen: deze overrulen dan de initieele settings.

Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 21:11
Weet iemand toevallig hoe je de tempdirectory van het systeem kunt achterhalen met php.

Ik bedoel niet de upload_tmp_dir, die kun je op de volgende manier achterhalen
PHP:
1
2
3
<?
$dir = ini_get("upload_tmp_dir");
?>


Maar de tmp map van het systeem waar de uploads worden geplaatst wanneer upload_tmp_dir niet is ingesteld.
Mijn scriptje is bijna af, simpel script maar werkt goed. Ook met multi-user. Het werkt alleen niet al alle servers vanwege het "upload_tmp_dir" probleem.

[ Voor 27% gewijzigd door GewoonNico op 12-11-2004 10:33 ]


Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Onder *nix kan je er denk ik wel vanuit gaan dat dat /tmp is. Onder windows staat het (als het goed is) in de environment, waarschijnlijk onder $_ENV['temp']. Ik weet trouwens niet of wat hier gezegd wordt waar is.

Hoe heb je dat multi-user gedeelte eigenlijk opgelost? Oftewel, als 2 users tegelijk beginnen met uploaden, hoe weet je dan welke tempfile van welke user is?

[ Voor 27% gewijzigd door Sjaaky op 12-11-2004 10:59 ]


Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 21:11
Nou, met dat multiuser.......
ik had gewoon gedacht... je kijkt eerst welke tempfiles er al staan voordat je begint met uploaden. die streep je dus alvast weg.

Zodra de upload begint kijk je welke files er in de tempmap zijn geplaatst. De files die dan 10 seconden of ouder zijn streep je al weg.

Dan houd je nog maar 1 bestand over. Die bestandsnaam plaats je in een sessie en roep je na de page refresh weer op.

Het leek me sterk dat 2 of meer mensen in 10 seconden tegelijkertijd een bestand gingen uploaden.

Mijn script kan alleen een indicatie geven hoe lang je upload nog duurt. Er wordt dus niet gekeken wat de uiteindelijke bestandsgrootte is.

Acties:
  • 0 Henk 'm!

Verwijderd

maar hoe kan je zeggen hoe lang een upload nog duurt als je de uiteindelijke grote niet weet? Je kan de snelheid meten, de al geuploade gegevens, maar de uiteindelijke grote dus een indicatie van hoe lang een upload nog kan gaan duren kan gewoon niet op deze manier.

Acties:
  • 0 Henk 'm!

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 21:11
nou, precies zal het ook niet lukken. Ik maak er een soort van afleestabel van.


<mb> | <resterendetijd>
1 | 2 min 10 sec
2 | 4 min 20 sec
5 | 20 min 1 sec
10 | 21 min 2 sec

etc etc etc
Zodra het helemaal af is en gestest zal ik wel een voorbeeld beschikbaar stellen.
Pagina: 1