Kein Fortschritt ohne Ladebalken

Kürzlich musste ich für ein Webprojekt bei einem Aufruf eine größere Anzahl an PDF-Dateien erstellen. Da das Ergebnis teilweise aus mehreren hunderte Seiten bestand, hat die Erstellung recht lange gedauert. Hier dem Benutzer einfach nur eine leere Seite anzuzeigen mit der Lade-Animation des Browsers ist nicht optimal. Dort kamen direkt die Rückfragen, ob denn das System arbeitet und wann die Erstellung der PDF-Dateien abgeschlossen ist.

Dementsprechend habe ich mich entschieden, einen entsprechenden Ladebalken in PHP & JavaScript zu programmieren:

Ladebalken mit PHP & JavaScript

Wie ihr wisst, wird der PHP-Script auf dem Server ausgeführt. Sobald dieser seine Arbeit erledigt hat, wird das Ergebnis (das entsprechende HTML) an den Browser gesendet zur Darstellung.

Hier eine Ladeanimation hinzubekommen muss man auf ein paar Befehle in PHP zurück greifen. Ebenfalls ist JavaScript notwendig, um den Ladebalken dann beim Benutzer anzuzeigen.

Hier das vollständige Script:

Daten auf bereits geladener Seite aktualisieren

Das Script eignet sich, um den Fortschritt in einem PHP-Script auszugeben. Hat man auf einer Seite Daten die sich konstant ändern, z.B. die Aktienkurse oder Bitcoin-Kurse (wie z.B. bei Bitcoin Evolution), dann ist dieser Ansatz der falsche. Hier ist es besser mittels JavaScript eine Server-API anzusprechen, die die neuesten Daten zurück gibt und darstellt. Wer sich für Bitcoins interessiert: Registrieren Sie sich noch heute

Ladebalken im Detail

Hier die einzelnen Schritte noch mal im Detail erklärt.

Bevor der Webserver etwas an den Besucher sendet, puffert er dieses normalerweise bis das PHP-Script komplett fertig gearbeitet hat. Bei einem Ladebalken ist dies aber unerwünscht. Wir wollen unsere Updates noch während das Script arbeitet. Um dies zu realisieren, haben wir eine doFlush Methode:

Ebenfalls versuchen wir das Sendeverhalte noch mittels PHP-Einstellungen entsprechend zu setzen:

Dies sollte bei fast allen Webserver dazu führen, dass Ausgaben des PHP-Scripts nicht erst zwischengespeichert werden, sondern direkt an den Besucher gesendet werden.

Als nächstes definieren wir unser HTML-Grundgerüst mit der Anzeige des Ladebalkens:

Immer wenn wir nun eine neue PDF-Seite im PHP-Script erstellt haben, wollen wir eine Info an den Besucher senden, dass das Script fortschritte macht und wie viele Seiten bereits erstellt wurden. Dazu nutzen wir folgende Funktion:

Dies ist ein einfaches JavaScript, dass die breite des Ladebalkens entsprechend anpasst. Ebenfalls aktualisiert es unseren Text, den wir auf der Seite ausgeben.

Diese beiden Funktionen können wir nun für die Darstellung des Ladebalkens verwenden:

Hier rufen wir zuerst html_basis() auf. Anschließend haben wir eine Schleife um beispeilsweise 15 Seiten zu erstellen. Damit die Schleife nicht unmittelbar durchläuft, nutzen wir noch die sleep-Funktion, die den Programmablauf um 1 Sekunde verzögert.

Wenn die Schleife dann durchgelaufen ist und alle PDF-Seiten erstellt sind, wollen wir unseren Besucher noch weiter schicken, beispielsweise um das PDF anzuschauen oder um es herunterzuladen. Dies erreichen wir mit folgender Funktion:

Autor:
Zurück zur Übersicht aller Beiträge