Ich verwende derzeit den ersten Block, würde aber gerne den zweiten verwenden, wenn er funktional gleichwertig ist, da er etwas prägnanter ist.
Es gibt einen PHP-Fehler, der dazu führt, dass sie anders funktionieren. Sie können meine Antwort einchecken.
– Ryszard Jędraszyk
28. Mai 2019 um 18:45 Uhr
Amal Murali
Zur Beantwortung Ihrer Frage:
ob_get_clean() führt im Wesentlichen sowohl ob_get_contents() als auch ob_end_clean() aus.
Ja. Es ist funktional gleichwertig.
Fall 1:
ob_get_contents() + ob_end_clean():
ob_get_contents — Gibt den Inhalt des Ausgabepuffers zurück
ob_end_clean — Säubern (löschen) Sie den Ausgabepuffer und schalten Sie die Ausgabepufferung aus
Im Grunde speichern Sie also den Inhalt des Ausgabepuffers in einer Variablen und löschen ihn dann mit ob_end_clean().
Fall 2:
ob_get_clean — Holt den aktuellen Pufferinhalt und löscht den aktuellen Ausgabepuffer
Sie speichern den Pufferinhalt in einer Variablen und dann wird der Ausgabepuffer gelöscht.
Was Sie tun, ist im Wesentlichen dasselbe. Ich sehe also nichts Falsches darin, hier den zweiten Codeblock zu verwenden, da beide dasselbe tun.
Vielen Dank! Ich dachte, es sei dasselbe, nur um sicherzustellen, dass ich nicht versehentlich etwas Besonderes ändere, das hinter den Kulissen passiert.
– chiliNUSS
22. Juli 2013 um 20:42 Uhr
ob_get_contents() kann verwendet werden, um die Ausgangspufferung fortzusetzen.
$html1 = 'Something!';
$html2 = 'Something!More to say!';
Es gibt einen winzigen Unterschied zwischen
$stuff = ob_get_clean();
und
$stuff = ob_get_contents();
ob_end_clean();
das heißt, letzteres wird ein werfen E_NOTICE wenn zum Zeitpunkt des Aufrufs kein aktiver Ausgabepuffer vorhanden ist und ersterer nicht. Das Auslösen des Hinweises scheint mir tatsächlich das vernünftigere Verhalten zu sein, denn wenn Sie diese Funktionen ohne einen Ausgabepuffer aufrufen, machen Sie wahrscheinlich etwas falsch!
Wenn Sie sich wirklich vergewissern möchten, dass es keine weiteren Unterschiede zwischen diesen Funktionen gibt (es gibt keine), können Sie in die Definitionen von eintauchen ob_get_contents, ob_end_clean und ob_get_clean in der Quelle. Es gibt eine seltsame Fehlerbehandlung für unmögliche Fälle in ob_get_clean das sollte nie erreicht werden, aber abgesehen davon können Sie sehen, dass die Verhaltensweisen wie beschrieben sind.
Ryszard Jędraszyk
Basierend auf der Dokumentation,
ob_get_contents() + ob_end_clean()
soll genauso funktionieren wie:
ob_get_clean()
Aufgrund eines Fehlers in PHP ist dies jedoch nicht der Fall. Roland von nextendweb hat einen Fehlerbericht eingereicht:
Wenn Sie ob_start mit Callback verwenden, wird der Callback nicht ausgeführt, wenn Sie ob_get_clean() auf denselben Ausgabepuffer verwenden. Der Rückruf wird übersprungen, was zu unerwarteten Ergebnissen führt. Ich denke, es ist ein Fehler.
Also, wenn Sie einen Rückruf an übergeben ob_start()müssen Sie verwenden
$content = ob_get_contents();
ob_clean();
Anstatt von:
$content = ob_get_clean();
Beim Testen in der Sandbox werden Sie feststellen, dass alle PHP-Versionen davon betroffen sind.
11876500cookie-checkob_get_contents + ob_end_clean vs ob_get_cleanyes
Es gibt einen PHP-Fehler, der dazu führt, dass sie anders funktionieren. Sie können meine Antwort einchecken.
– Ryszard Jędraszyk
28. Mai 2019 um 18:45 Uhr