Flush-systemets Buffertar: Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
(Skapade sidan med '== Flushing System Buffers == PHP tillhandahåller två relaterade sätt att spola (skicka och ta bort innehållet i) systembuffrar: genom att anropa flush() och genom att aktivera implicit flushing med ob_implicit_flush() eller inställningen implicit_flush i php.ini. === Output Flushing Behaviour === När implicit flushing är inaktiverat kommer PHP endast att spola utgången när flush() anropas eller när skriptet avslutas. När implicit flushing är aktiverat kom...')
(Ingen skillnad)

Versionen från 11 oktober 2024 kl. 14.06

Flushing System Buffers

PHP tillhandahåller två relaterade sätt att spola (skicka och ta bort innehållet i) systembuffrar: genom att anropa flush() och genom att aktivera implicit flushing med ob_implicit_flush() eller inställningen implicit_flush i php.ini.

Output Flushing Behaviour

När implicit flushing är inaktiverat kommer PHP endast att spola utgången när flush() anropas eller när skriptet avslutas.

När implicit flushing är aktiverat kommer PHP att försöka spola efter varje kodblock som resulterar i utdata. Utdata i detta sammanhang är data med icke-noll längd som:

  • finns utanför <?php ?>-taggarna
  • skrivs ut med språkkonstruktioner och funktioner vars explicita syfte är att skriva ut användarvariabler eller strängar, som t.ex. echo, print, printf(), var_dump(), var_export(), vprintf()
  • skrivs ut av funktioner vars syfte är att samla in och skriva ut data/information om det körande skriptet eller PHP, såsom debug_print_backtrace(), phpcredits(), phpinfo(), ReflectionExtension::info()
  • skrivs ut av PHP vid ett ohanterat undantag eller ett ohanterat fel (beroende på inställningarna för display_errors och error_reporting)
  • allt som skrivs till php://output

Notera: Att skriva ut tomma strängar eller skicka headers anses inte vara utdata och kommer inte att resultera i en spolningsoperation.

Begränsningar

Denna funktionalitet kan inte spola användarnivåns utdata buffrar. För att använda dessa tillsammans måste användarnivåns utdata buffrar spolas innan systembuffrarna för att PHP ska producera någon utdata.

Skillnader i SAPI-flushing

Även om flushing implementeras på olika sätt för varje SAPI, faller dessa implementationer in i två kategorier:

  • SAPIs som används i en webbkontext kommer först att spola headers följt av utdata. Apache2Handler, CGI, FastCGI och FPM är sådana SAPIs.
  • Andra SAPIs, såsom CLI och embed, spolar endast utdata.