spoova / enlist
用于重命名多个文件的PHP包
README
这是一个spoova框架包,用于列出或重命名目录中的文件。它可以用于重命名文件名和文件扩展名。虽然重命名文件扩展名可能会破坏文件的函数,但某些特定的文件扩展名可以很容易地修改。应避免重命名容易破坏的文件扩展名。大多数时候,这个类可以用来更改图像文件或与文本相关的文件的扩展名。尽管一些文件扩展名可以很容易地修改,但它并不作为此类文件的转换器。在需要转换器的情况下,应使用转换器工具。
包含Enlist类
在终端中运行以下命令以要求该包
composer require spoova/enlist
初始化Enlist类
在您的示例PHP文件中包含vendor/autoload.php文件并导入Enlist类
<?php include_once "vendor/autoload.php"; use Spoova\Enlist\Enlist; $Enlist = new Enlist;
设置文件目录
为了使用Enlist包,必须首先指定源目录
$Enlist->source(__DIR__.'/images');
检查文件目录是否有效
我们可以通过
sourceValid()
方法检查提供的源目录是否有效
$Enlist->source(__DIR__.'/images'); if($Enlist->sourceValid()) { echo "directory is valid"; } else { echo "invalid source directory supplied"; }
列出目录中的文件
以下代码将列出目录中所有文件,但不包括隐藏文件
$Enlist->source(__DIR__.'/images'); if( $Enlist->sourceValid() ) { $files = $Enlist->dirFiles(); // or $Enlist->dirFiles('*') var_dump($files); } else { echo "invalid url supplied"; }
列出目录中具有jpg扩展名的文件
以下代码将列出目录中所有具有.jpg文件的文件
$Enlist->source(__DIR__.'/images'); if( $Enlist->sourceValid() ){ $files = $Enlist->dirFiles(['jpg']); // or $Enlist->dirFiles('jpg') var_dump($files); } else { echo "invalid url supplied"; }
列出目录中的隐藏文件
以下代码将列出目录中只有扩展名而没有文件名的所有文件
$Enlist->source(__DIR__.'/images'); $files = $Enlist->dirFiles(['.']); // or $Enlist->dirFiles('.') var_dump($files);
列出目录中只有png扩展名的隐藏文件
以下代码将列出源目录中所有.png文件以及隐藏文件
$Enlist->source(__DIR__.'/images'); $files = $Enlist->dirFiles(['.','png']); var_dump($files);
列出目录中的所有文件(包括隐藏文件)
以下代码将列出目录中的所有文件,包括隐藏文件
$Enlist->source(__DIR__.'/images'); $files = $Enlist->dirFiles(['.*']); // or $Enlist->dirFiles(['.','*']) var_dump($files);
在目录中重命名文件
将目录中所有文件扩展名重命名为png,但不包括隐藏文件
$Enlist->source(__DIR__.'/images'); $result = $Enlist->rename('png'); var_dump($result);
通过向
rename()
函数提供第二个参数,也可以获得重命名的结果
$Enlist->source(__DIR__.'/images', "*"); $Enlist->rename('png', $result); var_dump($result);
仅将目录中所有.jpg文件扩展名重命名为png扩展名
$Enlist->source(__DIR__.'/images', 'jpg'); $Enlist->rename('png', $result); var_dump($result);
仅对目录中所有.jpg文件名进行编号
$Enlist->source(__DIR__.'/images', 'jpg'); $Enlist->reNumber(); $result = $Enlist->rename(); var_dump($result);
可以使用
startFrom()
方法从特定数字开始使用序列号重命名文件
$Enlist->source(__DIR__.'/images', 'jpg'); $Enlist->reNumber()->startFrom(10); $result = $Enlist->rename(); var_dump($result);
使用
prefix()
和reNumber()
方法,可以使用命名前缀对目录中的所有文件名进行编号
$Enlist->source(__DIR__.'/src/images'); $Enlist->prefix('images-'); $Enlist->reNumber(); $Enlist->rename('jpg', $result); var_dump($result);
可以使用
reSpace()
方法将文件名中的空格替换为其他字符。
$Enlist->source(__DIR__.'/src/images', ['jpg']); $Enlist->reSpace("_"); //changes all spaces to underscore ( i.e _ ) $Enlist->rename('jpg', $result); var_dump($result);
可以将智能URL格式应用于文件名。这将从文件名中删除特殊字符
$Enlist->source(__DIR__.'/src/images', ['jpg']); $Enlist->reSpace("_"); //changes all spaces to underscore ( i.e _ ) $Enlist->rename('jpg', $result); var_dump($result);
可以使用
view()
方法防止rename()
主动重命名文件。如果没有错误发生,则仅将预期输出结果作为数组列表显示
$Enlist->source(__DIR__.'/src/images'); $Enlist->view(); $Enlist->prefix('images-'); $Enlist->reNumber(); $Enlist->rename('jpg', $result); var_dump($result);
获取数据
可以使用data()
方法在使用任何dirFiles()
、rename()
或reverse()
方法时获取结果数据。
```php
$Enlist->source(__DIR__.'/src/images')->view();
$Enlist->dirFiles();
$Enlist->data($dirFiles); //get data returned by dirFiles() method into $dirFiles
$Enlist->rename('jpg');
$Enlist->data($renamed); //get data returned by rename() method into $renamed
```
处理错误
如果未开启调试模式,错误将返回为文本。
$Enlist->source(__DIR__.'/src/images'); $Enlist->view(); $Enlist->prefix('image-'); $result = $Enlist->rename('.'); if($result === false){ var_dump($Enlist->error()); }
错误也可以在开启调试模式而不抛出错误的情况下获取。为了做到这一点,必须在调用
rename()
之前开启debug()
方法。最后,debugs()
方法将返回所有发生错误的回溯。请注意,只有当指定的源url有效时,才会执行rename()
或dirFiles()
方法。
$Enlist->debug(); //turn on debugging without throwing error $Enlist->source(__DIR__.'/src/images') $Enlist->view(); $Enlist->prefix('image-'); $Enlist->rename('.', $result); if(!$Enlist->debugs()){ var_dump($result); }else{ var_dump($Enlist->debugs()); }
还可以通过将引用变量传递给
debug()
方法来获取调试信息。
$Enlist->debug(); //turn on debugging without throwing error $Enlist->source(__DIR__.'/src/images'); if( $Enlist->sourceValid() ) { $Enlist->view(); $Enlist->prefix('image-'); $Enlist->rename('.', $results); $Enlist->debugs($debugs); if(!$debugs){ var_dump($results); } else { var_dump($debugs); } }
当开启调试模式时,可以启用错误抛出。这可以通过在
debug()
方法上提供参数"2"
来实现。
$Enlist->debug(2); //turn on debugging with ErrorException thrown $Enlist->source(__DIR__.'/src/images'); $Enlist->view(); $Enlist->prefix('image-'); $Enlist->rename('.', $result); var_dump($result);
关闭调试模式时,调试方法还可以帮助跟踪错误。
$Enlist->debug(); $Enlist->source(__DIR__.'/src/images')->view(); $Enlist->dirFiles(); $Enlist->data($dirFiles); //get data returned by dirFiles() method into $dirFiles $Enlist->rename('jpg'); $Enlist->data($renamed); //get data returned by rename() method into $renamed $Enlist->debugs($debugs); //get first error returned into $debugs var_dump($result);
与会话一起工作
在文件以不希望的方式重命名或希望恢复到以前的文件名的情况下,enlist只支持在没有覆盖文件的情况下撤销对文件的更改。要恢复到以前的名称,必须使用withSession()
方法定义一个活动会话以及一个唯一的键,其中存储最近的更改。如果没有提前开始会话,withSession()
方法将启动它自己的新会话。一旦定义了enlist会话名称,就可以应用reverse()
方法来撤销更改。
允许Enlist从会话存储中撤销最近更改
$Enlist->source(__DIR__.'/src/images'); if( $Enlist->sourceValid() ) { $Enlist->withSession('unique_session_name'); //set a session storage name $Enlist->prefix('image-'); $result = $Enlist->rename('png'); $Enlist->reverse($reversals); //reverse back to previous names var_dump($reversals); }
会话名称也可以从会话存储中指定。只有在指定的目录中仍然存在旧文件名时才会进行撤销。此外,当进行撤销操作后,存储的会话url将被清除。
$Enlist->source(__DIR__.'/src/images'); if( $Enlist->sourceValid() ) { $Enlist->withSession('my_enlist_session_name'); //set a session storage name $Enlist->prefix('image-'); $result = $Enlist->rename('png'); $Enlist->reverse($reversals, 'my_enlist_session_name'); //reverse back to previous names using specific storage name var_dump($reversals); }
字符及其功能
以下列表描述了参数及其功能
-
"."
- 所有隐藏文件 -
"*"
- 所有文件(除隐藏文件外) -
".*"
- 所有文件(包括隐藏文件) -
"jpg"
- 所有jpg文件扩展名 -
['jpg', 'png']
- 所有指定的文件扩展名
最佳实践
在继续重命名项目之前,始终先设置重命名到查看模式,以检查重命名文件列表的最终结果,这样可以避免合并冲突等问题,这些问题可能导致文件丢失。