lukaswhite/directory

用于在文件系统上操作目录的PHP类

1.0 2021-04-22 06:35 UTC

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()