Output van 'echo' altijd op dezelfde plaats?
Code (php)
Heeft iemand hier een kort werkend voorbeeldje van? Bij voorkeur met PHP en CSS alleen. Maar misschien is javascript onvermijdelijk?
Ik kijk uit naar een oplossing!
Gewijzigd op 17/05/2020 13:48:24 door Eric Verboven
Al geGoogled op "php real time progress bar"?
Als achtergrondproces? Of moet iemand de browser continu openhouden?
Dat laatste hoop ik overigens niet. Als het een achtergrondproces is, dan kan dat proces ook een tellertje bijhouden. En dan kan jij met een AJAX-request elke paar seconden zien hoeveel er verwerkt zijn.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
while($busy){
$record = ...
print(substr("\rCurrently working on {record['name']} ",0,79));
//wat extra spaties om "oude data" te wissen; en een maximum van 79 karakters om te voorkomen
//dat ie naar de volgende regel "over flowt" (of je moet je command line scherm breder maken,
//maar 80 karakters is de standaard onder Windows).
//doe ding met $record
}
while($busy){
$record = ...
print(substr("\rCurrently working on {record['name']} ",0,79));
//wat extra spaties om "oude data" te wissen; en een maximum van 79 karakters om te voorkomen
//dat ie naar de volgende regel "over flowt" (of je moet je command line scherm breder maken,
//maar 80 karakters is de standaard onder Windows).
//doe ding met $record
}
Het programmaatje toont nu gefaseerd een array van termen, met telkens 1 seconde pauze - volstrekt nutteloos, alleen om te laten zien dat het werkt. Maar uiteraard kan je de functie ook aanspreken na een while of foreach vol geweldige maar tijdrovende programmacode.
Geen styling, geen plaatsing: alles wordt gewoon linksboven op het scherm getoond, zwart op wit.
Ere wie ere toekomt: onderstaande code is een aanpassing van het origineel
op https://stackoverflow.com/questions/7049303/show-progress-for-long-running-php-script
Zoek in de lange boodschappenreeks ergens halfweg naar "I'll put this here as a reference for anyone searching"
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
$array1 = array("aap", "noot", "mies", "relativiteit", "België", "Luxemburg", "Zimbabwe","put", "d");
$current = 0;
foreach ($array1 as $element) {
outputProgress($array1[$current], count($array1));
$current++;
}
echo "<br>Ziezo, klaar.";
/**
* Met de $huidig_getal parameter gebeurt nu niks, maar je zou er de waarde van een counter in kunnen meegeven, of een min of meer
* grafische string voor een voortgangsaanduiding.
*/
function outputProgress($huidige_term, $huidig_getal) {
/* De 100 als z-index en als aantal spaties zijn volstrekt willekeurig */
/* De eerste echo beeldt 100 spaties af, om de toonregel mooi leeg te maken. Als je dat niet doet, blijven er restanten van de
/* vorige run. */
echo "<span style='position: absolute; z-index: 100; background: #FFF;'>" . str_repeat(' ', 100) . "</span>";
echo "<span style='position: absolute; z-index: 100; background: #FFF;'>" . $huidige_term . "</span>";
myFlush();
sleep(1);
}
/**
* Flush output buffer
*/
function myFlush() {
echo(str_repeat(' ', 256));
if (@ob_get_contents()) {
@ob_end_flush();
}
flush();
}
?>
$array1 = array("aap", "noot", "mies", "relativiteit", "België", "Luxemburg", "Zimbabwe","put", "d");
$current = 0;
foreach ($array1 as $element) {
outputProgress($array1[$current], count($array1));
$current++;
}
echo "<br>Ziezo, klaar.";
/**
* Met de $huidig_getal parameter gebeurt nu niks, maar je zou er de waarde van een counter in kunnen meegeven, of een min of meer
* grafische string voor een voortgangsaanduiding.
*/
function outputProgress($huidige_term, $huidig_getal) {
/* De 100 als z-index en als aantal spaties zijn volstrekt willekeurig */
/* De eerste echo beeldt 100 spaties af, om de toonregel mooi leeg te maken. Als je dat niet doet, blijven er restanten van de
/* vorige run. */
echo "<span style='position: absolute; z-index: 100; background: #FFF;'>" . str_repeat(' ', 100) . "</span>";
echo "<span style='position: absolute; z-index: 100; background: #FFF;'>" . $huidige_term . "</span>";
myFlush();
sleep(1);
}
/**
* Flush output buffer
*/
function myFlush() {
echo(str_repeat(' ', 256));
if (@ob_get_contents()) {
@ob_end_flush();
}
flush();
}
?>