현재 위치: > 최신 기사 목록> Zip_Read 함수를 사용할 때 __macosx와 같은 특정 파일 항목을 건너 뛰나요?

Zip_Read 함수를 사용할 때 __macosx와 같은 특정 파일 항목을 건너 뛰나요?

M66 2025-06-12

Zip 파일을 처리하기 위해 PHP를 사용하는 경우 Zip_Read 기능은 항목별로 압축 패키지 항목에서 파일 항목을 읽는 데 일반적으로 사용되는 인터페이스입니다. 그러나 때로는 MacOS 시스템에서 생성 된 __macoSx 디렉토리 또는 기타 숨겨진 파일과 같은 원치 않는 폴더 또는 파일 항목이 발생합니다. 이러한 항목은 일반적으로 비즈니스 로직에 의미가 없으며 파일 처리 흐름을 방해 할 수도 있으므로 트래버스 중에 건너 뛰어야합니다.

이 기사는 Zip_Read 함수를 사용할 때 이러한 특정 파일 항목을 필터링하는 방법을 설명합니다.

기본 예

다음은 zip 파일을 열고 파일 항목을 반복하는 방법을 보여주는 간단한 예입니다.

 <?php
$zipPath = 'example.zip';
$zip = zip_open($zipPath);

if ($zip) {
    while ($zipEntry = zip_read($zip)) {
        $entryName = zip_entry_name($zipEntry);
        echo "Found entry: $entryName\n";
    }
    zip_close($zip);
} else {
    echo "Failed to open ZIP file.";
}
?>

__macosx 및 기타 지정된 폴더 또는 파일을 건너 뜁니다

Traversal 동안 현재 항목의 이름을 결정하고 __macosx 및 유사한 유효하지 않은 항목으로 시작하는 폴더를 제외해야합니다.

여기서 핵심은 PHP의 문자열 함수 strpos를 사용하여 항목 이름의 접두사를 감지하는 것입니다.

 <?php
$zipPath = 'example.zip';
$zip = zip_open($zipPath);

if ($zip) {
    while ($zipEntry = zip_read($zip)) {
        $entryName = zip_entry_name($zipEntry);

        // 뛰어 올라 __MACOSX 폴더의 모든 항목
        if (strpos($entryName, '__MACOSX/') === 0) {
            continue;
        }

        // 还可以뛰어 올라其他不想거래하십시오的隐藏문서,예를 들어 .DS_Store
        if (basename($entryName) === '.DS_Store') {
            continue;
        }

        // 일반 처리 코드
        echo "파일 처리: $entryName\n";

        // 읽기 작업을위한 항목을 열 수 있습니다,예를 들어:
        if (zip_entry_open($zip, $zipEntry)) {
            $contents = zip_entry_read($zipEntry, zip_entry_filesize($zipEntry));
            // 거래하십시오 $contents,예를 들어保存문서
            zip_entry_close($zipEntry);
        }
    }
    zip_close($zip);
} else {
    echo "열 수 없습니다 ZIP 문서";
}
?>

요약

  • Zip_Read를 사용하여 Zip 항목을 하나씩 읽을 때는 입력 이름을 확인하십시오.

  • strpos를 사용하여 입력 이름이 __macosx/ 로 시작하는지 여부를 결정 하고이 디렉토리의 모든 파일을 건너 뜁니다.

  • 동시에 특정 파일 이름 (예 : .ds_store )에 대해 필터링을 수행 할 수 있습니다.

  • 이는 쓸모없는 MACOS 시스템 파일을 효과적으로 피하고 코드 견고성 및 효율성을 향상시킬 수 있습니다.