我想從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);