cstuder / temporal-shelf
根据年/月/日对目录结构中的文件进行归档
Requires (Dev)
- mikey179/vfsstream: 1.6.8
- phpunit/phpunit: ^9
README
PHP 包,可根据年/月/日对目录结构中的文件进行归档。
例如,将文件 data.txt 复制到 ..../archive/2020/11/09/1604953664_data.txt。
为 api.existenz.ch 和间接为 Aare.guru 创建。截至 2020 年已投入生产使用。
安装
composer require cstuder/temporal-shelf
示例用法
<?php require('vendor/autoload.php'); $shelf = new \cstuder\TemporalShelf\TemporalShelf($targetDirectory); $shelvedFilename = $shelf->shelveFile($filename);
请参阅 docs/example.php 以获取完整的示例。
文档
temporal-shelf 库将文件复制到货架(文件存档)。货架是一个目录结构,默认路径包含当前年、月和日。此外,文件将获得一个包含当前时间戳的前缀。
例如:文件 download.txt 被存档到 /archive/2020/10/21/1603308783_download.txt。
目录结构将自动生成,权限设置为 0755。
路径($directoryPattern)和前缀($prefixPattern)都可以通过字符串进行配置,然后通过 PHP 的 DateTime::format 方法传递。
示例:将 $directoryPattern = "Y/W" 和 $prefixPattern = "N_" 设置为将文件存档到 /archive/2020/43/3_download.txt(为每年生成一个周目录)。
默认情况下,如果存档中已存在具有相同目标名称的文件,将抛出异常。这可以通过 OverwriteOptions 值进行配置。
如果文件不可读、目录结构无法构建或复制失败,则抛出异常。
复制文件。原始文件保持不变,您需要自行清理。
故意保持库的简单性,并且不很好地处理非字母数字的目录或文件前缀模式。此外,请保持货架目录不受其他文件的影响。
__construct(string $shelfDirectory, string $directoryPattern = 'Y/m/d', string $filePrefixPattern = 'U_', string $timezone = 'UTC', int $overwriteOption = Options\OverwriteOptions::EXCEPTION_ON_OVERWRITE)
创建 TemporalShelf 对象并设置配置。
$shelfDirectory 是目标存档目录的根。
$directoryPattern 是文件要排序的子目录的模式。
$filePrefixPattern 是存档时添加到文件名的前缀。将其设置为 '' 以禁用前缀。
$timezone 是用于将文件的时间戳转换为目录路径的时间区域标识符。
$overwriteOption 确定当目标文件名已存在于货架目录中时的行为。
不验证货架目录。
shelveFile($filename, int $timestamp = null): string
使用当前配置和可选的时间戳存档文件。如果时间戳为 null,则取当前时间。
返回存档文件的完整路径。
findAllShelvedFiles(int $sortOrder = Options\SortOrderOptions::ASCENDING): array
返回货架目录中所有文件的路径数组。所有文件,而不仅仅是存档文件。
$sortOrder 确定数组的顺序(ASCENDING|DESCENDING)。
findFreshestFile(): ?string
返回货架中最新的文件的路径。如果没有找到文件,则返回 null。
是 findAllShelvedFiles(Options\SortOrderOptions::DESCENDING)[0] 的快捷方式。
测试
运行 composer test 以执行 PHPUnit 测试套件。
发布
- 将更改添加到变更日志中。
- 创建一个新的标签
vX.X.X。 - 推送。
许可证
MIT。
作者
Christian Studer cstuder@existenz.ch,数字存在局。