Progress bar

Door Jelmer -, 14 jaar geleden, 10.858x bekeken

Een plug & play progress balk waarmee je gemakkelijk de voortgang van je bijna eeuwig durende lusjes kunt aangeven, zodat het wachten wat leuker wordt.

Voorbeelden van gebruik
- een importeer-scriptje dat binnen een lus een trage actie doet, bijvoorbeeld een query of het downloaden van een bestand.

Enige eis is dat je weet hoeveel rondjes (hoeveel ticks) je de progress bar laat meten.

Gebruik
1. Roep de static IHG_Progressbar::draw_css() aan waar je je css hebt staan. Of je maakt een eigen stylesheet. Let wel dat je dit echo't voordat je de progress bar gaat gebruiken.

2. Maak een nieuwe instantie van IHG_Progressbar aan. Argumenten zijn het aantal ticks dat je gaat geven (wanneer je zoveel ticks hebt gegeven, is je balk vol) en wat er op de balk weergegeven moet worden. Voor dit formaat wordt sprintf gebruikt, dus je kan gewoon %d gebruiken als placeholder voor de cijfertjes. Hij vult twee cijfertjes in, de tick bij welke hij nu is, en het maximum aantal ticks.

3. Roep IHG_Progressbar::draw() aan om de balk zelf op het scherm te toveren.

4. Roep ieder rondje in je lus IHG_Progessbar::tick() aan. Op dit moment wordt er wat javascript geprint waarmee de balk een stapje vooruit gaat. En om ervoor te zorgen dat hij werkelijk door de browser ontvangen wordt flusht hij alle output buffers.

Ik heb hem in een klasse gezet om hem zo plug & play mogelijk te houden. Gewoon klasse kopiëren en gebruiken. Ik heb hem zelf gebruikt voor een import-scriptje voor Wordpress. Als het goed is kan je meerdere balken tegelijkertijd gebruiken, al heb ik dat niet getest.

Voorbeeld: http://phphulp.ikhoefgeen.nl/progress.php

Gesponsorde koppelingen

PHP script bestanden

  1. progress-bar

 

Er zijn 24 reacties op 'Progress bar'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Eddy E
Eddy E
14 jaar geleden
 
0 +1 -0 -1
Werkt netjes, maar niet echt vloeiend.

Ik krijg:
0 ... 15 ... 65 ... 100

Dus niet 1 ..2...3...4... ---... 98...99...100

Wellicht is dat leuk om te maken?
Nils Kuijpers
Nils Kuijpers
14 jaar geleden
 
0 +1 -0 -1
Ik krijg m wel vloeiend.
Nicoow Unknown
Nicoow Unknown
14 jaar geleden
 
0 +1 -0 -1
Bij mij werkt hij perfect,
Heb hem net even op mijn Mysql 2 acces exporter, en dan even bij mijn grootste database, en het klopt ook nog eens =P
GaMer B
GaMer B
14 jaar geleden
 
0 +1 -0 -1
Jammer dat je toch de uiteindelijke aantal loops moet weten aan het begin. Maar over het algemeen kom je daar vrij snel achter m.b.t. databases.
--
--
14 jaar geleden
 
0 +1 -0 -1
Wauw. :)
Leuk voorbeeldje.
Gerben G
Gerben G
14 jaar geleden
 
0 +1 -0 -1
Heel leuk script.
Paul K
Paul K
14 jaar geleden
 
0 +1 -0 -1
(Y)
Hipska BE
Hipska BE
14 jaar geleden
 
0 +1 -0 -1
downloaden van een bestand wordt gedaan in php5 (evt 4 ook) met file_get_contents en dat zit niet in een lus. Nu zou ik wel eens willen weten hoe je dat gaat doen.
Jelmer -
Jelmer -
14 jaar geleden
 
0 +1 -0 -1
In mijn geval is het het downloaden van een stuk of 60 bestanden en dezen ieder parsen en verwerken. En dat duurt even aangezien dat met PHP niet bepaald parallel kan. Maar een andere manier is middels een socket gewoon het bestand downloaden. Vaak kan je uit de headers wel de filesize halen, en kan je uitrekenen hoe veel lusjes je gaat maken aangezien je met fread (of was het fgets) een precieze hoeveelheid bytes kan afwachten.

Verder heb ik verhalen gehoord over browsers die een minimum aantal bytes data willen hebben alvorens ze deze verwerken. Ik ben er nog niet eentje tegengekomen, maar dat is ook niet zo vreemd wanneer je beseft dat ik hem alleen heb getest in Safari :)
GaMer B
GaMer B
14 jaar geleden
 
0 +1 -0 -1
Firefox doet 't ook goed zo. Enne over dat downloaden: Je kunt er van alles op verzinnenn om dat toch goed te doen. Kwestie van het in een class zetten en heb je daar ook geen omkijken meer naar. Je moet het alleen goed uitwerken natuurlijk.
Jan DS
Jan DS
14 jaar geleden
 
0 +1 -0 -1
Werkt mooi!
PHP erik
PHP erik
14 jaar geleden
 
0 +1 -0 -1
In Chrome werkt het niet (5 seconden wit scherm en dan direct 100/100 + PHP code). Verder mooi ding :)
- -
- -
14 jaar geleden
 
0 +1 -0 -1
@PHPerik: Klopt, wilde ik ook zeggen.
Storeman storeman
storeman storeman
14 jaar geleden
 
0 +1 -0 -1
@Hipska: Met behulp van file_get_contents zal het je niet lukken, maar je kunt natuurlijk ook de fopen/fread methode gebruiken om het bestand in stukken in te lezen.
Hipska BE
Hipska BE
14 jaar geleden
 
0 +1 -0 -1
Waarom zou je dat doen als je alles van het bestand wil hebben..

Zoals jelmer zegt is het wel toepasbaar als je bv 60 files moet ophalen, maar dan betwijfel ik of dit niet beter in de achtergrond door bv een cron gedaan wordt..
Storeman storeman
storeman storeman
14 jaar geleden
 
0 +1 -0 -1
Om je progress bar te kunnen gebruiken en om je user een status-update te geven.

Voor een enkel bestand lijkt het tamelijk zinloos iig. Maar als je veel bewerkingen op een groot bestand gaat toepassen, kan het toch leuk zijn.
Cake Masher
Cake Masher
14 jaar geleden
 
0 +1 -0 -1
Zo iets had ik ook een keer gemaakt voor een installatie script, 't werkte precies zo en echo'de elke keer een lijntje JavaScript en flushte het erna.

Daarna kwam het probleem dat als er een paar duizend keer zoon lijntje moet worden ge echo't, de browser (IE7) crasht.

Deze kan een paar duizend lijntjes JS niet meer aan, tenminste..
Dat was bij mij zo.


11 jaar geleden
 
0 +1 -0 -1
Het voorbeeld werkt wel bij chrome.
Niels K
Niels K
11 jaar geleden
 
0 +1 -1 -1
@Thee boris
Zou je zo vriendelijk willen zijn om je 'niets zeggende' berichten in de script library achterwege te laten?

Alvast bedankt ;)
Yea Rupie
Yea Rupie
11 jaar geleden
 
Leuk gemaakt, alleen jammer dat opera te lui is om na ieder procent te updaten. Ik krijg per 8%.
Chrome in IE9 werken bij mij wel gewoon goed.
The Force
The Force
11 jaar geleden
 
0 +1 -0 -1
@Niels Kieviet: hoe zo niets zeggend? Anderen geven aan dat het niet werkt bij Chrome, mag je daar niet op reageren? Bij mij werkt hij overigens ook bij Chrome. Leuk script, alleen als je veel ticks hebt dan krijg je een zeer groot html bestand. Misschien beter (als javascript gebruiken geen probleem is) om met een JS timer om de zoveel milliseconden de waarde van een variabele te controleren en bij elke tick deze variabele aan te passen?

Edit: oké het was misschien wel niet veel zeggend omdat dit script 2 jaar geleden gepost wast.
Niels K
Niels K
11 jaar geleden
 
0 +1 -0 -1
@the force [je edit]

Precies ;-) En ik las in 5 minuten meer dan 3 berichten waarin hij zulk soort reacties plaatste.. Maar goed, het was gewoon maar een vraagje ;)
Pim -
Pim -
11 jaar geleden
 
0 +1 -0 -1
Weet iemand iets zinnigs te zeggen over wanneer (met welk script, wat voor server OS, client OS en browser) dit soort dingen wel en niet werken?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Harry H Arends
Harry H Arends
4 jaar geleden
 
0 +1 -0 -1
Leuk script, maar moet dit in een loop gebruikt worden.
Kan ik het ook gebruiken waar ik op bepaalde plaatsen in een script de balk verder laat springen??

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. progress-bar

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.