如何在不知道扩展名的情况下检查文件是否存档(zip或rar)。我需要使用php来找到它。检查文件是否存档(zip或rar)使用php
我无法使用Fileinfo,因为它没有安装并且在服务器上安装任何其他软件包而无法正常工作。
更新:
未安装Zip模块,我无法安装额外的软件包。 我不想使用mime_content_type,因为它已过时
谢谢
如何在不知道扩展名的情况下检查文件是否存档(zip或rar)。我需要使用php来找到它。检查文件是否存档(zip或rar)使用php
我无法使用Fileinfo,因为它没有安装并且在服务器上安装任何其他软件包而无法正常工作。
更新:
未安装Zip模块,我无法安装额外的软件包。 我不想使用mime_content_type,因为它已过时
谢谢
输出od -c
:
0000000 R a r ! 032 \a \0 317 220 s \0 \0 \r \0 \0 \0
0000000 P K 003 004 \n \0 \0 \0 \0 \0 \0 \0 ! \0 \0 \0
你可以使用这样的事情:
<?php
$fh = @fopen($argv[1], "r");
if (!$fh) {
print "ERROR: couldn't open file.\n";
exit(126);
}
$blob = fgets($fh, 5);
fclose($fh);
if (strpos($blob, 'Rar') !== false) {
print "Looks like a Rar.\n";
} else
if (strpos($blob, 'PK') !== false) {
print "Looks like a ZIP.\n";
} else {
print "I dunno.\n";
exit(1);
}
?>
而我的输出:
[email protected]:~ 423$ ./filephp.php A2.rar
Looks like a Rar.
[email protected]:~ 424$ ./filephp.php OLDIE.zip
Looks like a ZIP.
[email protected]:~ 425$ ./filephp.php 1-11-1.PDF
I dunno.
[email protected]:~ 426$
'=== 0'似乎更合适 – hakre 2012-02-01 17:08:51
感谢您的详细答案 – keepwalking 2012-02-01 18:45:09
感谢您的答案,鱼! – liljoshu 2017-04-20 23:14:38
要测试一个文件是否是一个zip压缩包,你可以尝试打开它使用open_zip
功能的拉链。对于rar,您需要安装PECL rar(最好版本至少2.0.0) - 有关更多详细信息,请参阅http://php.net/manual/en/book.rar.php。代码看起来是这样的:
if(is_resource($zip = zip_open($filename))
{
zip_close($zip);
//this is a zip archive
}
else(($rar = RarArchive::open($filename)) !== FALSE)
{
$rar->close();
//this is a rar archive
}
else
{
//this is not a zip or rar archive
}
你可能需要做一些额外的工作,如果档案是密码保护。阅读相应的php手册页面以获取更多详细信息。
您可以从unix file命令输出信息并解析它(假设您可以执行系统命令,这是不好的做法)。
这是centos“文件文件名称”输出的示例。
[RR @本地图像](主)#文件UI-anim_basic_16x16.gif UI-anim_basic_16x16.gif:GIF图像数据,版本89A,16×16
[RR @本地图像](主站)#文件UI-icons_454545_256x240.png UI-icons_454545_256x240.png:PNG图像数据,256×240,8-位的颜色表,非隔行扫描
[RR @本地供应商](主)#文件jquery的验证-1.9.0.zip jquery-validation-1.9.0.zip:Zip档案资料,至少要提取v1.0
也像其他人一样建议,你可以读几个字节并检查它们是否与签名匹配。
对RAR
识别字符十六进制:52 61 72 21 1A 07 00,ASCII:的RAR!
用于拉链
识别字符十六进制:50 4B 03 04,ASCII:PK
阅读前10个字节的文件。如果它们是(80,75,3,4,20,0,0,0,8,0),它是一个ZIP文件。 RAR文件包含以下7个第一个字节:(82,97,114,33,26,7,0) 如果您在文本编辑器(例如Notepad ++)中打开ZIP文件,您将看到: PK [ETX ] [EOT] [DC4] [NUL] [NUL] [NUL] [BS] [NUL] ....->上面列出了字符的ASCII码。 对于RAR文件,图片是: RAR![SUB] [BEL] [NUL] .... 因此,只需读取文件的10个第一个字节,就可以知道它是ZIP还是RAR存档。 干杯
mime_content_type但它的弃用和Fileinfo其未安装在服务器上,我无法安装它。 – keepwalking 2012-02-01 15:45:06
$ zip = zip_open($ file); if(is_resource($ zip)){//它的zip} else {//它的非zip |}但是对于rar我不确定 – 2012-02-01 15:45:26
你应该在你的问题中提到这个,这样你就不会得到建议使用'Fileinfo'的答案。显然,你提供的信息越多,你会得到更好的答案。 – 2012-02-01 15:46:17