libriciel / file-validator
允许检查文件的有效性
Requires
- php: ^7.4 || ^8.1
- ext-dom: *
- ext-fileinfo: *
- ext-json: *
- phpoffice/phppresentation: ^0.9.0
- phpoffice/phpspreadsheet: @beta
- phpoffice/phpword: ^0.13.0
Requires (Dev)
- libriciel/file-validator-tests: dev-master
- phpunit/phpunit: ~8.5.0
README
先决条件
为了正确使用此工具,建议安装Ubuntu 16.04 LTS。需要PHP版本 >= 5.6(兼容PHP 7)。此外,您还需确保以下软件包安装以支持所有类型的文件:
sudo apt-get install imagemagick mediainfo poppler-utils catdoc zip gzip rar webp libxml2-utils
sudo sed -i.orig -e's#<policy domain="coder" rights="none" pattern="PDF" />#<policy domain="coder" rights="read" pattern="PDF" />#' "/etc/ImageMagick-6/policy.xml"
安装
composer config repositories.libriciel/file-validator git git@gitlab.libriciel.fr:file-validator/file-validator.git
composer require libriciel/file-validator ~1.0
使用 FileValidator
简单的 require_once 'vendor/bootstrap.php';
语句即可访问库。然后,您可以按如下方式使用它:FileValidator\Utility\FileValidator::check($filename);
。此命令返回文件有效性的布尔值。您可以在 "test" 部分查看使用示例。
在需要的情况下,您可以禁用特定类型文件的验证。例如,可以这样操作:FileValidator\Utility\FileValidator::$callbacks['pdf'] = 'isValid';
,这样PDF文件将被视为始终有效。您可以使用此特性来覆盖类以添加一个或多个回调。如果您创建了自定义函数 checkCustomPdf(),则可以使用以下代码:FileValidator\Utility\FileValidator::$callbacks['pdf'] = 'checkCustomPdf';
。
在验证过程中,可能会遇到设计有误但仍然可读的文件。默认情况下,验证器将它们视为有效,但有时可能需要更严格的文件质量控制。为此,您可以设置 FileValidator\Utility\FileValidator::$allowNonFatalError = false;
。
如果您需要了解为什么某个文件无效,可以设置以下代码以显示某些错误:FileValidator\Utility\FileValidator::$displayErrors = true;
。
使用 FileIdentify
此类由 FileValidator 使用以选择要使用的回调。您可能需要修改它(其属性或通过覆盖)以添加/删除支持的文件类型。当然,您也可以用它来识别文件类型以供其他用途。为此,只需使用 File\Identify\FileIdentify::identify($filename)
以获取文件类型,如 'pdf' 或 'audio'。
您可以添加文件扩展名,例如音频类型,通过以下方式:File\Identify\FileIdentify::$extensionTypes['audio'][] = 'monext'
注意这指定了MIME类型,如果 FileIdentify 检测到扩展名和MIME类型之间的不一致,将引发错误!因此,在某些情况下,您可能需要修改MIME类型的检测。尤其是对于以 application 开头的MIME类型。
要修改 application 类型的MIME类型检测,可以添加以下值到 File\Identify\FileIdentify::$typeInMime[] = 'mon-type-mime-custom'
,如果MIME类型的第二部分包含搜索值。注意:请注意此 数组 中的顺序,例如:gzip被放置在zip之前,否则zip会在两种情况下都被检测到。
您可以处理异常。在某些情况下,扩展名和MIME类型之间的不一致是正常的。为此,请按以下方式添加值:File\Identify\FileIdentify::$correctMismatch[] = ['ext' => 'mka', 'mime' => 'video/x-matroska', 'type' => 'audio']
。在此示例中,扩展名为mka的文件是 audio 类型,其MIME类型为 video,通过在 $correctMismatch 中添加此值,此异常将被忽略。
使用 FileCorruptor
创建用于提供测试数据,但您也可以使用以下两个命令之一来使用它:
fwrite($File, File\Corruptor\FileCorruptor::lowLevelCorruption($filename));
fwrite($File2, File\Corruptor\FileCorruptor::highLevelCorruption($filename));
正如它们的名称所表明的,这两个函数提供不同的损坏级别。某些低级别损坏的文件仍然可读或可修复,而另一种损坏级别将完全修改文件。