Heim > Artikel > Backend-Entwicklung > Ich möchte eine kleine Frage zur Endlosschleife stellen.
Warum stürzt der Browser beim Schreiben einer Endlosschleife direkt ab, kann aber weiterhin in der Befehlszeile ausgeführt werden? Liegt es nur daran, dass die Vereinbarung anders ist? Bitte geben Sie mir eine ausführliche Erklärung.
<code>while(true){ echo 'a'; }</code>
Warum stürzt der Browser beim Schreiben einer Endlosschleife direkt ab, kann aber weiterhin in der Befehlszeile ausgeführt werden? Liegt es nur daran, dass die Vereinbarung anders ist? Bitte geben Sie mir eine ausführliche Erklärung.
<code>while(true){ echo 'a'; }</code>
Wenn Sie auf der Browserseite testen, da PHP über verschiedene Caches verfügt
Sie können zuerst ob_end_flush
aufrufen und dann in der Schleife „flush()“ aufrufen
Auf diese Weise wird der Inhalt ausgegeben
Sie müssen jedoch auch die Standardausführungszeit von PHP und den Timeout-Mechanismus des Browsers berücksichtigen
Die Ausführungszeit von PHP im CLI-Modus ist standardmäßig unbegrenzt und es sind keine Funktionen wie ob standardmäßig aktiviert
http://www.php100.com/manual/...
php.ini-Einstellungsoptionen überschreiben
implicit_flush
: Im Befehlszeilenmodus werden alle Ausgaben von print und echo sofort und ohne Pufferung an den Ausgabeport geschrieben. Wenn Sie die Standardausgabe verzögern oder steuern möchten, können Sie weiterhin die Einstellung für die Ausgabepufferung verwenden.
max_execution_time
: Aufgrund der unendlichen Möglichkeiten, PHP in einer Shell-Umgebung zu verwenden, ist die maximale Laufzeit auf einen unendlichen Wert eingestellt. Die Ausführung einer für das Web entwickelten Anwendung dauert möglicherweise nur wenige Sekunden, während die Ausführung einer Shell-Anwendung möglicherweise viel länger dauert.
Die max_execution_time von php.ini gibt die Programmausführungszeit an. Wenn diese Einstellung überschritten wird, gibt das Skript einen schwerwiegenden Fehler zurück. Der Standardwert beträgt 30 Sekunden und die Befehlszeile steuert dies nicht.
Sie können bestehenset_time_limit(0)
Es gibt keine zeitliche Begrenzung