meesterdev / file-wrapper
文件包装器,可按面向对象的方式使用。
Requires
- php: ^8.0|^8.1|^8.2
Requires (Dev)
- phpunit/phpunit: ^9.5|^10
Suggests
- ext-dom: *
- ext-simplexml: *
README
以面向对象的方式处理文件并执行操作。
用法
示例
<?php use MeesterDev\FileWrapper\File; $file = new File(); $file->cd('..'); $file->select('data.json'); $json = $file->readJson();
所有可用公共方法/属性
所有来自SplFileInfo的方法均可用。以下将描述其他方法。
关于文件的一些说明
File类的实例可以指向任何东西:目录、文件、链接,甚至是不存在的东西。
在执行需要这两种类型之一的行为之前,不会区分文件和目录。
属性
string $path
文件当前指向的路径。
构造函数
new File([string $file]);
默认构造函数。您可以使用相对路径和绝对路径。注意,相对路径是从当前工作目录(getcwd()
)应用。
File::createTemporary(string $directory = sys_get_temp_dir(), string $prefix = '')
在给定的目录中创建一个临时文件。名称将用$prefix
前缀。这依赖于PHP功能tmpnam()
,它可能或可能不严格遵循给定的参数。无论如何,返回的File
的$path
属性将被设置为创建的文件。
扫描
$file->directoryContents(bool $recursive = false): File[]
扫描并返回文件中包含的所有目录和文件。这仅在文件本身是目录时才有效。
$file->glob(string $search, int $flags = 0): File[]
扫描并返回匹配$search
字符串的所有目录和文件。这仅在文件本身是目录时才有效。将$flags
直接传递给本地glob()
函数。
读取
$file->readLines(int $flags, $context = null): File[]
返回文件中包含的行的数组。这仅在文件上有效。将$flags
和$context
直接传递给本地file()
函数。
$file->readToOutput(int $flags, $context = null): File
将文件打印到STDOUT。将$context
直接传递给本地readfile()
函数。
$file->contents($context = null, int $offset, int $maxLength = null): string
返回文件的全部内容。所有参数都直接传递给file_get_contents()
。
$file->getMimeType(): string
返回文件的mimetype。
$file->readJson(bool $associative = false, int $depth = 512, int $flags = 0)
将文件解析为JSON并返回解析后的内容。所有参数都传递给本地的json_decode()
函数。注意,始终设置了JSON_THROW_ON_ERROR
标志。
$file->readCsv(string $separator = ',', string $enclosure = '"', string $escape = '\'): mixed[][]
返回CSV文件的行数组。文件被全部加载。所有参数都传递给本地的fgetcsv()
方法。
$file->readIni(bool $processSections, int $mode = INI_SCANNER_NORMAL): array
将文件解析为INI文件并返回结果。参数直接传递给本地的parse_ini_file()
函数。
$file->readXml(int $options = 0, bool $dataIsUrl = false, string $namespace = '', bool $isPrefix = false): SimpleXMLElement
从文件内容构造SimpleXMLElement。所有参数直接传递给构造函数。
$file->readDomXml(int $xmlFlags = 0, $context = null): DOMDocument
从文件内容构造DOMDocument。将$xmlFlags
传递给DOMDocument的loadXML()
方法。将$context
传递给$file
的contents
方法。
$file->readDomHtml(int $xmlFlags = 0, $context = null): DOMDocument
与上面相同,但使用DOMDocument的HTML加载方法。
写入
$file->writeLines(string[] $lines, string $newLine = PHP_EOL): File
将行写入文件。
$file->put(string $content, int $flags, $contest): File
将内容写入文件。参数直接传递给file_put_contents()
。
$file->writeJson($contents, int $depth = 512, int $flags = 0): File
将$contents编码为JSON并写入文件。将$depth
和$flags
直接传递给json_encode()
。注意,始终设置了JSON_THROW_ON_ERROR
标志。
$file->writeCsv(mixed[][] $rows, string $mode = File::MODE_WRITE, string $separator = ',', string $enclosure = '"', string $escape = '\'): File
将行写入文件作为CSV。$mode
是用于写入时打开文件的文件模式。$separator
、$enclosure
和$escape
传递给fputcsv()
方法。
$file->writeXml(SimpleXMLElement $xml): File
将SimpleXMLElement写入文件(作为XML)。
$file->writeDomXml(DOMDocument $document, ?\DOMNode $rootNode = null, int $flags = 0): File
将DOMDocument写入文件(作为XML)。将$rootNode
和$flags
参数传递给saveXML()
方法。
$file->writeDomHtml(DOMDocument $document, ?\DOMNode $rootNode = null): File
与上面相同,但使用DOMDocument的HTML保存方法。
文件操作
$file->chgrp(string|int $group): File
更改文件组。通常只有root用户才能操作。
$file->chmod(int $permissions): File
更改文件权限。通常只有文件所有者或root用户才能操作。
$file->chown(string|int $user, string|int|null $group = null): File
更改文件的所有者和组(如果提供)。通常只有root用户才能执行。
$file->copy(string $destination, bool $relativeFromCurrentFile = true, $context = null): File
复制文件并返回一个指向新文件的新实例。您可以将 $relativeFromCurrentFile
设置为 false,以告诉类不要对 $destination
进行任何修改,在这种情况下,参数将直接传递给本机 copy()
函数。无论何种情况,都会传递 $context
。
$file->link(string $name, bool $relativeFromCurrentFile = true): File
创建硬链接。这仅在文件上有效。您可以将 $relativeFromCurrentFile
设置为 false,以告诉类不要对 $name
进行任何修改,在这种情况下,参数将直接传递给本机 link()
函数。
$file->symlink(string $name, bool $relativeFromCurrentFile = true): File
与上面相同,但创建符号链接,因此它也可以用于其他内容(例如目录)。
$file->linkInfo(): ?int
返回文件的链接信息。参见 linkinfo()
。
$file->linkTarget(): File
返回一个指向(符号)链接目标的新的 File。
$file->lstat(): ?array
返回文件 lstat 的结果。参见 lstat()
。
$file->mkdir(): File
创建文件的子目录。当前文件必须是目录。所有参数都传递给 mkdir()
。
$file->moveUploadedFile(string $to, bool $relativeFromCurrentFile = true): File
如果文件是上传的文件,则将其移动到 $to
。您可以将 $relativeFromCurrentFile
设置为 false,以告诉类不要对 $destination
进行任何修改,在这种情况下,参数将直接传递给本机 move_uploaded_file()
函数。返回新文件。
$file->rename(string $to, bool $relativeFromCurrentFile = true, $context = null): File
将文件重命名为 $to
。您可以将 $relativeFromCurrentFile
设置为 false,以告诉类不要对 $destination
进行任何修改,在这种情况下,参数将直接传递给本机 rename()
函数。$context
总是传递。返回新文件。
$file->delete(bool $recursive, $context = null): File
如果文件是文件,则删除文件,如果文件是目录并且 $recursive
为 true
,则删除目录。将 $context
传递给所有对 unlink()
的调用。如果删除任何文件失败,则此操作被静默忽略,直到所有删除尝试完成,此时抛出异常。如果目录扫描失败,则应用相同逻辑。
$file->stat(): ?array
返回文件的 stat 结果。参见 stat()
。
$file->touch(int $time = time(), int $atime = $time): File
触摸文件,创建它。参数传递给 touch()
。
路径
$file->select($path): File, $file->go($path): File, $file->cd($path): File
返回一个指向新路径的新 File。新路径由当前路径和给定路径构建。
$file->relativePath(bool $force = false): string
返回文件的打印相对路径。这个路径始终相对于当前工作目录。如果$force
设置为true,即使第一个文件夹不同,路径也将是相对的。
在Windows上,如果文件和工作目录在不同的驱动器上,即使$force
设置为true,也会返回绝对路径。
其他
$file->fileNameMatches(string $pattern, int $flags = 0): bool
如果文件的名称与给定的模式匹配,则返回true。这些参数直接传递给fnmatch()
。
$file->diskFreeSpace(): ?float
如果PHP可以确定,则返回可用的磁盘空间。
$file->diskTotalSpace(): ?float
如果PHP可以确定,则返回总磁盘空间。
$file->__toString(): string
返回$file->path
。