kostenloser Webspace werbefrei: lima-city


Suche auf lima-city

  • in: [PHP] ob_start()

    geschrieben von drewenut

    eine HTML Seite wird über das HTTP Protokoll vom Server an den Browser geschickt. In so einem HTTP Paket sind außer dem HTML Quellcode noch so genannten Header Daten dabei (Cookies, Serverdaten etc...) Dieser Headerdaten müssen oben im Paket stehen, im Anschluss kommt der Datenteil.
    Verschickt werden HTTP Pakete gepackt in mehrere TCP Pakete (welche per IP Adresse verschickt werden) (Sozusagen bekommt der Client erstmal ein TCP Paket welches im sagt warte kurz gleich kommt was, dann kommen viele Pakete die ausgepackt und zu einem langen HTTP string gebaut werden, irgendwann, wenn das PHP Script am Ende ist sendet der Server ein TCP -FIN Paket, das teilt dem Client mit da kommt ncihts mher zeige im Browser an was du bekommen hast.)
    Sobald PHP einen echo Befehl sieht wird so ein Paket gepackt und gesendet. Das setzt aber voraus, dass der HTTP Header bereits gesendet ist, da nicht erst Daten dann Header gesendet werden können.
    Also schickt PHP beim ersten echo/print erst mal die Header Daten los und die Ausgabe dann hinterher.
    Danach kann am Header nichts mehr geändert werden. Deswegen kein session_start() mehr möglich, da die Cookies schon abgeschickt sind.
    Um im gesamten PHP Skript Cookies und HTTP Header manipulieren zu können startet man gleich als erstes im Script den Outputbuffer, sammelt darin alle Ausgaben und gibt sie am Script Ende aus.
    Das sinnvollste ist aber alle Ausgaben in einer Variablen zu sammeln und diese am Ende des Scriptes auszugeben.
    Dann kann man den Outputbuffer nutzen um zu prüfen ob im Script Fehler auftraten, denn auch Fehlermeldungen werden im HTTP Datenteil gesendet. Buffert man sie im Outputbuffer kann man prüfen ob dieser Leer ist (keine Fehler) oder ob was drin steht. das geht aber nur so:
    $output = ob_get_contents(); //Bufferdaten in Variable speichern
    ob_end_clean(); //Buffer verwerfen ohne zu senden
    if(!empty($output)) {
    echo "Fehler: $output";
    } else {
    echo "Keine Fehler"; //bzw. echo $ergebnis
    }


    Der Geschwindigkeitsvorteil die Ausgaben von vielen echos zu buffern ergibt sich vor allem dadurch, dass nicht ständig TCP Pakete gesendet werden, sondern einmal am Ende.

Login zum Webhosting ohne Werbung!