1

I am using slim version 3.8 and I want to disable outputBuffering and show all errors: Following is my simple Hello World program.

require_once(dir.'/vendor/autoload.php');

$configuration = [
    'settings' => [
        'displayErrorDetails' => true,
        'outputBuffering' => false,
    ],
];

$app = new \Slim\App($configuration);

// Add route callbacks
$app->get('/', function ($request, $response, $args) {
    echo "here";
    return $response->withStatus(200)->write('Hello World!');
});

// Run application
$app->run();

If I comment out echo "here"; then it works fine. But this code is throwing exception - 500 internal error saying that "Unexpected data in output buffer. Maybe you have characters before an opening". Can someone please tell me what's going wrong here?

Branel Moro
  • 132
  • 2
  • 9
  • If you are using an framework, you are forced to do it like the framework wants. But to answer your question: In a framework you will NOT echo stuff by yourself. You have to use methods like `write()` for that. If you echo stuff and the framework tries to set an `header()` after that, it fails `Unexpected data in output buffer` http://stackoverflow.com/questions/2832010/what-is-output-buffering. That it. – JustOnUnderMillions Apr 28 '17 at 11:26

1 Answers1

1

It's working as intended. You need to add addContentLengthHeader => false to your settings key in $configuration.

Setting outputBuffering to false means that the response object doesn't know about any data you echo out. Therefore, when it comes to automatically add the content-length header, it notices a mis-match and you get the "Unexpected data in output buffer" error. Hence, you need to disable automatically setting the content-type header.

Rob Allen
  • 12,643
  • 1
  • 40
  • 49