Der Blogger ist an verschiedenen Internet-Technologien interessiert. Er ist oft wortreich und wird oft von Zwangsstörungen begleitet. Wenn Sie denken, dass der Artikel für Sie hilfreich ist folgen Sie mir. Bitte geben Sie „Dark Blue Scythe“ an
1. Es sind Probleme aufgetreten
Ich frage mich, ob Sie welche haben Diese beiden Situationen sind mir noch nie begegnet:
Wenn Sie auf die beiden oben genannten Situationen stoßen oder in Zukunft möglicherweise auf ein solches Problem stoßen, können Sie es markieren, damit es beim nächsten Mal schnell gelöst werden kann.
2. Prinzip
Auf den Punkt kommen.
Das Folgende ist eine großartige Einführung der PHP-Ausgabesteuerung Ausgabepuffer
Versuchen Sie zunächst den Effekt des folgenden Codes
<?php if (ob_get_level() == 0){ ob_start() }else{ exit(0);};//开始缓冲 for ($i = 0; $i<10; $i++){ echo "Line to show.\n<br />";//不直接输出,先存入缓冲区中 ob_flush();//将缓冲区的数据输出出来 flush();//将缓冲区的数据输出出来 sleep(2);//暂停两秒 } echo "Done."; ob_end_flush();//关闭并清理缓冲区
Das Prinzip besteht darin, dass PHP die Daten in den Puffer (Puffer) legt. Bei Bedarf geben wir die gepufferten Daten aus Verwechselt mit Cache.
Der Vorteil hiervon ist, dass dadurch einerseits ein cooler Effekt ähnlich einem verzögerten Laden erzielt werden kann, andererseits aber auch der Druck auf Server und Client verringert werden kann Andernfalls ist bei der Ausgabe großer Datenmengen nicht genügend Speicher vorhanden.
Hinweis: ob_flush() und flush() werden zum Leeren von Pufferdaten verwendet, offizielle Empfehlungen verwenden jedoch zusammen, denn obwohl Sie unter den meisten Webservern den Puffer nur mit ob_flush() leeren können, funktioniert in einigen Fällen, wie zum Beispiel bei Apache, manchmal der Aufruf von flush() , daher wird für die Portabilität Ihres Codes empfohlen, flush() unmittelbar nach ob_flush() hinzuzufügen.
Da wir nun das Prinzip kennen, lösen wir die beiden eingangs genannten Probleme.
3. Lösen Sie das Problem der steckengebliebenen Ausgabe von Millionen von Daten auf einer einzigen Seite
<?php ob_start(); $data = [1,2,3,4,5,6,7,8,9,10];//实际数据更多,为方便距离假设浏览器一次输出10条会卡死 $per = 3;//每次输出3条,可以改成1000 for ($i = 0;$i < count($data); $i+= $per){ for($j = $i; $j < $i + $per && $j <count($data); $j++){ echo $data[$j]; } ob_flush(); flush(); sleep(2); } echo "Done."; ob_end_flush();
4 .Lösen Sie das Problem des Hängenbleibens, wenn die Header-Datei zu groß zum Herunterladen ist
<?php header('Content-type: application/txt');//输出类型 ob_start(); $data = "qwertyuioasdfghjkl";//文件内容,file_get_contents($file) $per = 15;//每次输出15个字符,可以改成1000或更大 for ($i = 0;$i < strlen($data); $i+= $per){ for($j = $i; $j < $i + $per && $j <strlen($data); $j++){ echo $data[$j]; } sleep(2); ob_flush(); flush(); } echo "Done."; ob_end_flush();
Das Obige führt PHP in die zeilenweise Ausgabe von Daten ein und löst zwei häufige Pufferprobleme. Ich hoffe, dass es für Freunde, die sich für PHP-Tutorials interessieren, hilfreich sein wird.