cstuder/temporal-shelf

根据年/月/日对目录结构中的文件进行归档

v0.1.0 2020-11-09 20:27 UTC

This package is auto-updated.

Last update: 2024-09-10 04:28:44 UTC


README

PHPUnit tests

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 测试套件。

发布

  1. 将更改添加到变更日志中。
  2. 创建一个新的标签vX.X.X
  3. 推送。

许可证

MIT。

作者

Christian Studer cstuder@existenz.ch,数字存在局。