현재 위치: > 최신 기사 목록> zip_read 함수를 사용하여 파일_exists () 및 mkdir ()를 결합하여 디렉토리를 자동으로 생성하는 기능을 달성하는 방법은 무엇입니까?

zip_read 함수를 사용하여 파일_exists () 및 mkdir ()를 결합하여 디렉토리를 자동으로 생성하는 기능을 달성하는 방법은 무엇입니까?

M66 2025-06-12

지퍼 압축 파일로 작업 할 때, 특히 다단계 디렉토리 구조가 포함 된 압축 패키지를 압축 할 때 대상 디렉토리가 존재하는지 확인하는 것이 매우 중요한 단계입니다. 그렇지 않으면 대상 경로가 존재하지 않기 때문에 파일이 실패 할 수 있습니다. 이 기사에서는 zip_read () 함수를 사용하여 zip 파일의 각 항목을 읽고 file_exists ()mkdir ()를 결합하여 필요한 디렉토리를 자동으로 작성하여 안정적인 파일 추출 프로세스를 달성하는 방법을 소개합니다.

1. 전제 조건

PHP 환경에 지퍼 확장이 활성화되어 있는지 확인하십시오. 다음 코드를 사용하여 탐지 할 수 있습니다.

 <?php
if (!class_exists('ZipArchive')) {
    die('Zip 확장이 활성화되지 않았습니다');
}
?>

2. 샘플 코드 분석

다음은 ZIP 파일에서 파일 및 디렉토리를 읽고 디렉토리 구조를 자동으로 작성하는 완전한 샘플 코드입니다.

 <?php
$zipPath = 'example.zip'; // ZIP 파일 경로
$extractTo = 'output/';   // 디렉토리를 압축합니다

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

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

    // 디렉토리 경로를 가져옵니다
    $dir = dirname($fullPath);

    // 자동으로 디렉토리를 만듭니다
    if (!file_exists($dir)) {
        mkdir($dir, 0777, true);
    }

    // 如果是문서,내용을 읽고 쓰십시오
    if (zip_entry_open($zip, $entry, "r")) {
        $content = zip_entry_read($entry, zip_entry_filesize($entry));
        file_put_contents($fullPath, $content);
        zip_entry_close($entry);
    }
}

zip_close($zip);
?>

3. 자세한 설명

  1. zip_open ()
    zip 파일을 열고 리소스 핸들을 반환하는 데 사용됩니다.

  2. zip_read () 및 zip_entry_name ()
    압축 패키지의 항목을 zip_read ()로 하나씩 읽은 다음 Zip_entry_name ()을 사용하여 항목의 상대 경로를 얻습니다.

  3. Dirname () 추출 디렉토리 경로
    파일이든 디렉토리이든 Dirname ()을 사용하여 경로 부분을 추출한 다음 디렉토리가 있는지 확인하십시오.

  4. file_exists ()는 mkdir ()와 함께 사용됩니다.

    • file_exists ()는 디렉토리가 이미 존재하는지 여부를 결정하는 데 사용됩니다.

    • mkdir ()는 세 번째 매개 변수를 사용하여 다단계 디렉토리를 재귀 적으로 만들기 위해 true를 설정합니다.

  5. 파일 컨텐츠 작성
    현재 항목이 파일 인 경우 대상 경로에 열리고 읽고 서면으로 작성됩니다.

4. 실제 시나리오 예

http://m66.net/files/archive.zip 에서 압축 패키지를 다운로드했다고 가정하십시오. 감압 후 원래 구조를 유지하려고합니다. $ zippath를 수정하면됩니다.

 $zipPath = 'http://m66.net/files/archive.zip'; // 알아채다:zip_open 직접 사용은 지원되지 않습니다 URL,먼저 지역에 다운로드해야합니다

file_get_contents ()file_put_contents ()를 사용하여 파일을 로컬로 저장할 수 있습니다.

 $tempZip = 'temp_archive.zip';
file_put_contents($tempZip, file_get_contents('http://m66.net/files/archive.zip'));

그런 다음 $ zippath를 $ tempzip 로 교체하십시오.

5. 요약

zip_read () , file_exists ()mkdir ()를 결합함으로써 경로의 존재하지 않는 오류에 대해 걱정하지 않고 zip 파일 컨텐츠 및 디렉토리 생성의 자동 추출을 효율적으로 구현할 수 있습니다. 이 방법은 특히 복잡한 디렉토리 구조를 갖춘 ZIP 파일을 배치 압축 압축에 특히 적합하여 스크립트 견고성 및 유용성을 향상시킵니다.