wie macht man eine ladegrafik während php ausgeführt wird?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Du brauchst auf jeden Fall, wie andere schon schrieben JS und AJAX.

Wenn du bei deinem Prozess relativ gut abschätzen kannst wie lange die Ausführung dauert, habe ich auch schon Ladebalken gemacht die, entsprechend der voraussichtlichen Dauer + x durchgelaufen sind. Die Laufzeit kannst du ja auch immer mit messen und dir für den nächsten Aufruf wegspeichern. Sonst kannst du die Aufgabe auch logisch untergliedern und gibst Zwischenstände zurück. Wie früher beim Rechner hochfahren.

z.B.

Datenbank aktualisieren ... abgeschlossen

Bilder komprimieren ... abgeschlossen

usw.

Die Infos kannst du aus deinem PHP Script mit flush() während es Läuft rausgeben.

Die Rückgabe muss dann auch wieder mit JS im Browser empfangen und verarbeitet werden.

Dazu brauchst du Asynchronen Code, am ehesten durch JavaScript (AJAX).

Zunächst musst du einen Ajax Request senden, dann bleibt die Seite stehen und im Hintergrund wird dein Serverscript ausheführt. Während dessen ist die Seite noch aktiv aber du kannst eine Grafik einblenden, ein Animiertes Gif zum Beispiel. Wenn der Server die Antwort sendet führst du eine JavaScript Funktion auf die die neue Seite anzeigt.

Woher ich das weiß:eigene Erfahrung

Kommt darauf an ob Du einen echten oder gefakten Submitbutton benutzt. Bei einem echten Submitbutton werden die Daten ja per GET oder POST versendet und erst in dem Script, dass die Daten empfängt ausgewertet.

Ich persönlich bevorzuge POST, weil das die Adressleiste nicht so verunstaltet - aber egal.

Du könntest auf der Zielseite ein DIV mit einem Animierten Ladebalken anzeigen - ist aber doof, weil man nie genau weiß wie lange die Seite am laden ist. Aus diesem Grund verwenden viele Programmierer sich drehende Kringel ;-) die auf einer JavaScript-Bibliothek (Canvas) beruhen.

Nach dem die Seite vollständig geladen ist blendest Du den DIV-Container über den Eventhandler "onload" einfach aus.

Wenn Du es richtig gut machen willst beendest Du (um Ressourcen zu sparen) bei der Gelegenheit auch die Animation.

Bei einem gefakten Submitbutton müsstest Du den DIV-Container ebenfalls ein und ausblenden - z.B. in dem Du im Anschluss an die Datenverarbeitung den DIV-Container ausblendest.


Mensch4 
Beitragsersteller
 29.03.2021, 09:48

ja aber ich habe ein formular, welches nach eingabe auf eine neue seite verweist auf welcher ein befehl mit shell_exec an den server gesendet wird und die seite bleibt dann solange weiß bis der server die vollständige seite geladen hat, was dann mehrere minuten dauern kann, deshalb kann die zielseite nichts anzeigen bis der server mit dem python scrpit fertig ist, was durch php gestartet wurde

0
stealthuser  29.03.2021, 12:32
@Mensch4

Ich bin nicht sicher aber eventuell solltest Du dein Projekt anders strukturieren - vieleicht hilft es wenn Du Teile der neuen Seite in ein Iframe packst, dann wird das außen herum schon mal geladen

0
Mensch4 
Beitragsersteller
 29.03.2021, 15:19
@stealthuser

ja, das ist eine super idee, das hab ich letztenendes dann auch vor, jetzt ist noch die frage wie ich eine ladegif über ein iframe lege bis die seite geladen hat

0