dedlfix: echo ... aber nicht immer!

Beitrag lesen

echo $begrüßung;

naja, es gibt (zumindest bestätigte mir das vor ein paar Tagen hier jemand als funktionierend) auch noch die CSS-Lösung:

  1. Ausgabe puffern
  2. Wartehinweis in einem div o.ä. senden -> flush
  3. ... Schleife laufen lassen -> flush
  4. Dabei muss das HTML-Element, das von (3) erzeugt wird, mittels CSS so platziert werden, dass es _über_ dem Wartenhinweis liegt (oder _auf_ oder was auch immer dir als Beschreibung am Liebsten ist).

Ja, das ist auch die einfachste mir bekannte Methode. Kein Javascript wird dazu benötigt. Allerdings müssen nicht alle Browser mitspielen. eddi erwähnte schon die Problematik mit der <table>. Opera mag auch nicht gleich jedes empfangene Codestückchen sofort rendern. Sendet man ihm mit zeitlichen Abständen jeweils ein wenig Text (mit einem flush() hinterher) zeigt zwar der Fortschrittsbalken den Empfang an, die Ausgabe bleibt aber leer. flush() funktioniert auch nicht mit allen Webservern, der IIS will da auch nicht mitspielen (vielleicht waren das auch nur bestimmte Konfigurationen, ich weiß das grade nicht ganz genau).

Noch ein paar Anmerkungen. zu 1) Ob die Ausgabe gepuffert werden muss oder nicht, muss man aufgabenabhängig entscheiden. Wenn Ausgabetext das Ergebnis des länger dauernden Prozesses ist, braucht man ihn nur irgendwo zwischenzuspeichern, wenn man auch noch eine Fortschrittsanzeige haben möchte. Ansonsten kann man ihn auch einfach so ausgeben.
zu 2) Der Wartehinweis sollte vor dem Prozessstart ausgegeben werden. (Eine id oder class angeben, die man dann bei 4) ansprechen kann.)
zu 4) Für das Wartehinweis- bzw. Fortschritts-DIV braucht man nur eine CSS-Regel, die display:none enthält nach Prozessende auszugeben und weg ist es. Das Überlagern von Elementen ist doch ein wenig umständlich :-)

echo "$verabschiedung $name";