2010-12-30 10 views
1

Ich hoffe, dass alle Ferien gut verlaufen.Ausgabepuffer und sterben()/exit() Funktion?

Eine andere PHP-Frage hier. Ich verwende Ausgabepuffer in meinem Skript, da das, was ich kürzlich gelernt habe, ein ungültiger Grund ist (so kann ich später im Skript Kopfzeilen übergeben). Ich merke jetzt, dass ich alle Ausgaben in einer Variablen oder einer anderen Art von Speicher speichern soll, bis ich am Ende des Skripts ausgeben kann, anstatt Ausgabepuffer zu verwenden. Leider habe ich diese Funktionen und die spontane Ausgabe von html bereits in meine Seiten programmiert. Ich hatte gehofft, dieses Problem in Version 2 des Skripts beheben zu können, da ich strenge Fristen für diese Version habe.

Zu der Frage zur Hand. Ich hatte vor, dies zu tun, aber anscheinend arbeiten die Funktionen die (und) exit() nicht so gut mit Ausgabepuffern? Ich habe exit() nach all meinen Fehlermeldungen, und anstatt die Ausführung zu diesem Zeitpunkt zu beenden, scheint es, dass das Skript aufgrund des Ausgabepuffers weiterläuft. Ich habe diese Hypothese getestet, indem ich die Ausgabepuffer gelöscht habe und die exit() - Funktionen wie erwartet funktionieren.

Gibt es eine Möglichkeit, dieses Verhalten zu ändern, oder sollte ich zurück zum Zeichenbrett gehen und anfangen, meine älteren Seiten zu ersetzen? Kann mir bitte jemand erklären, warum wir bis zum Ende produzieren sollen? Ich bin immer am Lernen interessiert.

Vielen Dank im Voraus jeder! Genießt die letzten Tage des Jahres 2010!

+0

@ user509006 - nicht in der Lage zu raten ohne Ihren vorhandenen Code ... – ajreal

Antwort

1

Während ich die verstarkteren und abstrakteren Fragen den intelligenteren Köpfen überlasse, würde ich empfehlen, dass Sie eine Wrapper exit() Funktion erstellen, um den Code zu vereinfachen, wenn Sie Fehler haben. i.e-

if(!$good) 
{ 
    trigger_error('bleh', E_USER_WARNING); 
    errorExit(); 
} 

function errorExit() 
{ 
    ob_flush(); 
    exit(); 
} 

Und ersetzen Sie alle Ihre Ausgänge mit diesem Funktionsaufruf und diese Weise ist der Puffer gespült und das Programm wird zum richtigen Zeitpunkt verlassen.

+0

Ich habe bereits eine Funktion, aber die ob_flush() ist das, was ich brauchte, um es sofort zu beenden! Danke vielmals! – user509006

1

Der Unterschied zwischen Kopfzeile und dem tatsächlichen Seiteninhalt ist im Grunde nur die Position, an der sie auftreten. Wie der Name schon sagt, steht der Header am Anfang der Ausgabe. Danach werden zwei Wagen/Retouren (Symbole eingeben) gesendet und alles danach wird als Inhalt angenommen. Daher, wenn Sie etwas wiederholen und dann die Kopfzeile ändern möchten, kann es nicht getan werden. Der Inhaltsteil hat bereits den Header-Teil geschlossen. Was Sie als neuen Header senden würden, würde jetzt als einfacher Text angezeigt (sollte der PHP-Interpreter Sie nicht stoppen, was er tut).

Wie für den anderen Teil der Frage, ob_flush ist eine gute Lösung wie von Patrick bemerkt.

Verwandte Themen