2011-02-15 65 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