lukaswhite / directory
用于在文件系统上操作目录的PHP类
Requires (Dev)
- phpunit/php-code-coverage: ^6.0|^9.0
- phpunit/phpunit: 7.0|9.5
This package is auto-updated.
Last update: 2024-09-22 14:06:20 UTC
README
表示文件系统上的目录的PHP类。
使用它,您可以
- 获取其中的文件,包括类似
glob
的模式 - 找到最新的文件
- 基于模式派生唯一的文件名
- 在它里面创建或复制文件
- 获取总大小
- 递归删除它
创建实例
只需将目录的完整路径传递给构造函数
$directory = new Directory( '/path/to/dir' );
检查是否存在
创建实例时,目录不必存在;使用exists()
方法来检查它是否存在。
if ( $directory->exists ) { // do something }
检查是否为目录
也许检查您提供的路径实际上是一个目录,而不是文件,也是一个好主意。
if ( ! $directory->isDirectory( ) ) { // looks like it's a file! }
创建目录
要创建目录,将路径传递给构造函数,然后调用create()
。
$directory = new Directory( '/path/to/new/directory' ); $directory->create( );
默认模式设置为0777
,但您可以通过传递参数来覆盖此设置。
$directory->create( 0755 );
或者,您可以使用createIfDoesNotExist()
,正如其名,如果不存在则创建它。
此操作是递归的;即它会创建任何必要的父目录。
列出文件
调用getFiles()
以获取目录中文件的列表。
$files = $directory->getFiles( );
这将返回一个数组,包含目录中文件的完整路径,不包括目录。
要包括目录
$files = $directory->getFiles( true );
要获取目录中包括任何子目录的所有文件,将true
作为第二个参数传递。
$files = $directory->getFiles( false, true );
Glob
要glob目录
$textFiles = $directory->glob( '*.txt' );
检查文件是否存在
要检查目录是否包含具有特定名称的文件
if ( $directory->fileExists( 'logo.png' ) ) { // do something }
获取最新文件
使用mostRecentFile()
获取最新修改的文件。
$recent = $directory->mostRecentFile( );
您可以使用模式;例如,获取最新修改的文本文件
$recent = $directory->mostRecentFile( '*.txt' );
要包括目录,将true
作为第二个参数传递。
获取总大小
要获取目录的总大小(以字节为单位)
$size = $directory->totalSize( );
唯一的文件名
假设您允许用户上传头像,您将其存储在名为avatars
的目录中,文件名为username.png
的形式。
这最初工作良好,但如果用户上传替换文件,则会导致问题。
为了解决这个问题,ensureUniqueFilename()
将返回一个相似的文件名,它不存在。
例如,如果joebloggs.png
存在,它将返回joebloggs-1.png
。后续调用将返回joebloggs-2.png
,依此类推。
此方法仅返回文件名,但您可以使用fullPathToFile()
获取完整路径。
例如
$directory = new Directory( '/path/to/avatars' ); $filename = $directory-> ensureUniqueFilename( 'joebloggs.png' ); // joebloggs-1.png $filepath = $directory->fullPathToFile( $filename ); // /path/to/avatars/joebloggs-1.png
创建文件
在目录中创建一个空文件
$directory->createFile( 'filename.txt' );
要创建文件,提供其内容
$directory->createFile( 'filename.txt', 'the contents' );
将文件复制到目录中
将文件复制到目录中
$directory->copyFileInto( '/path/to/your/file' );
删除目录
谨慎使用!
要删除目录及其内容,子目录,只需调用delete()
。