org_heigl / filefinder
从一个或多个文件夹生成过滤后的文件列表
1.4.0
2018-06-29 04:54 UTC
Requires
- php: ^7.1
- roave/better-reflection: ^3
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- mockery/mockery: ^1.0
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2024-08-29 04:39:35 UTC
README
此库允许遍历多个文件夹,并过滤文件列表。文件以文件列表对象的形式返回。
安装
使用composer安装Org_Heigl\FileFinder。在项目命令行中调用composer require org_heigl/filefinder
。
或者,您可以在composer.json
中的require
部分包含以下行
"org_heigl/filefinder" : "stable"
用法
最简单的用法是向FileFinder添加一个过滤器和目录。
$finder = new \Org_Heigl\FileFinder\FileFinder(); $finder->addFilter(new \Org_Heigl\FileFinder\Filter\FileExtension('jpg')); $finder->addDirectory($dir); $list = $finder->find(); // $list will be an \Org_Heigl\FileFinder\FileList-Object containing all Files with the extension 'jpg' inside ```$dir```
只要实现了\Org_Heigl\FileFinder\FileListInterface
,您也可以设置自己的FileList
-对象。这将是这样的
$finder = new \Org_Heigl\FileFinder\FileFinder(); $finder->addFilter(new \Org_Heigl\FileFinder\Filter\FileExtension('jpg')); $finder->addDirectory($dir); $finder->setFileList(new MyPrettyFileList()) $list = $finder->find(); // $list will be the MyPrettyFileList-Object containing all Files with the extension 'jpg' inside ```$dir```
您也可以使用此片段获取目录下所有实现\Iterator
的类的类名到文件名的映射
$finder = new \Org_Heigl\FileFinder\FileFinder(); $finder->addFilter(new \Org_Heigl\FileFinder\Filter\FileExtension('php')); $finder->addFilter(new \Org_Heigl\FileFinder\Filter\ClassIsInstanceof('\Iterator')); $finder->setFileList(new \Org_Heigl\FileFinder\ClassMapList()); $finder->addDirectory($dir); $list = $finder->find(); // $list now contains the classname as key and the filepath as value
使用FileList::addDirectory()
方法添加的目录将被递归检查。
过滤器必须实现\Org_Heigl\FileFinder\FilterInterface
。因此,您可以很容易地添加自己的过滤器。
默认的FileList
-实现还包含一个sort
方法,可以在使用之前对文件列表进行排序。只需提供像这样作为参数的实现SortInterface
$finder = new \Org_Heigl\FileFinder\FileFinder(); $finder->addDirectory($dir); $list = $finder->find(); $list->sort(new \Org_Heigl\FileFinder\Sorter\MTime()); // $list now is sorted by MTime ascending.
包含
当前库包含以下过滤器
- FileExtension - 检查文件扩展名是否是给定扩展名之一。扩展名列表作为构造函数如此给出:
new FileExtension(array('foo', 'bar'))
。 - FileStart - 检查文件内容是否以给定字符串开头。您可以像这样使用它:
new FileStart('<?php')
来检查PHP文件。 - ClassIsInstanceOf - 检查文件是否包含至少实现一个要查找的接口的类。接口可以像这样给出:
new ClassIsInstanceOf(['InterfaceOne','\Org_Heigl\FileFinder\FilterInterface']);
。 - DateCompare - 比较文件的创建、修改或更改日期与给定日期。比较可以是之前、之后或等于。因此,可以这样调用:
new DateCompare(new DateTime(), DateCompare::MTIME, DateCompare::CHECK_BEFORE);
。这将包括在当前日期之前更改内容的文件(包括所有内容)。 - FileSize - 查找文件大小在给定范围内的文件:它可以像这样使用:
new FileSize('1kb', '2gb');
这将查找大小在1KB到2GB之间的文件。 - HoldsSinglePHPClass - 查找只包含一个类的文件。包含多个类的文件将被忽略。
- MimeType - 查找特定MIME类型的文件。您可以像这样使用它:
$finfo = new \Org_Heigl\FileFinder\Service\FinfoWrapper(); $filter = new MimeType($finfo, 'application/pdf');
这将查找所有PDF文件。此过滤器需要一个FinfoWrapper对象作为第一个对象,该对象将处理实际的MIME类型检测。 - Not - 取消包含的过滤器。
- OrList - 包含多个过滤器,只需匹配其中一个即可将文件包含在列表中。
许可证
此库在LICENSE文件中许可下使用MIT许可证。
问题
您有问题吗?请使用问题跟踪器报告它,我们会查看的。
贡献
我们始终欢迎贡献。Fork仓库,做任何您喜欢的事情,然后提交一个pull request!