如何在不知道扩展名的情况下检查文件是否已存档(zip或rar).我需要使用php找到它.
我不能使用Fileinfo,因为它没有安装和安装在服务器上的任何其他软件包是不可能的.
更新:
Zip模块没有安装,我无法安装额外的包.我不想使用mime_content_type,因为它已被弃用
谢谢
gho*_*oti 12
输出来自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
Run Code Online (Sandbox Code Playgroud)
你可以使用这样的东西:
<?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);
}
?>
Run Code Online (Sandbox Code Playgroud)
我的输出:
ghoti@baz:~ 423$ ./filephp.php A2.rar
Looks like a Rar.
ghoti@baz:~ 424$ ./filephp.php OLDIE.zip
Looks like a ZIP.
ghoti@baz:~ 425$ ./filephp.php 1-11-1.PDF
I dunno.
ghoti@baz:~ 426$
Run Code Online (Sandbox Code Playgroud)
要测试文件是否为zip存档,您可以尝试使用open_zip函数将其作为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
}
Run Code Online (Sandbox Code Playgroud)
如果存档受密码保护,则可能需要做一些额外的工作。阅读相应的php手册页以获取更多详细信息。