Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PHP: Echo bevor ein Skript läuft (https://www.delphipraxis.net/211712-php-echo-bevor-ein-skript-laeuft.html)

API 25. Okt 2022 16:48


PHP: Echo bevor ein Skript läuft
 
Ich möchte eine "Bitte warten"-Meldung ausgeben, bevor ein PHP-Skript ausgeführt wird, aber sie wird gleichzeitig mit den anderen Echo-Meldungen ausgegeben.

Code:
 <?php
header('Content-type: text/html; charset=utf-8');
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: Mon, 24 Sep 2012 04:00:00 GMT");

ob_start();
echo "Bitte warten";
ob_flush();
flush();
sleep(1);

run_a_function();

function run_a_function() {
    // execute some php code...
    echo "1";
    // execute some php code...
    echo "2";
    // more..
   
}
?>

himitsu 25. Okt 2022 17:18

AW: PHP: Echo bevor eine Skript läuft
 
Theoretisch würde ob_flush funktionieren, ABER

ich bin mit fast sicher, dass dein Provider dir heimlich einen Handler unterschiebt.
Viele haben einen CompressionsHandler und/oder CacheHandler standardmäßig aktiviert.

siehe ob_get_level

Du müsstest also das Flush auf allen Handlern machen, aber kann sein, dass es bei der Compression nicht richtig funktioniert,
bzw. es kann sein, dass der Client (Browser) den unvollständigen Stream nicht verarbeitet und dort nichts angezeigt wird, bevor es komplett da ist.


Lösung:
In den Einstellungen deines WabSpaces, bzw. vermutlich mit irgendeinem Befehl z.B. in der .htaccess, diesen Default-Handler deaktivieren.

Oder ALLE Handler erstmal beenden (wichtig, muß gemacht werden, bevor irgendwelche Daten raus gehn, weil z.B. kompiriert und gefolgt von unkomprimiert geht nicht zusammen)
z.B. so oft ob_end_clean, bis ob_get_level 0 sagt.


Alternativ:
Dein Script gibt die Meldung aus und beendet sich.
Dann wird via JavaScript ein anderes Script oder sich selbst (mit einem Parameter) aufgerufen, wo dann die Aktion läuft.
Entweder weiterleiten, wo der alte Text so lange da bleibt, bis fertig geladen
oder ala AJAX den Aufruf nur intern laden und dann dessen Rückgabe in die Ausgabe der aktuellen Seite schreiben.

API 25. Okt 2022 17:25

AW: PHP: Echo bevor eine Skript läuft
 
Zitat:

z.B. so oft ob_end_clean, bis ob_get_level 0 sagt.
Wie würde das konkret aussehen?

API 25. Okt 2022 17:27

AW: PHP: Echo bevor eine Skript läuft
 
Übrigens: Dieselbe Frage wurde auf SO gestellt. Obwohl sich dort x-Tausende Benutzer herumtummeln, habe ich dort noch keine einzige Anwort erhalten.
Ein Lob auf die DP, welche um ein Vielfaches kleiner ist und trotzdem schneller Antworten liefert!

himitsu 25. Okt 2022 17:29

AW: PHP: Echo bevor eine Skript läuft
 
eine While-Schleife?

hab's lange nicht mehr gemacht (war damals selber mal auf dieses Problemchen gestoßen :stupid:)

irgendwie so
PHP-Quellcode:
while (ob_get_level() > 0) ob_end_clean();

danach kannst ein neues/eigenes OB starten, oder Ohne weiterarbeiten.

API 26. Okt 2022 00:59

AW: PHP: Echo bevor eine Skript läuft
 
Hab's nun so gelöst: Am Anfang des Skriptes diese 2 Zeilen ausführen:

Code:
while (@ob_end_flush());
ob_implicit_flush(true);

himitsu 26. Okt 2022 01:05

AW: PHP: Echo bevor eine Skript läuft
 
Wie gesagt, bei end_flush mußt du etwas aufpassen, wenn die was ausgeben aber das zum den nachfolgenden Ausgaben nicht passt.
z.B. ein Header/Startcode für Komprimierung aber anschließend nichts mehr komprimiert ist, dann kann das nachfolgende womöglch nicht mehr gelesen/verstanden werden.

theoretisch sollte zwar noch nichts in den Buffers drin sein, weil vorher keine Ausgaben in deinem Script ... aber schiebt dir der Anbieter vorher/nachher irgendwas unter, dann war's das (ja, z.B. so mancher "kostenloser" Anbieter baut dir in deine "Webseite" gern auch mal Werbung oder Dergleichen ein)

API 28. Okt 2022 01:41

AW: PHP: Echo bevor eine Skript läuft
 
Auf dem lokalen Rechner mit Xampp wird das echo sichtbar nacheinander ausgegeben, beim webhoster (3 verschiedene probiert) will es einfach nicht. Habe sehr viele codes, u.a. von SO probiert, keiner geht.
Kann mir jedoch fadt nicht vorstellen, dass es dazu keine (einfache) Lösung gibt.

Monday 28. Okt 2022 03:55

AW: PHP: Echo bevor eine Skript läuft
 
Ich denke nicht, dass es möglich ist, mit PHP ein echo auszuführen, bevor ein Skript läuft.

Alternativ fällt mir ein:
- Eine Weiterleitung einrichten (mit bitte Warten)
- Mit JavaScript das die Meldung anzeigt und dann das PHP Skript nachladet
- oder mit Frames/iframes arbeiten

API 28. Okt 2022 23:44

AW: PHP: Echo bevor eine Skript läuft
 
Zitat:

Zitat von Monday (Beitrag 1513987)
- oder mit Frames/iframes arbeiten

Gibt's dazu irgendwo genauere Infos, wie das umgesetzt werden könnte?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz