Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
Your IP : 18.227.21.101
<?php
namespace Mpdf;
use DirectoryIterator;
class Cache
{
private $basePath;
private $cleanupInterval;
public function __construct($basePath, $cleanupInterval = 3600)
{
if (!is_int($cleanupInterval) && false !== $cleanupInterval) {
throw new \Mpdf\MpdfException('Cache cleanup interval has to be an integer or false');
}
if (!$this->createBasePath($basePath)) {
throw new \Mpdf\MpdfException(sprintf('Temporary files directory "%s" is not writable', $basePath));
}
$this->basePath = $basePath;
$this->cleanupInterval = $cleanupInterval;
}
protected function createBasePath($basePath)
{
if (!file_exists($basePath)) {
if (!$this->createBasePath(dirname($basePath))) {
return false;
}
if (!$this->createDirectory($basePath)) {
return false;
}
}
if (!is_writable($basePath) || !is_dir($basePath)) {
return false;
}
return true;
}
protected function createDirectory($basePath)
{
if (!mkdir($basePath)) {
return false;
}
if (!chmod($basePath, 0777)) {
return false;
}
return true;
}
public function tempFilename($filename)
{
return $this->getFilePath($filename);
}
public function has($filename)
{
return file_exists($this->getFilePath($filename));
}
public function load($filename)
{
return file_get_contents($this->getFilePath($filename));
}
public function write($filename, $data)
{
$tempFile = tempnam($this->basePath, 'cache_tmp_');
file_put_contents($tempFile, $data);
chmod($tempFile, 0664);
$path = $this->getFilePath($filename);
rename($tempFile, $path);
return $path;
}
public function remove($filename)
{
return unlink($this->getFilePath($filename));
}
public function clearOld()
{
$iterator = new DirectoryIterator($this->basePath);
/** @var \DirectoryIterator $item */
foreach ($iterator as $item) {
if (!$item->isDot()
&& $item->isFile()
&& !$this->isDotFile($item)
&& $this->isOld($item)) {
unlink($item->getPathname());
}
}
}
private function getFilePath($filename)
{
return $this->basePath . '/' . $filename;
}
private function isOld(DirectoryIterator $item)
{
return $this->cleanupInterval
? $item->getMTime() + $this->cleanupInterval < time()
: false;
}
public function isDotFile(DirectoryIterator $item)
{
return substr($item->getFilename(), 0, 1) === '.';
}
}
|