azbosakov/filesystem-chroot

文件系统chroot抽象 - 复制、移动、删除、列表 - 相对于定义的根目录。

v0.9.3 2019-06-10 15:49 UTC

This package is auto-updated.

Last update: 2024-09-11 03:19:45 UTC


README

文件系统chroot。使用现有的目录路径作为根目录初始化。大部分的方法操作于传递给构造函数的根目录相对路径。

该类包含路径归一化、复制、移动、删除、列表等函数。方法名称和行为灵感来源于相应的UNIX命令 - cpmvrmlsrmdirfind

方法参考

public function __construct(string $rootDir = '/')

$rootDir参数必须是一个存在的目录,相对于类默认的根目录。

例如

  • class default: "/a/b/c/d", $rootDir: "/x/y" 或 "x/y",对象的根目录将是 "/a/b/c/d/x/y"。

  • class default: "/a/b/c/d", $rootDir: "../../x/y",对象的根目录将是 "/a/b/x/y"。

public static function setDefaultRoot(string $rootDir): bool

设置整个类的默认根目录。初始值为"/" - 文件系统根目录。只能更改一次 - 最好在第一次使用类之前。成功更改返回true(首次调用,存在非'/'路径),否则返回false

预期用途 - 在文档根目录设置默认值,然后使用类似以下方式实例化

$imgRoot = new ...\Chroot('/images')

$tplRoot = new ...\Chroot('/templates'),

等。

public static function getDefaultRoot(): string

返回类的默认根目录。

public function getRootDir(): string

返回特定实例的根目录。

public function getUmask(): int

返回用于mkdir()模式参数的umask。模式计算为0777 & ~umask

public function setUmask(int $umask): self

设置umask。返回实例。

public static function normalizePath(string $path, string $relTo = '/'): ?string

$path归一化为绝对路径。如果$path不以'/'开头,则被视为相对于$relTo路径的相对路径。

路径不需要存在。

如果路径无法归一化(太多'..'),则返回null

public function realpath(string $sitePath): ?string

$sitePath归一化为绝对路径,从实例根目录开始。如果$sitePath不以'/'开头,则被视为相对于实例当前工作目录(CWD)的相对路径。

如果路径无法归一化(太多'..'),则返回null

public function __invoke(string $sitePath): ?string

->syspath()的简写,以节省输入。

public function syspath(string $sitePath): ?string

将相对于实例的路径映射到文件系统路径。例如。

实例根目录: "/a/b/c",实例路径: "/x/y" -> "/a/b/c/x/y"

如果$sitePath无法归一化为本地路径,则返回null

public function __toString()

返回实例根目录与实例当前工作目录的连接,因此对象可以在字符串插值中使用,如下所示

...::setDefaultRoot('/srv/doc/root');
...
$imgRoot = new ...\Chroot('/images');   // root = '/srv/doc/root/images'
$imgRoot->cd('big');                    // CWD = '/big'; (string)$imgRoot == '/srv/doc/root/images/big'
$imgFile = 'xxx.jpg';
doSomething("$imgRoot/$imgFile");       // "$imgRoot/$imgFile" == '/srv/doc/root/images/big/xxx.jpg'

public function sitepath(string $sysPath): ?string

->syspath(...)的反向操作。将文件系统路径映射到本地路径,只要系统路径位于实例根目录内部。否则返回null

例如:root: "/a/b/c", $sysPath: "/a/b/c/d/e" -> "/d/e"

public function isFile(string $sitePath): bool

检查 $sitePath 是否为文件。

public function isDir(string $sitePath): bool

检查 $sitePath 是否为目录。

public function cd(string $sitePath): bool

更改实例的当前工作目录。如果成功返回 true,如果 $sitePath 无法标准化则返回 false

public function pwd(): string

返回实例的当前工作目录。

public function ls(string $glob = '*'): array

返回相对于当前工作目录的匹配 $glob 的路径列表。

public function find(string $glob = '*', string $dir = '.'): array

相对于当前工作目录或 $dir 的递归 ->ls(...)

public function cp(string $siteSrc, string $siteDst, bool $overwrite = false): bool

复制文件/目录。如果 $siteDst 以 '/' 结尾,它被视为目标 dirname(...),而 basename(...) 是源的 basename(...)。例如:

  • 源: "/dir111/file111",目标: "/dir222/file222" -> "/dir111/file111" 被复制为 "/dir222/file222"

  • 源: "/dir111/file111",目标: "/dir222/" -> "/dir111/file111" 被复制为 "/dir222/file111"

如果目标存在,则复制失败,除非 $overwrite 为 true。

public function mv(string $siteSrc, string $siteDst, bool $overwrite = false): bool

移动文件/目录。如果 $siteDst 以 '/' 结尾,它被视为目标 dirname(...),而 basename(...) 是源的 basename(...)。例如:

  • 源: "/dir111/file111",目标: "/dir222/file222" -> "/dir111/file111" 被移动为 "/dir222/file222"

  • 源: "/dir111/file111",目标: "/dir222/" -> "/dir111/file111" 被移动为 "/dir222/file111"

如果目标存在,则移动失败,除非 $overwrite 为 true。

public function rm(string $sitePath, bool $rf = false): bool

删除路径。如果 $rftrue,则递归删除目录,类似于 UNIX 的 rm -rf ...。成功返回 true,否则返回 false

public function mkdir(string $sitePath, bool $mkpath = false): bool

创建子目录。如果 $mkpath 为 true,可以创建多级目录,类似于 UNIX 的 mkdir -p ...

public function rmdir(string $sitePath, bool $recursive = false): bool

删除目录。如果目录非空,则失败,除非 $recursivetrue,以进行递归删除。使用 $recursive: true 时,类似于 ->rm(...)$rf: true

public static function rCopy(string $fsSrc, string $fsDst, bool $overwrite = false): bool

递归复制。参数是 文件系统 路径,而不是本地路径。

public static function rRemove(string $fsPath): bool

递归删除。参数是 文件系统 路径,而不是本地路径。

public static function rGlob(string $pattern = '*', string $dir = '.'): array

递归 glob()。参数是 文件系统 路径,而不是本地路径。