<?php
/***
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\PageCache\Model\App;
class PageCachePlugin
{
/**
* Label for compressed cache entries
*/
const COMPRESSION_PREFIX = 'COMPRESSED_CACHE_';
/**
* Enable type management by adding type tag, and enable cache compression
*
* @param \Magento\Framework\App\PageCache\Cache $subject
* @param string $data
* @param string $identifier
* @param string[] $tags
* @param int|null $lifeTime
* @return array
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function beforeSave(
\Magento\Framework\App\PageCache\Cache $subject,
$data,
$identifier,
$tags = [],
$lifeTime = null
) {
$data = $this->handleCompression($data);
$tags[] = \Magento\PageCache\Model\Cache\Type::CACHE_TAG;
return [$data, $identifier, $tags, $lifeTime];
}
/**
* Enable cache de-compression
*
* @param \Magento\Framework\App\PageCache\Cache $subject
* @param string $result
* @return string|bool
* @throws \Magento\Framework\Exception\LocalizedException
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function afterLoad(
\Magento\Framework\App\PageCache\Cache $subject,
$result
) {
if ($result && strpos($result, self::COMPRESSION_PREFIX) === 0) {
$result = function_exists('gzuncompress')
? gzuncompress(substr($result, strlen(self::COMPRESSION_PREFIX)))
: false;
}
return $result;
}
/**
* Label compressed entries and check if gzcompress exists
*
* @param string $data
* @return string
*/
private function handleCompression($data)
{
if (function_exists('gzcompress')) {
$data = self::COMPRESSION_PREFIX . gzcompress($data);
}
return $data;
}
}
|