pendenga / file
Requires
- ext-json: *
- ext-zip: *
- box/spout: ^3.1
- psr/log: ^1.1
- rych/random: ^0.1.0
Requires (Dev)
- pendenga/log: ^0.1.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-26 07:44:29 UTC
README
我在处理文件和目录时使用的几个工具,尤其是在处理大量文件时。我为一个客户导出多年的数据时构建了这些工具,最终有超过165,000个文件分布在4,000多个目录中,总大小超过140GB。
安装
此软件包托管在packagist上,可通过 Composer 安装。
要求
- PHP版本7.1或更高(推荐7.2+)
- Composer(用于安装)
通过Composer安装
在您的仓库中运行以下命令行...
composer require pendenga/file
或者将以下行添加到您的composer.json文件...
"require": { "pendenga/file": "0.1.0", },
然后运行以下命令
$ composer update
这将把 Pendenga File 设置为项目的依赖项并安装它。
在启动应用程序时,您需要包含 'vendor/autoload.php'
以设置自动加载。
可用的工具
所有日志记录都使用Psr\Log\LoggerInterface进行,以确保与其他包和日志记录器的兼容性。在我的示例中,我将仅使用 $logger 表示任何 LoggerInterface。
批量
批量工具可以将大量目录合并到子目录中,使其不超过特定的大小。用例是我有一个包含4,000多个文件夹的单个目录,总大小超过140GB,并将其上传到Box.com。Box.com不允许下载超过15GB的数据,因此客户无法一次性下载整个集合。此脚本将数百个文件夹分成15个批次文件夹,每个文件夹的大小小于10GB,以便可以下载。
$batch = new Batch(new Scan(), $logger); $batch->setOption('max_batch_bytes', 10737418240); // 10 gb $batches = $batch->evaluate($tmp_dir); // print_r($batches); // review before executing $batch->execute($batches);
列映射
ColumnMap用于Manifest将电子表格中的列映射到需要匹配的值。例如,如果用户定义的manifest电子表格有列(name, size, checksum)或(filename, bytes, md5),这两个都可能有效,我们需要将电子表格中的列映射到它们以便可以处理它们。
目录
目录提供了一些在创建目录和移动文件时非常有用的工具。
$dir = new Directory($logger); // bool check if directory is empty if ($dir->checkEmpty($tmp_dir)) { ... } // array list of files foreach ($dir->files($tmp_dir) as $file) { ... } // delete all files in a directory (useful for unit tests) $dir->deleteFiles($tmp_dir); // delete all empty subdirectories in a directory (useful for unit tests) $dir->deleteSubDirs($tmp_dir);
生成
生成一组随机文件。您可以配置随机目录数、每个目录中的文件数、每个文件中的行数、每行中的字符数等选项。可选地,您可以创建新文件集的manifest文件。
$gen = new Generate($logger); $gen->setOption('file_base_dir', $tmp_dir) ->setManifest(new ManifestWriter($manifest)) ->files();
Ini
Ini文件的简单包装,以便在安装到不同项目后,即使在包安装在不同的项目中,也能在根目录中找到它,并提供一行静态函数来访问ini。
$tmp_dir = Ini::get('TMP_DIRECTORY');
Manifest
使用包含相对文件名和零个或多个以下内容的电子表格manifest验证目录中的文件
- 文件大小(以字节为单位)
- 文件中的行数
- md5校验和
$chk = new Manifest(new ColumnMap(), $logger); $chk->load($path_to_manifest_file); $results = $chk->validateFiles($path_to_files, new Scan());
ManifestWriter
用于在创建文件时创建manifest文件。您可以指定哪些列被创建,但以下是一些当前选项
- 相对文件名(必需)
- 文件大小(以字节为单位)
- 文件中的行数
- md5校验和
属性
一个简单的类,用于抽象manifest文件中执行的一些检查。
$prop = new Properties($path_to_file); $prop->bytes(); $prop->checksum(); $prop->exists(); $prop->lines();
扫描
PHP文件扫描和GLOB工具的抽象。有助于搜索文件、获取文件和目录列表。
$scan = new Scan($logger); // search directory for text files (recursive) $scan->files($path_to_file_directory, '*.txt')) // list subdirectories (not recursive) $scan->directories($path_to_file_directory)