2016-11-05 78 views
0

我想從PHP中提取存檔文件(zip,rar,z7,gz等)。由於密碼可以包含特殊字符(例如¡),並且PHP exec不支持unicode字符(出於某種原因)。我用這個php exec() in unicode mode?中解釋的批處理文件來支持它。在Windows命令行中用雙引號提取密碼存檔

但是,一樣可愛的窗戶10,我似乎無法弄清楚如何提取具有單一雙引號作爲密碼存檔...

"C:\Program Files\7-Zip\7z.exe" x "C:\Users\me\Desktop\25mb.rar" -o"C:\Users\me\Desktop\" -p"password here" -y 

這是默認的行使用7zip提取。 (下面的註釋) 我有一個文件存儲在test.rar存儲在25mb.rar與密碼「(單一雙引號)25mb.bin

的錯誤是:

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 

Scanning the drive for archives: 
1 file, 13312 bytes (13 KiB) 

Extracting archive: C:\Users\me\Desktop\25mb.rar 
-- 
Path = C:\Users\me\Desktop\25mb.rar 
Type = Rar 
Physical Size = 13312 
Solid = - 
Blocks = 1 
Multivolume = - 
Volumes = 1 

ERROR: Data Error in encrypted file. Wrong password? : test.rar 

Sub items Errors: 1 

Archives with Errors: 1 

Sub items Errors: 1 

我想:

-p" * 
-p"" ** 
-p""" * 
-p"""" ** 
-p"^"" * (default escape for CMD) 
-p"\"" * 

*:釷e行詢問我是否要覆蓋,這意味着-y未被執行,但被視爲密碼的一部分。

**:執行,但有錯誤。提取的文件test.rar無法打開(損壞)

注:此方法有任何沒問題〜`@#$%^ &()_ + - = {} [] |! ;」 <>?,。/€* *

注意:winRAR有一個很好的功能,你可以在其中提供一個帶密碼的文件,用來提取,而不是提供一個字符串。但是,這隻適用於RAR文件(!),因此在我的情況下無用。

例如用RAR:

file_put_contents('C:\Users\bunny\Desktop\pass.txt', $password); 
exec('"C:\\Program Files\\WinRAR\\winrar" e -ad -p "C:\\Users\\me\\Desktop\\25mb.rar" *.* "C:\\Users\\me\\Desktop\" < "C:\\Usersme\\Desktop\\pass.txt"', $extractStatus); 

回答

1

好了,測試隨意的事情後,我好不容易找到answear!

"C:\Program Files\7-Zip\7z.exe" x "C:\Users\me\Desktop\dq.rar" -o"C:\Users\me\Desktop\" -sccutf-8 -y < C:\Users\me\Desktop\pass.txt 

注意,-p參數不存在(!)(如果添加的話,它不工作)

文件pass.txt包含「\ r \ n(雙引號後面是!換行符)

的 「-sccutf-8」 選項確保特殊字符的工作,以及

它的工作原理

編輯2: 當密碼文件包含特殊字符(如°,¡,¿或§)時,此方法仍然有效!您必須設置「-sccutf-8」才能使其工作

相關問題