현재 위치: > 최신 기사 목록> 루프에서 zip_read ()를 올바르게 사용하는 방법

루프에서 zip_read ()를 올바르게 사용하는 방법

M66 2025-06-04

Zip Compressed 파일을 처리하기 위해 PHP를 사용하는 경우 Zip_Read ()는 압축 파일의 항목을 하나씩 읽는 일반적인 기능입니다. 그러나 실제 애플리케이션에서는 많은 개발자가 루프 에서이 기능을 사용할 때 오류가 발생하기 쉬우므로 읽지 못하거나 논리가 잘못되었습니다. 이 기사는 Zip_read ()를 올바르게 사용하여 압축 패키지로 모든 파일을 읽는 방법을 자세히 설명합니다.

기본 사용법

PHP는 Zip_open () , Zip_read ()Zip_entry_read () 와 같은 zip 파일 작업과 관련된 기능 세트를 제공합니다. 여기서 Zip_Read ()는 Open Zip 파일 리소스의 항목을 차례로 읽는 데 사용됩니다.

압축 파일 내용을 읽기위한 일반적인 코드 구조는 다음과 같습니다.

<code> $ zip = zip_open ( "example.zip"); if (is_resource ($ zip)) {while ($ entry = zip_read ($ zip)) {echo "name :". zip_entry_name ($ entry). "\N"; if (zip_entry_open ($ zip, $ entry, "r")) {$ contents = zip_entry_read ($ entry, zip_entry_filesize ($ reptor)); 에코 "내용 :". $ 내용. "\N"; zip_entry_close ($ entry); }} zip_close ($ zip); } else {echo "zip 파일을 열 수 없습니다"; } </code>

위의 코드에서 Zip_Open ()는 압축 패키지를 열고 Zip_Read ()는 더 이상 항목이 없을 때까지 while 루프에서 항목을 하나씩 읽습니다.

일반적인 오류

  1. Zip_Read ()는 루프에서 지속적으로 호출되지 않습니다

    일부 개발자는 실수로 한 번에 모든 항목을 읽거나 Foreach 구조를 사용하여 Zip_read ()를 조작하려고 시도합니다. Zip_Read ()는 모든 것을 올바르게 반복하기 위해 WIDE 루프에 배치 해야하는 순차적 판 읽기 기능입니다.

  2. 입력 또는 zip 파일이 닫히지 않습니다

    Zip_entry_close ()Zip_Close () 호출을 잊어 버리면 특히 큰 파일 또는 여러 개의 ZIP 패키지를 처리 ​​할 때 리소스 누출로 이어질 수 있습니다.

  3. 압축 패키지에서 파일의 인코딩 문제

    zip 파일에 Nonutf-8 인코딩 된 파일 이름이 포함 된 경우 Zip_entry_name () 에 garbled 코드가 표시 될 수 있습니다. mb_convert_encoding ()을 사용하여 트랜스 코딩을 할 수 있습니다.

    <code> $ filename = mb_convert_encoding (zip_entry_name ($ entry), "utf-8", "cp936"); </코드>

실용 예 : 모든 파일을 지역 영역에 통과하고 저장합니다.

업로드 된 zip 파일이 있다고 가정하면 모든 파일을 로컬 업로드/ 디렉토리로 압축하고 저장하려고합니다.

<code> $ zip = zip_open ($ _ files [ 'file'] [ 'tmp_name']); if (is_resource ($ zip)) {while ($ entry = zip_read ($ zip)) {$ name = zip_entry_name ($ entry); $ save_path = "업로드/". BaseName ($ name);
     if (zip_entry_open($zip, $entry, "r")) {
        $contents = zip_entry_read($entry, zip_entry_filesize($entry));
        file_put_contents($save_path, $contents);
        zip_entry_close($entry);
    }
}
zip_close($zip);
echo "감압이 완료되었습니다";

} 또 다른 {
Echo "업로드 된 파일을 열 수 없습니다";
}
</코드>

온라인으로 배포 할 때 경로 트래버스 (디렉토리 트래버스) 공격을 방지하기 위해 경로, 권한을 확인하고 안전하게 처리해야합니다.

디버깅 팁

zip_read ()가 항목을 올바르게 반환하는지 확실하지 않은 경우 디버그 문을 추가 할 수 있습니다.

<code> var_dump ($ entry); </코드>

또한 파일 이름을 인쇄하여 구문 분석 된 내용을 확인할 수도 있습니다.

<code> echo "읽기 파일 :". zip_entry_name ($ entry). "\N"; </코드>

요약

PHP에서 zip_read ()를 사용하여 zip 파일을 읽을 때 다음 사항에주의하십시오.

  • 사용 중 ($ Entry = Zip_read ($ Zip)) 루프;

  • 각각 읽은 후 zip_entry_open ()zip_entry_close ()를 사용하십시오.

  • 마지막으로, Zip_Close () 를 호출하려면 자원을 닫습니다.

  • 파일 이름 인코딩 및 디렉토리 보안 문제에주의하십시오.