vertilia/filesystem

文件系统助手

v1.0.1 2021-11-18 22:54 UTC

This package is auto-updated.

Last update: 2024-09-19 05:03:21 UTC


README

实现有用功能的文件系统助手。

用法

  • normalizePath()

将路径转换为规范形式,删除前导和尾部斜杠(/)。

print_r(Vertilia\Filesystem\Filesystem::normalizePath('//b/../a//b/c/./d//'));
// outputs: 'a/b/c/d'
  • syncSymlinkDir()

给定外部符号链接和本地符号链接,比较符号链接的目标,如果不同,将外部文件夹复制到本地文件夹,并切换本地符号链接。处理本地符号链接TTL,使用锁文件在多进程环境下的高负载下管理竞争条件。

以下示例描述了一个共享资源上的文件夹,需要将其最新文件结构镜像到本地文件系统。每个主机负责维护外部资源在本地上的本地副本。当前发布版由“release”文件夹内的“current”符号链接标识。

  • 在共享资源上
/shared/release
├── v1.0.0
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
├── v1.0.1
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
├── v1.0.2
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
└── current -> v1.0.2
  • 在每个主机上
/local/release
├── v1.0.0
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
├── v1.0.1
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
└── current -> v1.0.1

以下代码片段在每个主机上执行将验证“/local/release”文件夹中“current”符号链接的新鲜性,如果它大于600秒,将

  • 尝试创建锁文件或退出

    • 如果锁文件存在但大于60秒,删除文件然后退出
  • 验证“/local/release”和“/shared/release”中的“current”符号链接的目标

  • 如果目标指向同一发布版

    • 修改本地“current”符号链接
    • 删除锁文件
    • 退出
  • 否则

    • 将“/shared/release/v1.0.2”的内容复制到“/local/release/v1.0.2”
    • 将“/local/release/current”符号链接切换到指向“v1.0.2”
    • 删除锁文件
    • 退出

代码片段

try {
    Vertilia\Filesystem\Filesystem::syncSymlinkDir(
        '/shared/release/current',
        '/local/release/current',
        600,
        60
    );
} catch (RuntimeException $e) {
    $logger->log($e->getMessage());
}