2 Star 2 Fork 1

StatX/mpdf

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
Cache.php 2.81 KB
一键复制 编辑 原始数据 按行查看 历史
Jake Jackson 提交于 2025-08-28 10:36 +08:00 . Cache: Inherit Parent Directory Permissions
<?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->createDirectory($basePath)) {
return false;
}
}
if (!is_writable($basePath) || !is_dir($basePath)) {
return false;
}
return true;
}
protected function createDirectory($basePath)
{
$permissions = $this->getPermission($this->getExistingParentDirectory($basePath));
if (! mkdir($basePath, $permissions, true)) {
return false;
}
return true;
}
protected function getExistingParentDirectory($basePath)
{
$targetParent = dirname($basePath);
while ($targetParent !== '.' && ! is_dir($targetParent) && dirname($targetParent) !== $targetParent) {
$targetParent = dirname($targetParent);
}
return realpath($targetParent);
}
protected function getPermission($basePath, $fallbackPermission = 0777)
{
if (! is_dir($basePath)) {
return $fallbackPermission;
}
$result = fileperms($basePath);
return $result ? $result & 0007777 : $fallbackPermission;
}
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) === '.';
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
PHP
1
https://gitee.com/statx/mpdf.git
git@gitee.com:statx/mpdf.git
statx
mpdf
mpdf
development

搜索帮助