PHP7.2Finfo魔术文件
我有一个Laravel5项目,让用户下载.ai(illustrator文件)。问题是Laravel将.ai文件检测为application/pdf 我正在使用此函数检测mime类型PHP7.2Finfo魔术文件,php,mime-types,libmagic,Php,Mime Types,Libmagic,我有一个Laravel5项目,让用户下载.ai(illustrator文件)。问题是Laravel将.ai文件检测为application/pdf 我正在使用此函数检测mime类型 $type = File::mimeType( $_path ); 我也尝试过使用这种方法,但得到了相同的结果 $finfo = finfo_open(FILEINFO_MIME); $mimetype = $finfo->file($_path); finfo_close($finfo); 我想,这一定是
$type = File::mimeType( $_path );
我也尝试过使用这种方法,但得到了相同的结果
$finfo = finfo_open(FILEINFO_MIME);
$mimetype = $finfo->file($_path);
finfo_close($finfo);
我想,这一定是PHP的一个问题,只是不知道.ai文件是什么。我深入研究了finfo,我知道默认的mime定义是编译成PHP的,但我看到finfo_open有第二个参数“magic_file”,我假设这是一个可以插入不同mime定义文件路径的地方
我尝试使用Ubuntu的/etc/magic.mime文件,但finfo给了我
ErrorException: finfo_open(): Warning: offset `application\/activemessage' invalid in
错误。我认为这是因为magic.mime文件的格式不正确
大多数在线主题都会创建一个自定义PHP函数或其他一些黑客来检测mime类型,但我觉得这似乎不是正确的解决方案
在哪里可以找到最新的mime定义文件,如何将它们加载到PHP或finfo中
我的环境:
Ubuntu 16.04
PHP 7.2
我想,这一定是PHP的一个问题,根本不知道
.ai文件是。我深入研究了finfo,我知道默认
mime定义被编译成PHP,但我看到finfo_open
第二个参数是“magic_file”,我假设它是一个可以
插入其他mime定义文件的路径
通过在文件中的特定位置查找某些魔术序列,可以尝试猜测mime类型。magic文件是一个数据库,它存储了已知的magic序列
我有一个Laravel5项目,让我们下载一个用户
(illustrator文件)。问题是Laravel将.ai文件检测为
申请表/pdf
按照上面的解释,可以通过查找magic文件来检测pdf格式的.ai
文件。因为是一个可以保存为EPS或PDF格式的文件
为了区分普通pdf文件和以pdf格式保存的ai文件,我做了一些研究。首先,我从互联网上下载了免费的ai文件,通过使用命令hextump
和file
来识别文件
$ hexdump -C 7_full_ai_vi_template_vector_8.ai | head
00000000 25 50 44 46 2d 31 2e 34 0d 25 e2 e3 cf d3 0d 0a |%PDF-1.4.%......|
00000010 31 20 30 20 6f 62 6a 0d 3c 3c 20 0d 2f 54 79 70 |1 0 obj.<< ./Typ|
00000020 65 20 2f 43 61 74 61 6c 6f 67 20 0d 2f 50 61 67 |e /Catalog ./Pag|
00000030 65 73 20 32 20 30 20 52 20 0d 2f 4d 65 74 61 64 |es 2 0 R ./Metad|
00000040 61 74 61 20 38 38 20 30 20 52 20 0d 3e 3e 20 0d |ata 88 0 R .>> .|
00000050 65 6e 64 6f 62 6a 0d 32 20 30 20 6f 62 6a 0d 3c |endobj.2 0 obj.<|
00000060 3c 20 0d 2f 54 79 70 65 20 2f 50 61 67 65 73 20 |< ./Type /Pages |
00000070 0d 2f 4b 69 64 73 20 5b 20 35 20 30 20 52 20 5d |./Kids [ 5 0 R ]|
00000080 20 0d 2f 43 6f 75 6e 74 20 31 20 0d 3e 3e 20 0d | ./Count 1 .>> .|
00000090 65 6e 64 6f 62 6a 0d 33 20 30 20 6f 62 6a 0d 3c |endobj.3 0 obj.<|
$ file 7_full_ai_vi_template_vector_8.ai
7_full_ai_vi_template_vector_8.ai: PDF document, version 1.4
PHP脚本对.ai
$ cat fileinfo.php
<?php
$magic_file = __DIR__ . '/ai';
$finfo = new finfo(FILEINFO_NONE, $magic_file);
echo $finfo->file($argv[1]) . PHP_EOL;
这是可行的,但我认为维护自己的魔法文件不是个好主意。也许您可以为它编写简单的函数,在$type=File::mimeType($\u路径)之后检测.ai
代码>表示它是pdf文件
$ cat fileinfo.php
<?php
$magic_file = __DIR__ . '/ai';
$finfo = new finfo(FILEINFO_NONE, $magic_file);
echo $finfo->file($argv[1]) . PHP_EOL;
$ php fileinfo.php ./7_full_ai_vi_template_vector_8.ai
PDF document, version 1.4 Adobe Illustrator Document