![]() |
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.. } ?> |
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. |
AW: PHP: Echo bevor eine Skript läuft
Zitat:
|
AW: PHP: Echo bevor eine Skript läuft
Übrigens: Dieselbe Frage wurde auf
![]() Ein Lob auf die DP, welche um ein Vielfaches kleiner ist und trotzdem schneller Antworten liefert! |
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. |
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); |
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) |
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. |
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 |
AW: PHP: Echo bevor eine Skript läuft
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz