azbosakov / filesystem-chroot
文件系统chroot抽象 - 复制、移动、删除、列表 - 相对于定义的根目录。
This package is auto-updated.
Last update: 2024-09-11 03:19:45 UTC
README
文件系统chroot。使用现有的目录路径作为根目录初始化。大部分的方法操作于传递给构造函数的根目录相对路径。
该类包含路径归一化、复制、移动、删除、列表等函数。方法名称和行为灵感来源于相应的UNIX命令 - cp
、mv
、rm
、ls
、rmdir
、find
。
方法参考
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
删除路径。如果 $rf
为 true,则递归删除目录,类似于 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
删除目录。如果目录非空,则失败,除非 $recursive
为 true,以进行递归删除。使用 $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()
。参数是 文件系统 路径,而不是本地路径。