寫一段死循環,為什麼再瀏覽器直接就崩潰了,而在命令列下可以繼續執行?只是因為走的協議不一樣嗎?求大神給個詳細的解釋。
<code>while(true){ echo 'a'; }</code>
寫一段死循環,為什麼再瀏覽器直接就崩潰了,而在命令列下可以繼續執行?只是因為走的協議不一樣嗎?求大神給個詳細的解釋。
<code>while(true){ echo 'a'; }</code>
如果在瀏覽器端測試, 因為PHP有各種快取
你可以先調用一下ob_end_flush
然後在循環中調用flush()
這樣就會有內容出來了
不過你還要考慮php的默認的執行時間, 和瀏覽器的超時機制
cli模式下 PHP的執行時間預設是不受限制的, 而且也沒有預設開啟ob之類的功能
http://www.php100.com/manual/...
覆蓋 php.ini 設定選項
implicit_flush
:在命令列模式下,所有來自 print 和 echo 的輸出將立即寫入輸出端,而不作任何地緩衝操作。如果希望延緩或控制標準輸出,仍然可以使用 output buffering 設定項目。
max_execution_time
:鑑於在外殼環境下使用 PHP 的無窮的可能性,最大運行時間被設定為了無限值。為 web 開發的應用程式可能只需運行幾秒鐘時間,而外殼應用程式的運行時間可能會長的多。
php.ini的max_execution_time指定了程式執行時間,如果超過了此設置,則腳本傳回一個致命的錯誤。預設值為30秒,而命令列不收此控制。
可以透過set_time_limit(0)
沒有時間方面的限制