[TASK] Remove the "@todo define visibility" in ext:frontend
[Packages/TYPO3.CMS.git] / typo3 / sysext / frontend / Classes / Utility / CompressionUtility.php
1 <?php
2 namespace TYPO3\CMS\Frontend\Utility;
3
4 /**
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16 /**
17 * This class contains compression functions for the TYPO3 Frontend. It can be
18 * used only in EXT:cms/tslib/index_ts.php
19 *
20 * @author Dmitry Dulepov <dmitry@typo3.org>
21 */
22 class CompressionUtility implements \TYPO3\CMS\Core\SingletonInterface {
23
24 /**
25 * Accumulates content length for the compressed content. It is necessary to
26 * replace the Content-length HTTP header after compression if it was added
27 * by TYPO3 before compression.
28 *
29 * @var integer
30 */
31 protected $contentLength = 0;
32
33 /**
34 * Corrects HTTP "Content-length" header if it was sent by TYPO3 and compression
35 * is enabled.
36 *
37 * @param string $outputBuffer Output buffer to compress
38 * @param integer $mode One of PHP_OUTPUT_HANDLER_xxx constants
39 * @return string Compressed string
40 * @see ob_start()
41 * @see ob_gzhandler()
42 */
43 public function compressionOutputHandler($outputBuffer, $mode) {
44 // Compress the content
45 $outputBuffer = ob_gzhandler($outputBuffer, $mode);
46 if ($outputBuffer !== FALSE) {
47 // Save compressed size
48 $this->contentLength += strlen($outputBuffer);
49 // Check if this was the last content chunk
50 if (0 != ($mode & PHP_OUTPUT_HANDLER_END)) {
51 // Check if we have content-length header
52 foreach (headers_list() as $header) {
53 if (0 == strncasecmp('Content-length:', $header, 15)) {
54 header('Content-length: ' . $this->contentLength);
55 break;
56 }
57 }
58 }
59 }
60 return $outputBuffer;
61 }
62
63 }