현재 위치: > 최신 기사 목록> 암호화 된 지퍼 파일을 무효화하기 위해 zip_read ()를 사용하는 문제에 대한 설명

암호화 된 지퍼 파일을 무효화하기 위해 zip_read ()를 사용하는 문제에 대한 설명

M66 2025-06-05

PHP에서 Zip 파일을 작동 할 때는 종종 ZipACHIVE 클래스의 일부에 속하는 Zip_Read () 함수를 사용하며 주로 Zip 패키지의 파일 항목을 가로 지르고 읽는 데 사용됩니다. 그러나 암호화 된 ZIP 파일을 만나면 많은 개발자가 Zip_Read () 로 읽는 독서가 암호화 된 콘텐츠에 실패하거나 단순히 액세스 할 수 없다는 것을 알게됩니다. 그렇다면 왜 이거야? 이 기사는 PHP의 ZIP 확장 메커니즘을 결합 하여이 문제의 원인과 해당 솔루션을 자세히 분석합니다.

1. 문제 현상

 $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를 반환하면서 나타나는 파일 항목으로는 횡단 할 수 없습니다.

2. 근본 원인 분석

Zip_Read ()는 PHP의 libzip 라이브러리의 기존 인터페이스 (Zip 파일을 기반으로하는 저수준 조작)에 속하며 암호화 된 파일 내용의 해독을 기본적으로 지원하지 않습니다. 암호화 된 zip 파일 (일반적으로 암호로 보호 된) 파일 데이터 암호화 방법을 사용하며 데이터는 단순히 일반 텍스트로 저장되지 않습니다.

  • zip_read ()는 zip 파일에서 파일 항목 및 암호화되지 않은 파일 내용에만 액세스 할 수 있습니다.

  • ZIP 파일이 암호화 된 경우 Zip 확장자는 해당 암호 해독 로직을 호출하여 올바른 암호를 제공하여 파일을 올바르게 읽어야합니다.

  • PHP의 zip_read () 는 비밀번호 매개 변수를 제공하지 않으며 자동 해독을 지원하지 않습니다.

요컨대, Zip_Read ()는 디자인에서 암호화 된 파일을 읽는 것을 지원하지 않습니다.

3. 올바른 방법 : Ziparchive Class의 비밀번호 암호 해독 기능 사용

버전 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 파일 내용을 정상적으로 읽을 수 있습니다.

4. 요약

  • Zip_Read () 는 초기에 PHP의 Zip 작동 인터페이스이며 암호화 된 파일을 처리 할 수 ​​없습니다.

  • 암호화 된 ZIP 파일은 Ziparchive와 같은 비밀번호 암호 해독을 지원하는 인터페이스를 사용해야합니다.

  • ziparchive :: setpassword ()를 사용하여 PHP는 암호화 된 파일을 성공적으로 열고 읽을 수 있습니다.

  • 실제 개발에서는 암호화 된 ZIP 파일을 만날 때 Outdated Zip_Read ()를 사용하지 않도록 Ziparchive 클래스를 사용하는 것이 좋습니다.