spoova/filemanager

Spoova 文件管理包

v1.5.0 2023-07-08 07:50 UTC

This package is auto-updated.

Last update: 2024-09-10 00:07:23 UTC


README

Filemanager 类具有一些有用的功能,允许读取和写入可编辑的文件、传输文件和压缩文件或目录。

初始化类

此类可以按照以下方式初始化

include_once "vendor/autoload.php";

use Spoova\FileManager\FileManager; 

$Filemanager = new FileManager;

创建新目录

只能通过提供新目录的完整路径来创建新目录,使用 addDir() 方法。此方法不会更新类中定义的最后一个目录。如果新目录不存在,它会添加新目录并返回 true,如果目录已创建或已存在。

$Filemanager->addDir('some/new/dir'); //full path of new directory

为活动设置 URL

除了少数具有独立能力覆盖默认 URL 的方法,如 addDir()openFile() 方法之外,当使用 Filemanger 进行活动时,需要定义一个 URL 或文件路径,以帮助 Filemanager 类了解操作应在何处执行。可以使用 setUrl() 方法指定目录或文件路径。以下是一个示例

$Filemanager->setUrl(__DIR__); //example of setting a url 

创建新文件

要创建新文件,我们可以使用 openFile() 方法。如果文件不存在,此方法将创建文件。如果创建的文件可读,将返回 true。

$Filemanager->openFile($strict, $path); //full path of new directory
  • $strict 为 true 的布尔值将允许在预期文件目标不存在时创建目录,而 false 将阻止创建新目录以创建文件,如果目录不存在。
  • $path 是可选的独立文件路径,用于创建文件,如果尚未使用 setUrl() 定义。
$Filemanager->openFile(true, 'some/path/of/file.txt'); 

我们还可以像下面这样从 setUrl() 方法中指定文件路径

$Filemanager->setUrl('some/path/of/file.txt');

$Filemanager->openFile(true);

创建多个文件

要创建多个文件,我们可以使用 openFiles() 方法。第一个参数是包含预期创建的文件完整路径的数组列表。如果遇到错误且无法创建文件,则方法将创建目录。如果所有文件都成功创建,将返回 true。

$Filemanager->openFiles($paths, $files);
  • $paths 是要创建的文件路径数组列表
  • $files 是可选变量,包含成功创建的文件路径列表。
$Filemanager->openFiles(['file.txt', 'file2.txt'], $get_created_files); 

处理文件和目录

为了处理目录,必须使用 setUrl() 方法定义在活动预期执行的地方。一旦定义了源 URL,我们就可以继续执行活动。

设置 URL
$Filemanager->setUrl(__DIR__); //specify directory
获取指定目录中的文件夹
$folders = $Filemanager->getFolders(); //full path of folders

只能收集不带完整路径的文件夹名称

$folders = $Filemanager->getFolders(false); // names of folders
获取指定目录中的文件
$files = $Filemanager->getFiles();

可以收集不带完整路径的文件名和扩展名,如下所示

$files = $Filemanager->getFiles(false); // names of files

我们还可以获取不带扩展名的文件名。但是,始终获取扩展名名称以了解文件类型非常重要。

$files = $Filemanager->getFiles(false, false); // names of files without extension name
获取目录内容
$contents = $Filemanager->getContents(); //returns both files and folders
压缩目录

要压缩 URL,可以使用以下语法的 zipUrl() 方法

$folders = $Filemanager->zipUrl($output_name, $excludes);
  • $output_name 指的是 zip 文件的输出名称。如果没有定义,则使用默认指定的 URL。
  • $excludes 指的是不应添加到 zip 文件中的指定目录中的文件名数组列表。

我们可以使用 zipped() 方法检查文件是否已压缩。但是,这不会告诉压缩文件是否损坏。

$Filemanager->setUrl(__DIR__);    
$Filemanager->zipUrl(); 

if($Filemanager->zipped()) {

     echo "Zip file created."

} else {

     echo "Zip file not created!";

}

我们可以使用 lastDir() 方法获取指定的最后一个目录。

$Filemanager->setUrl(__DIR__);    
$Filemanager->zipUrl(); 

if($Filemanager->zipped()) {

     echo $Filemanager->lastDir(); //directory of zipped file

} else {

     echo "Zip file not created!";

}
从目录复制到另一个目录

要从最后指定的目录复制到另一个目录,我们可以使用copyTo()方法。这将把整个文件夹复制到另一个指定的目录。

$Filemanager->copyTo($newdir, $newname, $strict);
  • $newdir指的是文件或文件夹的目标位置。
  • $newname指的是文件的新名称。这是可选的。
  • $strict如果为true,将防止任何之前的错误停止操作。
$Filemanger->setUrl(__DIR__);

$Filemanager->zipUrl();

if($Filemanager->zipped()) {

     $Filemanager->copyTo('some/new/directory', 'zip_one'); //copy zip file to new directory

}
移动最后指定的目录或文件到另一个位置

要将最后指定的目录移动到另一个位置,可以使用moveContentsTo()方法。这在需要将压缩文件移动到另一个位置时非常有用。

$Filemanager->moveContentsTo($newdir, $ignore, $moved);
  • $newdir指的是新的文件或文件夹目标位置。
  • $ignore指的是最后指定的URL中要忽略移动的文件或文件夹名称。
  • $moved用于存储已移动文件的名称。

以下是一个示例

$Filemanger->setUrl(__DIR__);

$Filemanager->zipUrl();

if($Filemanager->zipped()) {

     $Filemanager->moveContentsTo('some/new/directory');

}
将最后声明的目录移动到另一个目录,并赋予新名称

要将最后声明的路径移动到另一个目录,并指定新的输出名称,可以使用moveTo()方法。

$Filemanager->moveTo($newdir, $name, $strict);
  • $newdir指的是最后检测到的路径将被移动到的新的目标目录。
  • $name可选。如果指定,则指的是文件的新的输出名称。当$newdir是一个文件路径而不是目录时,这很有用。如果没有指定,移动的文件将保持原始文件名。
  • $strict如果为true,将防止任何之前的错误停止操作。

以下是一个示例

$Filemanger->setUrl(__DIR__);

$Filemanager->zipUrl();

if($Filemanager->zipped()) {

     $new_name = 'mydir.zip';
     
     $Filemanager->moveTo('some/new/directory', $new_name); //move zipped directory file to new path with new name. 

}
高级移动文件和目录

将文件或目录移动到另一个位置的高级方法是move()方法。基本语法如下所示

$Filemanager->move($param1, $param2);
  • $param1指的是所选文件(或目录)的新目标目录,或者如果指定了$param2,则指的是所选目录要移动到目标目录的子路径。
  • $param2仅当提供时,才指的是$param1的目标路径。

以下示例显示了将目录或文件移动到另一个目录的情况。

$Filemanger->setUrl(__DIR__.'/'.'folder_or_file_name'); //set a directory or file path

$Filemanger->move(__DIR__.'/destination_directory'); //move to new destination directory

我们还可以指定将主选定的目录内的目录移动到另一个相对或绝对目录,如下所示

$Filemanger->setUrl(__DIR__); //set a base directory

$Filemanger->move('folder_or_file', __DIR__.'/new_directory'); //move to new existing destination directory

上述move()方法将根据文件传输是否成功返回true或false。

删除文件或目录

要删除文件夹或文件,可以使用deleteFile()方法

$Filemanager->deleteFile($dir);
  • $dir指的是要删除的文件或目录的路径。如果没有指定,它假定最后指定的目录。

以下是一个示例

$Filemanger->setUrl(__DIR__);

$Filemanager->deleteFile(); //delete directory
仅删除文件

要仅删除文件,可以使用removeFile()方法

$Filemanager->removeFile($dir, $check);
  • $dir指的是要删除的文件或目录的路径。
  • $check如果设置为true,当指定的文件不存在时将返回true而不是false。

以下是一个示例

$Filemanger->setUrl(__DIR__);

$Filemanager->deleteFile(); //delete directory

从zip文件中提取

要将非受保护的压缩文件提取到目录中,可以使用decompress()方法。

$Filemanager->decompress($del, $strict);
  • $path如果指定了$newPath,则指的是源路径;如果没有指定$newPath,则指的是目标路径。
  • $strict如果为true,将防止任何之前的错误停止操作。

以下是一个示例

$Filemanger->setUrl(__DIR__);

$Filemanager->zipUrl();

if($Filemanager->zipped()) {

     $Filemanager->moveTo('some/new/directory'); //move zipped file to new path

}

$Filemanager->moveTo('some/old/path', 'some/new/path'); // move from some old to new path

处理可读文本文件

读取文件通常是通过指定一个键和一个分隔符字符来完成的。默认情况下,Filemanager使用冒号:字符来区分键和值。在某些情况下,默认字符被设置为=,例如在loadenv()方法中。我们可以使用readFile()readAll()方法来读取可读文件。

从文本文件中读取
$Filemanager->readFile($key, $separator);
  • $key键的名称
  • $separator指定的分隔符字符。

假设我们有一个如下所示的user.txt文件

name:  Foo name; 
class: Foo class;

我们可以使用以下格式获取文本文件的内容

$Filemanager->setUrl('user.txt');

$contents = $Filemanager->readFile(['name'], ":"); // ['name' => 'Foo name']

默认情况下,无论是否指定,分隔符;通常都会被删除。我们还可以通过readAll()方法读取所有内容,如下所示

$Filemanager->setUrl('user.txt');

$contents = $Filemanager->readFile(['name', 'class']); // ['name' => 'Foo name', 'class'=> 'Foo class']   

如果正在搜索一个不存在的键,返回的值将是一个空字符串

$Filemanager->setUrl('user.txt');

$contents = $Filemanager->readFile(['user'], ":"); // ['user' => '']   
编辑文本文件

修改文本文件有五种不同的方式,包括使用textLine()textWrite()textUpdate()textReplace()textDelete()方法。

textLine()

此方法用于在文本文件中写入新行,并在指定行之前或之后。

$Filemanager->textLine($number, $position);
  • $number 指定要添加到文本文件中的新行数。
  • $position 指定行应该添加的位置。

假设我们有一个文件user.txt,我们可以使用以下格式向文件中添加新行

$Filemanager->setUrl('user.txt');
 
$contents = $Filemanager->textLine(2); // add two new lines

如果文件已经包含文本,我们可以使用afterbefore指定行的位置,如下所示

name:  Foo name; 
class: Foo class;
$Filemanager->setUrl('user.txt');

$Filemanager->textLine(2, ['after' => 'name']); // add two lines after line of key 'name:'
textWrite()

此方法用于将文本写入文本文件

$Filemanager->textLine($data, $options);
  • $data 键值对数组列表
  • $options 用于定义位置和分隔符字符

假设我们有一个文件user.txt,我们可以使用以下格式向文件中添加新键

$Filemanager->setUrl('user.txt');
 
$Filemanager->textWrite(['name' => 'foo']); // add two new lines

我们可以通过提供具有separator键的选项来指定分隔符字符。如果文件已经包含键,我们可以使用beforeafter选项指定新键的位置,如下所示

name:  Foo name; 
class: Foo class;
$Filemanager->setUrl('user.txt');    

$Filemanager->textWrite(['age' => 'foo'], ['after' => 'name', 'separator' => ':']); // add key after "name"
textUpdate()

此方法用于更新文本文件中已存在键的值。如果指定的键不存在,则键及其值将作为新行添加

$Filemanager->textUpdate($data, $upds, $separator);
  • $data 键值对数组列表
  • $upds 用于存储仅更新的值
  • $separator 用于设置分隔符字符。默认为冒号符号。

假设我们有一个文件user.txt,我们可以使用以下格式添加或更新文件的键

name:  Foo name; 
class: Foo class;
$Filemanager->setUrl('user.txt');
 
$Filemanager->textUpdate(['name' => 'Bar name', 'age' => '50']); // 

生成的文本文件将如下所示

name:  Bar name; 
class: Foo class;
age: 50;
textReplace()

此方法仅当键存在时才用于替换键的值。

$Filemanager->textReplace($data, $separator);
  • $data 键值对数组列表
  • $separator 用于设置分隔符字符。默认为冒号。

假设我们有一个文件user.txt,我们可以替换现有键的值

name:  Foo name; 
class: Foo class;
$Filemanager->setUrl('user.txt');
 
$Filemanager->textUpdate(['name' => 'Bar name']); // 

生成的文本文件将如下所示

name:  Bar name; 
class: Foo class;
在不实例化类的情况下读取文件

我们可以使用load()方法在不实例化类本身的情况下读取可读文件。此方法将读取文件的所有内容,等同于readAll()方法。

Filemanager::load($url, $separator); 
  • $url 要读取的文件路径
  • $separator 键到值的分隔符字符
将文件读取到全局ENV环境中

可读文件键和值可以使用loadenv()方法存储到全局$_ENV环境中。默认情况下,值存储在$_ENV[':ENV']键下。此方法主要用于从.env文件中读取。

Filemanager::loadenv($url, $key, $separator); 
  • $url 要读取的文件路径
  • $key 默认键是':ENV'。当布尔值为true时,数据将直接存储到$_ENV中,false将防止覆盖预定义的默认$_ENV键。如果定义了自定义字符串名称,则该名称将用作默认':ENV'的替换。
  • $separator 键到值的分隔符字符。请注意,此方法的默认字符设置为等号,而不是分号。
检测ENV键

使用env_key()方法来检测在loadenv()方法中最后使用的自定义键。默认情况下,它返回:ENV

检测ENV数据

使用env_data()方法来检测在loadenv()方法使用时存储到$_ENV全局变量中的最后数据。

获取错误

方法 err() 在 Filemanager 系统内部发生错误时返回最后检测到的错误。然而,当处理 zip 文件时,fails()succeeds() 方法可以帮助检测在压缩或解压缩文件过程中发生的错误。下面是使用示例:

$Filemanager->setUrl('some/dir'); 

$Filemanager->zipUrl(); 

if($Filemanager->succeeds()) {

     echo 'Zipping successful';

}elseif($Filemanager->fails()) {

     echo $Filemanager->error();  

} else {
     
     echo 'Something is wrong!';

}