Sätt på/av output buffering i php.ini

  • Författare
  • Meddelande
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10921
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Sätt på/av output buffering i php.ini

Inlägg23 jan 2015, 11:52

Output buffering är ett sätt att undvika felmeddelanden i form av :
Warning: Cannot modify header information - headers already sent by (output started at /home/saxon/teachers/tek/mos/www/test/1.php:2) in /home/saxon/teachers/tek/mos/www/test/2.php on line 4

eller
Warning: Cannot modify header information - headers already sent by (output started at /usr/home/mos/htdocs/dbwebb.se/htmlphp/kmom04/me2/incl/config.php:4) in /usr/home/mos/htdocs/dbwebb.se/htmlphp/kmom04/me2/incl/test/kmom03_sessiondestroy.php on line 17


Med output buffering så buffras all output och skickas när den är klar. Du ändrar detta beteende i php.ini-filen eller med en .htaccess-fil.

PHP Output buffering är en inställning som gör att du kan få olika fel på din utvecklingsmaskin och på din produktionsserver (studentservern).

Så här står det i min php.ini-fil.

; Output buffering is a mechanism for controlling how much output data
; (excluding headers and cookies) PHP should keep internally before pushing that
; data to the client. If your application's output exceeds this setting, PHP
; will send that data in chunks of roughly the size you specify.
; Turning on this setting and managing its maximum buffer size can yield some
; interesting side-effects depending on your application and web server.
; You may be able to send headers and cookies after you've already sent output
; through print or echo. You also may see performance benefits if your server is
; emitting less packets due to buffered output versus PHP streaming the output
; as it gets it. On production servers, 4096 bytes is a good setting for performance
; reasons.
; Note: Output buffering can also be controlled via Output Buffering Control
; functions.
; Possible Values:
; On = Enabled and buffer is unlimited. (Use with caution)
; Off = Disabled
; Integer = Enables the buffer and sets its maximum size in bytes.
; Note: This directive is hardcoded to Off for the CLI SAPI
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
;output_buffering = 4096
output_buffering = Off


På studentservern är output_buffering = Off vilket normalt ger fler fel och tvingar oss att skriva vår kod lite bättre. Det är bra för utvecklingsmiljöer.

När det gäller produktionsmiljöer så är det bättre att använda något i stil med output_buffering = 4096 eftersom det kan dölja vissa fel i koden.

Det bästa du kan göra i dessa kurser är att sätta output buffering till Off, så slipper du bekymmer när du laddar upp webbsidorna till studentservern.

Fel som påverkas är bland annat:

* "Headers already sent" när man försöker göra redirects till en annan sida.
* Felaktig teckenkodning av filer, tex UTF-8 BOM
* Tomma tecken innan PHP-starttag" <?php"
* Tomma tecken eller rader efter avslutande PHP-tagg "?> ".

Editera din konfig-fil php.ini enligt ovan och starta om apache.

Tidigare kan du ha sett mig använda ett funktionsanrop för att försöka uppnå samma sak.
Kod: Markera allt
ini_set('output_buffering', 0);   // Do not buffer outputs, write directly


Men, nej, det fungerar inte att sätta denna inställningen på skript-nivå.
http://php.net/manual/en/configuration. ... .modes.php
http://php.net/manual/en/outcontrol.configuration.php

Läs mer om att sätta på felmeddelanden med PHP:
http://dbwebb.se/coachen/visa-felmeddel ... n-php-sida
...
..:
.... /mos
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10921
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Re: Sätt på output buffering i php.ini

Inlägg23 jan 2015, 11:55

Du kan även sätta på output_buffering via en .htaccess-fil.

Kod: Markera allt
#php_value output_buffering 4096
php_value output_buffering Off
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Google [Bot] och 19 gäster