0

这可能是一个简单的问题,也可能是一个相当复杂的问题,让你成为决定者。

使用 PHP 打开一个 zip 文件,将文件解压到一个目录并关闭 zip 文件并不是一个复杂的类。

但是可以说该文件不是 zip,但可以被WinRar读取,这些文件的示例就像 exe 的 SFX 档案等。

所有这些文件都有哪些因素可以让WinRar浏览它们的来源。

另一个例子是防病毒软件,它单独扫描 EXE 中的文件?

举个例子:

$handle = fopen("an_unknown_file.abc", "rb");
while (!feof($handle))
{
    //What generic code could I use to determain weather the file can be extracted ?
}
fclose($handle);

问候。

4

2 回答 2

3

Zip 的规范允许将实际的“zip”文件部分嵌入文件中的任何位置。它不一定必须从文件中的位置“0”开始。这就是自解压拉链的工作原理。这是一个小的 .exe 存根程序,其末尾附加了一个较大的 .zip 文件。

查找 zip 主要是在文件中扫描 zip 文件的“幻数”,然后进行一些启发式方法来确定它是否真的是 zip 文件,或者只是碰巧包含 zip 幻数的随机文件。

.docx 文件实际上只是一个 .zip,其中包含表示 Word 文件内容的各种 XML 文件。就像 .jar 是一个包含各种不同 Java 代码块的 zip 文件一样。

Winrar 中有一堆额外的代码来扫描文件并查找任何可识别的“这是一个压缩存档”类型签名,其中一个恰好是 zip 文件的签名。

没有什么太神奇的了。只需扫描文件并查找签名即可。

于 2011-02-15T19:10:34.837 回答
1

不确定你的问题到底是什么,但我认为你在这里混淆了一些东西......文件扩展名可以描述为人类和计算机将文件扩展名与使用它们的文件/程序的类型相关联的一种方便方式。WinRar(或任何其他程序)读取文件包含的内容,如果它可以理解它 - 它可以使用它。唯一重要的是文件格式(文件中的数据)是有效的,并且您使用的程序可以使用这种文件格式。

因此,如果文件是 WinRar 可以使用的任何格式(.rar、.zip、.gz 等),它的扩展名可以是 .txt 或 .whatever,WinRar 仍然可以使用它。扩展只是为了方便。

于 2011-02-15T18:54:04.640 回答