vertilia / filesystem
文件系统助手
v1.0.1
2021-11-18 22:54 UTC
Requires (Dev)
- phpunit/phpunit: ^9.5
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()); }