2016-11-05 5 views
0

PHP에서 압축 파일 (zip, rar, z7, gz 등)을 추출하고 싶습니다. 암호에는 ¡ ¿와 같은 특수 문자가 포함될 수 있기 때문에 PHP exec는 (어떤 이유로) 유니 코드 문자를 지원하지 않습니다. 나는 여기 php exec() in unicode mode?에 설명 된대로 배치 파일을 사용하여 eneded.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을 사용하여 추출하십시오. 내가 25mb.bin암호 25mb.rar "(단일 따옴표)에 저장 test.rar에 저장된 파일을 (아래 참고)

를 오류는 다음과 같습니다.

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를 찾을 관리! a로 다음에 -p 매개 변수가 아님을

"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 

주의 (!) "

파일 pass.txt 포함 (추가 한 경우, 그것이 작동하지 않음) \ 연구 \ n (큰 따옴표 ! 줄 바꿈)

은 "-sccutf-8"옵션에 특수 문자가 잘 작동을 보장

그것은 작동

편집 2 :! 비밀번호 파일에 °, ¡, ¿ 또는 §과 같은 특수 문자가 포함되어있는 경우에도이 방법은 계속 작동합니다! 작동하게하려면 "-sccutf-8"을 설정해야합니다.