현재 위치: > 최신 기사 목록> Zip_Read () 함수를 사용하여 빈 디렉토리가 포함 된 ZIP 파일을 올바르게 압축하여 빈 디렉토리가 손실되는 문제를 피하는 방법은 무엇입니까?

Zip_Read () 함수를 사용하여 빈 디렉토리가 포함 된 ZIP 파일을 올바르게 압축하여 빈 디렉토리가 손실되는 문제를 피하는 방법은 무엇입니까?

M66 2025-07-18

php에서 zip 파일을 처리 할 때 zip_read () 함수는 zip 파일 항목을 읽는 일반적인 방법입니다. 그러나 빈 디렉토리가 포함 된 zip 파일을 압축 해제 할 때 많은 개발자가 빈 디렉토리 누락 문제가 발생합니다. 빈 디렉토리 자체에는 파일이 없기 때문입니다. Zip_Read ()는 기본적으로 파일 항목만을 가로 지르고 디렉토리 항목을 무시하여 빈 디렉토리가 올바르게 생성되지 않습니다.

이 기사는 Zip_read () 함수를 사용하여 빈 디렉토리의 손실을 피하고 완전한 압축 압력 파일 구조를 보장하기 위해 빈 디렉토리를 올바르게 식별하고 압축 해제하는 방법을 자세히 소개하는 샘플 코드를 결합합니다.


1. 문제 분석

zip 파일의 항목에는 파일과 디렉토리가 모두 포함되며 디렉토리 항목은 일반적으로 / 로 끝납니다. zip_read ()가 반환 한 항목 이름에서 / 로 끝나면 디렉토리임을 의미합니다. 정상 감압 중에 파일의 해당 디렉토리 만 만들지 만 빈 디렉토리 항목을 처리하지 않으면 빈 디렉토리가 무시됩니다.


2. 샘플 코드 데모

다음은 zip 파일을 읽고 파일을 디렉토리와 구별하며 빈 디렉토리를 올바르게 생성하는 방법을 보여주는 PHP Native Zip 기능을 기반으로 한 예입니다.

 <?php
$zipPath = 'archive.zip'; // ZIP 파일 경로
$extractTo = 'output/';   // 대상 디렉토리를 압축 해제하십시오

$zip = zip_open($zipPath);
if (!is_resource($zip)) {
    die("열 수 없습니다 ZIP 문서\n");
}

while ($entry = zip_read($zip)) {
    $entryName = zip_entry_name($entry);

    // 디렉토리 항목이 있는지 확인하십시오,디렉토리 항목 '/' 종결
    if (substr($entryName, -1) === '/') {
        // 빈 디렉토리를 만듭니다
        $dirPath = $extractTo . $entryName;
        if (!is_dir($dirPath)) {
            mkdir($dirPath, 0755, true);
            echo "빈 디렉토리를 만듭니다:$dirPath\n";
        }
    } else {
        // 문서条目,디렉토리가 먼저 존재하는지 확인하십시오
        $filePath = $extractTo . $entryName;
        $dir = dirname($filePath);
        if (!is_dir($dir)) {
            mkdir($dir, 0755, true);
        }

        // 读取문서内容并写入
        if (zip_entry_open($zip, $entry)) {
            $fp = fopen($filePath, 'w');
            while ($data = zip_entry_read($entry, 1024)) {
                fwrite($fp, $data);
            }
            fclose($fp);
            zip_entry_close($entry);
            echo "解压문서:$filePath\n";
        }
    }
}

zip_close($zip);
?>

3. 핵심 요점의 요약

  • 디렉토리 항목 결정 : zip_entry_name ()을 사용하여 항목 이름을 얻고 디렉토리 항목은 일반적으로 / 로 끝납니다.

  • 빈 디렉토리 만들기 : 디렉토리 항목을 만나면 해당 디렉토리를 직접 만듭니다.

  • 파일 및 상위 디렉토리 작성 : 파일 항목의 경우 부모 디렉토리가 먼저 존재하는지 확인한 다음 파일 내용을 작성하십시오.

  • 권한과 재귀 생성 : mkdir () 의 세 번째 매개 변수는 True 로 설정되어 있으며 다단계 디렉토리를 재귀 적으로 생성합니다.


4. 관련 링크

PHP ZIP 기능에 대한 자세한 내용은 공식 설명서를 참조하십시오.