zenoware / laravel-sql-dump-validator
递归查找并验证目录内的SQL导出(.sql.gz)文件。
Requires
- php: ^8.1
- laravel/framework: ^9.0 || ^10.0
- symfony/process: ^6.0
Requires (Dev)
- mockery/mockery: ^1.6
- phpunit/phpunit: ^10.5
README
此包提供Laravel命令和服务,用于验证SQL导出文件是否损坏。它使用gunzip -t
命令来测试.sql.gz
文件的完整性。
安装
使用composer安装此包
composer require zenoware/laravel-sql-dump-validator
要求
该包需要系统上安装了gunzip
命令。该命令用于测试.sql.gz
文件的完整性。
用法
命令
您可以使用提供的命令来验证SQL导出文件。该命令接受一个路径和一个可选的深度参数。
php artisan zenoware:sqldump:validate {path} {--depth=2}
验证storage/app/sqldumps
目录中的SQL导出文件
php artisan zenoware:sqldump:validate storage/app/sqldumps
以最大深度3验证storage/app/sqldumps
目录中的SQL导出文件
php artisan zenoware:sqldump:validate storage/app/sqldumps --depth=3
path
参数是您的SQL导出文件所在的目录。--depth
选项是文件搜索的最大目录深度。
命令将验证结果打印到控制台。如果文件已损坏,则将打印包含文件路径和错误详情的错误消息。
路由和任务
由于该命令底层使用SqlDumpValidatorService
,因此您也可以通过在任务或路由中运行命令来监听事件以处理验证结果。
# Be wary of timeouts when calling the command from a route or a job Artisan::call('zenoware:sqldump:validate', ['path' => storage_path('app/sqldumps')]);
服务
您还可以在代码中直接使用SqlDumpValidatorService
。该服务接受一个路径、一个深度和一个回调函数。
$validatorService->validateSqlDumps($path, $depth, function (SqlDumpFileMetadata $metadata, array $errors) { // Handle the validation results });
回调函数对于每个处理的文件都会被调用。它接收一个SqlDumpFileMetadata
对象和错误数组。如果文件正常,则错误数组为空。
服务提供商
该包包括一个服务提供商,它将SqlDumpValidatorService
和IFileAdapter
接口注册到Laravel服务容器中。
如果您想使用不同的文件适配器,您可以在自己的服务提供商中将自己的实现绑定到IFileAdapter
接口。
监听事件
命令使用的服务为每个处理的文件触发一个事件。您可以监听/订阅事件来处理验证结果。
class SqlDumpEventSubscriber { public function subscribe($events) { $events->listen( SqlDumpFileOk::class, function ($event) { Log::info('SqlDumpFileOk event fired', ['metadata' => $event->metadata]); } ); $events->listen( SqlDumpFileCorrupted::class, function ($event) { Log::info('SqlDumpFileCorrupted event fired', ['metadata' => $event->metadata, 'errors' => $event->errors]); } ); } }
class EventServiceProvider extends ServiceProvider { // [...] protected $subscribe = [ SqlDumpEventSubscriber::class, ]; // [...] }
贡献
欢迎提交拉取请求。对于重大更改,请首先打开一个问题来讨论您想更改的内容。