Breaking: #110250 - Remove implicit output buffering from Bootstrap 

See forge#110250

Description 

The class \TYPO3\CMS\Core\Core\Bootstrap no longer wraps the entire bootstrap and request lifecycle in an implicit output buffer via ob_start() . This buffer was historically opened as the very first action in Bootstrap::init() to swallow accidental stray output (warnings, notices or stray echo / print statements, typically from ext_localconf.php / ext_tables.php of third-party extensions) so it would not corrupt AJAX responses or file downloads. On CLI this buffering was already disabled again in a previous change, as it delayed console output until the process ended and could bloat memory for commands producing a lot of output.

Since responses are fully assembled as PSR-7 message bodies before being emitted, this legacy safety net is not needed anymore.

Along with it, the now unused method Bootstrap::startOutputBuffering() has been removed.

Impact 

Any stray output produced during bootstrap (for example from ext_localconf.php ) is now sent to the client directly instead of being silently discarded later on. This mainly affects binary/file responses and AJAX requests, which relied on the buffer being cleaned right before the response body was emitted.

Calling Bootstrap::startOutputBuffering() now results in a fatal PHP error ( Call to undefined method ).

Affected installations 

TYPO3 installations with extensions that produce accidental output during ext_localconf.php / ext_tables.php loading, which so far was silently swallowed, and installations with custom entry point scripts calling Bootstrap::startOutputBuffering() directly.

Migration 

Remove any accidental output from ext_localconf.php and ext_tables.php files. Extensions that need to suppress their own output must manage output buffering ( ob_start() / ob_end_clean() ) themselves.

Remove calls to Bootstrap::startOutputBuffering() and use ob_start() directly, if the behaviour is still required.