현재 위치: > 최신 기사 목록> PHP의 Zip_read () 함수를 사용하여 Zip 압축 패키지의 내부 구조를 분석하고 읽는 방법은 무엇입니까?

PHP의 Zip_read () 함수를 사용하여 Zip 압축 패키지의 내부 구조를 분석하고 읽는 방법은 무엇입니까?

M66 2025-06-23

압축 파일을 처리 할 때 PHP는 .zip 파일의 판독 및 작동을 지원하기 위해 강력한 지퍼 확장을 제공합니다. 이 기사는 Zip_Read () 함수의 사용법을 깊이 설명하고 다른 관련 기능과 협력하여 ZIP 파일의 각 항목을 가로 지르고 내용 또는 정보를 추출하는 방법을 보여줍니다.

1. 전제 조건

Zip_read ()를 사용하기 전에 PHP 환경에 Zip 확장이 활성화되어 있는지 확인하십시오. 확실하지 않은 경우 다음 코드를 사용하여 확장자가로드되었는지 확인할 수 있습니다.

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

반환 결과가 "zip 확장 프로그램이 활성화되지 않음"인 경우 php.ini 파일에서 관련 확장을 활성화하거나 PHP를 설치할 때 -with-zip 옵션을 추가해야합니다.

2. Zip_Read ()의 기본 사용

Zip_Read ()는 Zip_Open ()Zip_entry_* 시리즈 함수와 함께 사용됩니다. 그 목적은 열린 .zip 파일의 항목을 읽는 것입니다. 각 호출은 False가 더 이상 읽을 항목이 없음을 나타내는 다음 항목의 리소스 핸들을 반환합니다.

3. 샘플 코드 : 항목 별 ZIP 파일 항목의 항목 읽기

다음은 .zip 파일을 열고 모든 항목을 반복하고 각 항목의 이름과 내용을 읽는 방법을 보여주는 완전한 예입니다.

 <?php
$zipFile = '/path/to/example.zip'; // 지역으로 교체하십시오 zip 파일 경로
$zip = zip_open($zipFile);

if (is_resource($zip)) {
    while ($zip_entry = zip_read($zip)) {
        echo "<strong>파일 이름:</strong> " . zip_entry_name($zip_entry) . "<br>";

        if (zip_entry_open($zip, $zip_entry, "r")) {
            $contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
            echo "<strong>컨텐츠 미리보기:</strong><br><pre>" . htmlentities(substr($contents, 0, 500)) . "</pre><hr>";
            zip_entry_close($zip_entry);
        }
    }
    zip_close($zip);
} else {
    echo "압축 파일을 열 수 없습니다。";
}
?>

4. 핵심 기능 설명

Zip_Read () 와 함께 사용되는 주요 기능은 다음과 같습니다.

  • zip_open (String $ filename) : Zip 파일을 열고 리소스 핸들을 반환합니다.

  • Zip_Read (Resource $ Zip) : Zip 파일 자원에서 다음 항목을 읽으십시오.

  • zip_entry_name (resource $ entry) : 현재 항목의 파일 이름을 가져옵니다.

  • zip_entry_open (resource $ zip, resource $ entry, string $ mode) : 항목을 열고 컨텐츠를 읽을 준비를합니다.

  • zip_entry_read (resource $ entry, int $ length) : 현재 열린 항목의 내용을 읽습니다.

  • zip_entry_close (Resource $ entry) : 열기 항목을 닫으십시오.

  • Zip_Close (Resource $ Zip) : Zip 파일 자원을 닫습니다.

5. 실제 응용 프로그램 : 업로드 된 ZIP 파일 내용을 스캔하십시오

사용자가 .zip 파일을 업로드 할 있는 시스템을 구축 할 때 불법 파일 이름 필터링, 블랙리스트 확장 등과 같은 업로드 된 파일 컨텐츠를 스캔해야 할 수도 있습니다.

예를 들어:

 <?php
function scanZipForPhp($zipPath) {
    $zip = zip_open($zipPath);
    if (!is_resource($zip)) {
        return false;
    }

    $suspicious = [];

    while ($entry = zip_read($zip)) {
        $name = zip_entry_name($entry);
        if (preg_match('/\.php$/i', $name)) {
            $suspicious[] = $name;
        }
    }

    zip_close($zip);
    return $suspicious;
}

$flaggedFiles = scanZipForPhp('/tmp/uploaded.zip');
if (!empty($flaggedFiles)) {
    echo "의심스러운 발견 PHP 문서:<br>";
    echo implode('<br>', $flaggedFiles);
} else {
    echo "未의심스러운 발견문서。";
}
?>

6. 주목할만한 것들

  1. zip_read ()zip_entry_* 시리즈 함수는 초기에 PHP가 제공하는 방법이며 하위 수준의 ZIP 작업에 적합합니다. 더 많은 풍부한 기능 (예 : Zip 파일 만들기, 주석 추가 등)이 필요한 경우 Ziparchive 클래스를 사용하는 것이 좋습니다.

  2. zip_read ()를 사용하면 암호화 된 zip 패키지의 내용에 직접 액세스 할 수 없습니다.

  3. ZIP 파일의 내용이 크면 메모리 오버플로를 방지하기 위해 모든 컨텐츠를 한 번에 읽지 않아야합니다.

7. 결론

이 기사의 설명 및 샘플 코드를 통해 다른 기능과 결합하여 zip_read ()를 사용하여 .zip 압축 파일의 내부 구조를 깊이 분석하고 읽는 방법을 마스터했다고 생각합니다. 실제 개발 에서이 방법은 문서 감사, 보안 스캔 등과 같은 시나리오에서 매우 유용합니다.