使用php检查文件是否存档(zip或rar)

kee*_*ing 12 php

如何在不知道扩展名的情况下检查文件是否已存档(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)

  • `=== 0`似乎更合适 (3认同)

Ale*_*s G 5

要测试文件是否为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手册页以获取更多详细信息。