PHP에서 Zip 파일을 작동 할 때는 종종 ZipACHIVE 클래스의 일부에 속하는 Zip_Read () 함수를 사용하며 주로 Zip 패키지의 파일 항목을 가로 지르고 읽는 데 사용됩니다. 그러나 암호화 된 ZIP 파일을 만나면 많은 개발자가 Zip_Read () 로 읽는 독서가 암호화 된 콘텐츠에 실패하거나 단순히 액세스 할 수 없다는 것을 알게됩니다. 그렇다면 왜 이거야? 이 기사는 PHP의 ZIP 확장 메커니즘을 결합 하여이 문제의 원인과 해당 솔루션을 자세히 분석합니다.
$zip = zip_open('encrypted.zip');
if ($zip) {
while ($entry = zip_read($zip)) {
echo zip_entry_name($entry) . "\n";
if (zip_entry_open($zip, $entry)) {
echo zip_entry_read($entry, zip_entry_filesize($entry));
zip_entry_close($entry);
}
}
zip_close($zip);
}
위의 코드는 일반적인 zip 파일을 읽을 때 정상적으로 작동하지만 암호화 된 zip 파일을 만날 때 다음과 같은 문제가 발생합니다.
파일 내용을 읽지 못하면 Zip_entry_Read ()는 빈 문자열 또는 오류를 반환합니다.
Zip_Read ()가 false를 반환하면서 나타나는 파일 항목으로는 횡단 할 수 없습니다.
Zip_Read ()는 PHP의 libzip 라이브러리의 기존 인터페이스 (Zip 파일을 기반으로하는 저수준 조작)에 속하며 암호화 된 파일 내용의 해독을 기본적으로 지원하지 않습니다. 암호화 된 zip 파일 (일반적으로 암호로 보호 된) 파일 데이터 암호화 방법을 사용하며 데이터는 단순히 일반 텍스트로 저장되지 않습니다.
zip_read ()는 zip 파일에서 파일 항목 및 암호화되지 않은 파일 내용에만 액세스 할 수 있습니다.
ZIP 파일이 암호화 된 경우 Zip 확장자는 해당 암호 해독 로직을 호출하여 올바른 암호를 제공하여 파일을 올바르게 읽어야합니다.
PHP의 zip_read () 는 비밀번호 매개 변수를 제공하지 않으며 자동 해독을 지원하지 않습니다.
요컨대, Zip_Read ()는 디자인에서 암호화 된 파일을 읽는 것을 지원하지 않습니다.
버전 7.2로 시작하는 PHP의 Zip Extension은보다 완전한 ZipACHive 클래스를 제공하며 암호화 된 파일을 읽을 수있는 암호를 설정하는 것을 지원합니다.
$zip = new ZipArchive();
$res = $zip->open('encrypted.zip');
if ($res === true) {
// 비밀번호를 설정하십시오
$zip->setPassword('your_password');
for ($i = 0; $i < $zip->numFiles; $i++) {
$stat = $zip->statIndex($i);
echo "File: " . $stat['name'] . "\n";
$stream = $zip->getStream($stat['name']);
if (!$stream) {
echo "Failed to open stream for {$stat['name']}\n";
continue;
}
$contents = stream_get_contents($stream);
fclose($stream);
echo $contents;
}
$zip->close();
} else {
echo "Failed to open zip file\n";
}
키 노트 :
setpassword () 메소드는 암호 해독에 필요한 비밀번호를 제공하는 데 사용됩니다.
getStream ()을 사용하여 암호가 올바른 경우 암호화 된 파일의 컨텐츠 스트림을 얻으십시오.
이 방법은 암호화 된 ZIP 파일 내용을 정상적으로 읽을 수 있습니다.
Zip_Read () 는 초기에 PHP의 Zip 작동 인터페이스이며 암호화 된 파일을 처리 할 수 없습니다.
암호화 된 ZIP 파일은 Ziparchive와 같은 비밀번호 암호 해독을 지원하는 인터페이스를 사용해야합니다.
ziparchive :: setpassword ()를 사용하여 PHP는 암호화 된 파일을 성공적으로 열고 읽을 수 있습니다.
실제 개발에서는 암호화 된 ZIP 파일을 만날 때 Outdated Zip_Read ()를 사용하지 않도록 Ziparchive 클래스를 사용하는 것이 좋습니다.