In PHP wird der Ausgangspufferungsmechanismus verwendet, um die vom Skript erzeugte Ausgabe zwischenzuspeichern, und er wird erst dann an den Browser gesendet, wenn das Skript ausgeführt wird. Dies gibt zwei Hauptvorteile:
Sie können steuern, wenn der Inhalt ausgegeben wird, sodass eine gewisse Verarbeitung durchgeführt wird, wenn die Seite gerendert wird.
In einigen Fällen kann die Leistung verbessert und die Anzahl der Interaktionen mit dem Browser reduziert werden.
OB_FLUSH () ist eine Ausgangspufferfunktion, die den Inhalt des Ausgangspuffers an den Browser sendet, während er den Inhalt des Puffer nicht löscht. Nach dem Aufrufen von ob_flush () bleibt der Inhalt im Puffer noch erhalten und kann weiterhin verwendet werden.
Flush () ist eine Funktion, mit der der Systemausgangspuffer aktualisiert wird. Es versucht, alles an den Browser zu senden, aber im Gegensatz zu OB_FLUSH () wird der Ausgangspuffer von PHP nicht nur den internen Puffer von PHP gespült. Wenn Flush () aufgerufen wird, drückt PHP den Inhalt im Puffer zum Browser und wartet darauf, dass der Benutzer diese Daten anzeigt.
Obwohl OB_FLUSH () und Flush () die Ausgabe an den Browser senden können, sind ihre Nutzungsszenarien und Effekte unterschiedlich, die spezifischen Unterschiede sind wie folgt:
Merkmal | ob_flush () | spülen() |
---|---|---|
Handlungsobjekt | PHP -Ausgangspuffer | Systemausgangspuffer |
Ob der Puffer löschen soll | Den Puffer nicht räumen | Löschen Sie den Puffer |
Ob Sie sich auf die Aktivierung der Ausgangspufferung verlassen sollen, um zu aktivieren | Abhängig vom Ausgangspufferungsmechanismus | Keine Abhängigkeit vom Ausgangspufferungsmechanismus |
Gemeinsame Szenarien | Ausgangspufferungsvorgang, normalerweise mit OB_Start () verwendet () | Erzwingen Sie den Browser Aktualisierung und Ausgabe |
OB_FLUSH () wird verwendet, um den Inhalt im Puffer an den Browser zu senden, wenn der PHP -Ausgangspuffer eingeschaltet ist und der Puffer selbst nicht gelöscht wird.
Flush () ist eine Ausgangs-Aktualisierungsfunktion auf Systemebene, die den Pufferinhalt an den Browser sendet, der für Situationen geeignet ist, in denen der PHP-Ausgangspufferungsmechanismus nicht abhängt.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Ausgangspufferung einschalten</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Datenausgabe Teil 1,Warten Sie auf das Senden..."</span></span><span>;
</span><span><span class="hljs-comment">// Senden Sie Inhalte an den Browser,Aber der Puffer bleibt</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_flush</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">flush</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Der zweite Teil der Datenausgabe,Zeigen Sie dem Benutzer sofort an。"</span></span><span>;
</span><span><span class="hljs-comment">// Endskript</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Im obigen Beispiel aktiviert Ob_Start () den Ausgangspufferungsmechanismus. OB_FLUSH () gibt die Daten im Puffer in den Browser aus, löscht jedoch den Puffer nicht, sodass der zweite Teil der Ausgabe weiter gepuffert wird, bis das Skript fertig ist.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Starten Sie die Verarbeitungsdaten..."</span></span><span>;
</span><span><span class="hljs-comment">// Erzwingen Sie den Ausgangspuffer Aktualisieren</span></span><span>
</span><span><span class="hljs-title function_ invoke__">flush</span></span><span>();
</span><span><span class="hljs-comment">// Simulieren Sie langlebige Aufgaben</span></span><span>
</span><span><span class="hljs-title function_ invoke__">sleep</span></span><span>(</span><span><span class="hljs-number">2</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Aufgabe Abschluss。"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
In diesem Beispiel erzwingt Flush () den Ausgangspuffer so, dass der Browser den Inhalt von "Verarbeitungsdaten ..." und die nächste "Aufgabe vollständig" sofort empfangen kann. wird nach 2 Sekunden angezeigt. Diese Methode eignet sich besonders für Szenarien, in denen Benutzer Echtzeit-Fortschritte wahrnehmen müssen.
Langlebige Skripte (z. B. Herunterladen, Dateiverarbeitung)
Wenn Sie eine Aufgabe ausführen, deren Abschluss lange dauert (z. B. Datei -Upload oder Download), können Sie OB_FLUSH () und Flush () verwenden, um den Benutzer den Fortschritt zu spüren und Browser -Zeitüberschreitungen zu vermeiden.
Echtzeitdaten Push <br> In Echtzeitdatenanzeigen, Chat-System und anderen Szenarien wird beispielsweise Flush () verwendet, um sicherzustellen, dass Daten in Echtzeit an den Browser des Benutzers gedrückt werden können und vermeiden, dass Benutzer Verzögerungen oder leere Seiten ansehen.
Seitenrendernoptimierung <br> Während des Seitungsrenderungsprozesses können Benutzer mit OB_FLUSH () und Flush () in Kombination einen Teil des Seiteninhalts sehen, während das Skript weiterhin ausgeführt wird, wodurch die Benutzererfahrung verbessert wird.