amphp/file

基于 Amp 和 Revolt 的非阻塞文件系统访问。

维护者

详细信息

github.com/amphp/file

主页

源代码

问题

资助包维护!
amphp

安装次数: 2,545,049

依赖者: 76

建议者: 3

安全: 0

星星: 97

关注者: 13

分支: 25

开放问题: 10

v3.1.1 2024-08-15 15:04 UTC

README

AMPHP 是一个专为 PHP 设计的事件驱动库集合,考虑到纤维和并发。此包提供了一个抽象层和非阻塞文件访问解决方案,以保持您的应用程序响应。

Latest Release MIT License

安装

此包可以作为 Composer 依赖项安装。

composer require amphp/file

要求

  • PHP 8.1+

amphp/file 无需任何 PHP 扩展即可直接运行。默认使用多个进程,但也包含一个使用当前进程中的 PHP 阻塞函数的阻塞驱动器。

扩展允许在后台使用线程而不是使用多个进程,如果它们可用,将自动使用。

使用方法

读取文件

读取指定文件的全部内容

$contents = Amp\File\read('/path/to/file.txt');

写入文件

将内容字符串写入指定路径

Amp\File\write('/path/to/file.txt', 'contents');

文件句柄

除了读取或写入整个文件外,库还允许打开一个 File 句柄,例如用于流数据。

$file = Amp\File\openFile('/path/to/file.txt', 'r');
Amp\ByteStream\pipe($file, getStdout());
  • File::read():另见 File::isReadable
  • File::write():另见 File::isWritable
  • File::end():另见 WritableStream::end()
  • File::close():关闭文件句柄。
  • File::isClosed() 可用于检查文件句柄是否已经关闭。
  • File::onClose() 可用于注册一个在文件句柄关闭时调用的回调。
  • File::seek():设置内部指针位置并返回新的偏移量位置。
    • SEEK_SET:将位置设置为偏移量字节。
    • SEEK_CUR:将位置设置为当前位置加上偏移量。
    • SEEK_END:将位置设置为文件末尾加上偏移量。
  • File::isSeekable:尚未文档化。
  • File::tell():返回文件句柄的当前内部偏移量位置。
  • File::eof():检查是否位于流的末尾(即“文件末尾”)。
  • File::getPath():检索打开文件句柄时使用的路径。
  • File::getMode():检索打开文件句柄时使用的模式。
  • File::truncate():将文件截断到指定的长度。如果 $size 大于当前文件大小,则使用 NUL 字节扩展文件。

元数据

文件元数据是指关于文件描述性信息,与其实际内容区分开来。这包括文件大小、权限、创建和修改时间戳、所有权和文件类型等详细信息。元数据提供了关于文件属性的重要上下文,使用户和应用能理解其特征,而无需深入研究内容。与文件的实际数据不同,文件数据包含有意义的信息或指令,元数据侧重于管理和结构属性,有助于文件组织、访问和管理。

存在性

  • exists():检查指定的路径是否存在。

文件大小

  • getSize():以字节为单位返回文件大小。

文件类型

  • isDirectory():检查给定的路径是否存在且是目录。
  • isFile():检查给定的路径是否存在且是常规文件。
  • isSymlink():检查给定的路径是否存在且是符号链接。

文件时间戳

  • getModificationTime():以秒为单位的 Unix 时间戳返回文件的修改时间。
  • getAccessTime():以秒为单位的 Unix 时间戳返回文件的访问时间。
  • getCreationTime(): 返回文件的创建时间,以秒为单位的Unix时间戳。

低级访问

注意 如果可能,我们强烈建议使用高级API,如exists(),而不是直接使用getStatus() / getLinkStatus() API。

可以使用getStatus()函数获取文件元数据,或者使用getLinkStatus()来获取符号链接的元数据(如果您想访问链接的元数据而不是目标文件)。如果路径不存在,这两个函数都将返回null

<?php

use Amp\File;

require __DIR__ . '/../vendor/autoload.php';

var_dump(File\getStatus(__FILE__));
array(13) {
  ["dev"]=>
  int(16777232)
  ["ino"]=>
  int(15186622)
  ["mode"]=>
  int(33188)
  ["nlink"]=>
  int(1)
  ["uid"]=>
  int(501)
  ["gid"]=>
  int(20)
  ["rdev"]=>
  int(0)
  ["size"]=>
  int(104)
  ["blksize"]=>
  int(4096)
  ["blocks"]=>
  int(8)
  ["atime"]=>
  int(1692381227)
  ["mtime"]=>
  int(1692381226)
  ["ctime"]=>
  int(1692381226)
}

文件组织

  • move(): 移动或重命名文件或目录。
  • deleteFile(): 删除文件。
  • createDirectory(): 创建目录。
  • createDirectoriesRecursively(): 创建目录及其父目录。
  • deleteDirectory(): 删除目录。
  • listFiles(): 列出目录中的所有文件和子目录。
  • changePermissions(): 改变文件或目录的权限。
  • changeOwner(): 改变文件或目录的所有权。
  • touch(): 更新指定路径的访问和修改时间。如果文件不存在,它将自动创建。

链接

  • createHardlink(): 创建新的硬链接。
  • createSymlink(): 创建新的符号链接。
  • resolveSymlink(): 解析符号链接到其目标路径。

版本控制

amphp/file遵循与其他所有amphp包相同的语义版本控制(semver)规范。

安全

如果您发现任何与安全相关的问题,请使用私有安全问题报告者,而不是使用公共问题跟踪器。

许可证

MIT许可证(MIT)。有关更多信息,请参阅LICENSE