2011-02-15 77 views
0

这可能是一个简单的问题或一个相当复杂的问题,让你成为决定者。强制打开并阅读来自php的zip文件

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

但是可以说该文件是不是拉链,但仍然能够通过WinRAR的读取,这些文件的例子是一样的exe自解压文件等

做所有这些文件有哪些因素conmen允许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); 

问候。

回答

3

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

查找压缩文件主要是扫描文件中的压缩文件的“幻数”,然后执行一些启发式操作以确定它是否真的是zip文件,或者只是随机发生的某些事情包含zip的魔法数。

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

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

没有什么太神奇的了。这只是通过扫描文件并寻找签名的问题。

1

不知道你的问题到底是什么,但我认为你在这里混淆了一些东西......文件扩展名可以被描述为人类和计算机将文件扩展名与文件类型与他们合作。 WinRar(或任何其他程序)读取该文件包含的内容,以及它是否可以理解它 - 它适用于它。唯一重要的是文件格式(文件中的数据)是有效的,并且您正在使用的程序可以使用该文件格式。因此,如果一个文件是WinRar可以使用的任何格式(.rar,.zip,.gz等),它的扩展名可能是.txt或.wr,WinRar仍然可以使用它。扩展只是为了方便。

+0

对不起,我理解扩展和内容类型,我的问题是什么决定档案文件从一个普通的文件,采取`.docx`文件,这是一个文件,这将不会有相同的结构一个`.rar` winrar归档文件,但是必须有相似之处,因为winrar能够读取它们中的内容文件。 – RobertPitt 2011-02-15 18:58:30

+0

那么,.rar和.gz也有很大的不同,但WinRar可以与两者兼容。只是创建WinRar(或任何其他程序)的人使它能够使用这种文件格式。 .docx也是如此 - 编写WinRar的人写道它能够“理解”.docx格式。关于这一点真的没有“法律”。如果你可以让你的软件以更多格式工作,如果它有意义(对于存档播放器来说mp3会很奇怪),如果它会被用户使用 - 那就做吧。我对.docx不太了解,但它不需要和WinRar有相同之处。WinRar可以使用 – Nikoloff 2011-02-15 19:07:47