Bevor Sie OB_end_Clean () verwenden, müssen Sie sicherstellen, dass der Ausgangspuffer eingeschaltet ist. PHP aktiviert standardmäßig keine Ausgabepufferung. Wenn die Funktion ohne Aktivierung aufgerufen wird, wird das Programm eine Warnung werfen. Es ist üblich, den Ausgangspuffer explizit über OB_Start () einzuschalten, bevor Sie einen Ausgangsvorgang ausführen.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-comment">// Einige Ausgangsvorgänge durchführen</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// Löschen und schließen Sie den Puffer</span></span><span>
</span></span>
Wenn Sie OB_Start () nicht anrufen, verwenden Sie einfach ob_end_clean () , und das Programm fordert einen Fehler auf:
<span><span><span class="hljs-built_in">Warning</span></span><span>: ob_end_clean(): failed </span><span><span class="hljs-keyword">to</span></span><span> </span><span><span class="hljs-keyword">delete</span></span><span> buffer. </span><span><span class="hljs-keyword">No</span></span><span> buffer </span><span><span class="hljs-keyword">to</span></span><span> </span><span><span class="hljs-keyword">delete</span></span><span>.
</span></span>
Daher müssen Entwickler sicherstellen, dass die Ausgabepufferung ordnungsgemäß gestartet wird, bevor sie ob_end_clean () aufgerufen werden.
Ein weiterer einfacher Fehler besteht darin, OB_end_Clean () ohne Ausgabe auf einem Puffer aufzurufen. Wenn der Puffer leer ist, hat das Aufrufen der Funktion keinen Einfluss auf das Programm, aber manchmal verursacht dies unnötige Probleme beim Debuggen. Um sicherzustellen, dass Inhalte im Puffer enthalten sind, können Sie zuerst OB_get_Contents () verwenden, um den Inhalt des Puffers zu überprüfen, und dann zu entscheiden, ob ein Reinigungsvorgang durchgeführt werden soll.
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-comment">// Einige Operationen, die keine Ausgabe erzeugen</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>()) {
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>();
}
</span></span>
Dies vermeidet unnötige Warnmeldungen und stellt sicher, dass OB_END_CLEAN () nur ausgeführt wird, wenn sich im Puffer Inhalte befindet.
In PHP wird der Ausgangspuffer in einer hierarchischen Struktur verwaltet, und mehrere Aufrufe von OB_START () bilden einen Pufferstapel. Bei Verwendung von OB_end_Clean () wird der obere Puffer gelöscht und schließt. Wenn Sie mehrere Puffer verschachtelt haben, wirkt sich das Aufrufen von OB_end_Clean () nur auf den innersten Puffer aus, während noch andere Puffer existieren.
Stellen Sie daher bei Verwendung von OB_end_Clean () sicher, dass Sie den richtigen Puffer reinigen. Wenn Sie alle Puffer im gesamten Pufferstapel schließen möchten, können Sie OB_END_FLUSH () verwenden, um alle Puffer zu reinigen und ihre Inhalte auszugeben, oder die Anzahl der Schichten des Puffers über ob_get_level () überprüfen.
<span><span><span class="hljs-comment">// Überprüfen Sie die Anzahl der Pufferschichten</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ob_get_level</span></span><span>() > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// Reinigen Sie den aktuellen Puffer</span></span><span>
}
</span></span>
OB_END_CLEAN () wird hauptsächlich verwendet, um den Ausgangspuffer zu löschen, wenn Sie keinen Inhalt an den Browser senden möchten, insbesondere bevor Sie die HTTP -Antwort -Header -Informationen verarbeiten. Durch die Verwendung eines Puffers kann nach dem Senden eines Antwortheaders eine unerwartete Ausgabe des Inhalts verhindern, was zu einer falschen oder nicht modifizierten Antwort führt. In einigen Szenarien ist jedoch keine Ausgabepufferung erforderlich (z. B. schnelle kleine Skripte), und die Verwendung von OB_end_Clean () kann unnötige Komplexität bringen.
In einigen einfachen AJAX -Anforderungen oder API -Antworten kann beispielsweise eine übermäßige Verwendung des Puffermanagements die Programmkomplexität erhöhen, wenn keine spezifische Anforderung vorliegt. Neulingsentwickler sollten entscheiden, ob sie Puffer basierend auf den tatsächlichen Anforderungen verwenden sollen.
Der Ausgangspuffer belegt eine bestimmte Menge an Speicher. Wenn das Programm häufig den Puffer ein- und ausschaltet, kann es zu Speicherabfällen führen. Insbesondere bei großen PHP -Anwendungen können häufige Pufferoperationen einen gewissen Einfluss auf die Leistung haben. Stellen Sie bei Verwendung von OB_end_Clean () sicher, dass keine nutzlosen Pufferreste vorhanden sind, um Speicherlecks zu vermeiden.
Um den Speicher besser zu verwalten, können Entwickler Ob_get_level () verwenden, um zu bestimmen, ob zusätzliche Puffer vorhanden ist, und sie rechtzeitig aufräumen.
<span><span><span class="hljs-comment">// Überprüfen Sie, ob Sie zusätzliche Puffer haben, bevor Sie sie verwenden</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-title function_ invoke__">ob_get_level</span></span><span>() > </span><span><span class="hljs-number">1</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// Reinigen Sie alle unerwünschten Puffer</span></span><span>
}
</span></span>
Sowohl OB_END_CLEAN () als auch OB_END_FLUSH () werden verwendet, um Puffer zu schließen, verhalten sich jedoch anders. OB_END_CLEAN () verwirft den Inhalt im Puffer, während obs_end_flush () den Inhalt des Puffers an den Browser oder Client ausgibt und den Puffer schließt.
Wenn Sie den Inhalt des Puffers ausgeben und an den Browser senden möchten, können Sie OB_END_FLUSH () verwenden. Wenn Sie nur den Puffer löschen möchten, ohne ihn auszugeben, verwenden Sie OB_end_Clean () . Das Verständnis ihrer Unterschiede ist für die korrekte Verwendung der Ausgangspufferung sehr wichtig.