Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[TASK] Move FE OutputCompression to PSR-15
Output Compression should be separated from the request handling, and is now moved into a PSR-15 middleware. This change also decouples Output Compression from Bootstrap, and the Request Handler, so it can be re-used in other areas. Intentionally omitted is a proper cleanup (ob_get_clean) and an explicit write to the response object (in the middleware). That's up for later patches. The idea of this patch is to keep functionality identical for now. Resolves: #83931 Releases: master Change-Id: Ic84707cac6c858698f290069f6aa492724ce0602 Reviewed-on: https://review.typo3.org/55746 Reviewed-by: Benjamin Franzke <bfr@qbus.de> Tested-by: Benjamin Franzke <bfr@qbus.de> Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Mathias Schreiber <mathias.schreiber@typo3.com> Tested-by: Mathias Schreiber <mathias.schreiber@typo3.com> Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
- Loading branch information
Showing
3 changed files
with
67 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 61 additions & 0 deletions
61
typo3/sysext/frontend/Classes/Middleware/OutputCompression.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
<?php | ||
declare(strict_types = 1); | ||
namespace TYPO3\CMS\Frontend\Middleware; | ||
|
||
/* | ||
* This file is part of the TYPO3 CMS project. | ||
* | ||
* It is free software; you can redistribute it and/or modify it under | ||
* the terms of the GNU General Public License, either version 2 | ||
* of the License, or any later version. | ||
* | ||
* For the full copyright and license information, please read the | ||
* LICENSE.txt file that was distributed with this source code. | ||
* | ||
* The TYPO3 project - inspiring people to share! | ||
*/ | ||
|
||
use Psr\Http\Message\ResponseInterface; | ||
use Psr\Http\Message\ServerRequestInterface; | ||
use Psr\Http\Server\MiddlewareInterface; | ||
use Psr\Http\Server\RequestHandlerInterface; | ||
use TYPO3\CMS\Core\Utility\GeneralUtility; | ||
use TYPO3\CMS\Core\Utility\MathUtility; | ||
use TYPO3\CMS\Frontend\Utility\CompressionUtility; | ||
|
||
/** | ||
* Sets up output compression | ||
* | ||
* @internal | ||
*/ | ||
class OutputCompression implements MiddlewareInterface | ||
{ | ||
/** | ||
* Clears all output and checks if a compression level is set | ||
* | ||
* @param ServerRequestInterface $request | ||
* @param RequestHandlerInterface $handler | ||
* @return ResponseInterface | ||
*/ | ||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface | ||
{ | ||
// Throw away all output that may have happened during bootstrapping by weird extensions | ||
ob_clean(); | ||
// Initialize output compression if configured | ||
$this->initializeOutputCompression(); | ||
return $handler->handle($request); | ||
} | ||
|
||
/** | ||
* Initialize output compression if configured | ||
*/ | ||
protected function initializeOutputCompression() | ||
{ | ||
if ($GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel'] && extension_loaded('zlib')) { | ||
if (MathUtility::canBeInterpretedAsInteger($GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel'])) { | ||
@ini_set('zlib.output_compression_level', (string)$GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel']); | ||
} | ||
ob_start([GeneralUtility::makeInstance(CompressionUtility::class), 'compressionOutputHandler']); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters