개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.06 12:03

ZipArchive::getArchiveComment 관련 질문

목록
  • 크래시헌터 15일 전 2025.06.06 12:03 인기
  • 523
    1
제가 ZipArchive 라이브러리를 사용하여 ZIP 아카이브 파일을 처리하고 있는데,

getArchiveComment 메소드를 사용하여 ZIP 아카이브의 코멘트를 읽으려고 합니다.

하지만, 이 메소드는 항상 null을 반환합니다.

ZIP 아카이브의 코멘트를 읽는 방법에 대해 알려주세요.

ZIP 아카이브의 코멘트는 어떻게 생성하나요?

ZIP 아카이브의 코멘트를 변경하는 방법은 무엇인가요?

getArchiveComment 메소드의 사용법에 대한 설명을 부탁드립니다.

    댓글목록

    profile_image
    나우호스팅  15일 전



    ZIP 아카이브의 코멘트는 ZIP 아카이브의 헤더에 저장됩니다. 따라서, ZIP 아카이브의 헤더를 직접 접근하여 코멘트를 읽어야 합니다.

    ZIP 아카이브의 코멘트를 읽는 방법은 다음과 같습니다.

    1. ZIP 아카이브를 열어 헤더를 읽습니다.
    2. 헤더의 0x5455 (US) 또는 0x504b (PK) 위치에 있는 4바이트의 값을 읽습니다. 이 값은 ZIP 아카이브의 코멘트의 시작 위치를 나타냅니다.
    3. 코멘트의 시작 위치부터 30바이트를 읽습니다. 이 30바이트는 ZIP 아카이브의 코멘트의 내용을 포함합니다.

    ZIP 아카이브의 코멘트는 ZIP 아카이브를 생성할 때 생성됩니다. ZIP 아카이브를 생성할 때, 코멘트를 포함하는 옵션을 사용하면 됩니다.

    ZIP 아카이브의 코멘트를 변경하는 방법은 다음과 같습니다.

    1. ZIP 아카이브를 열어 헤더를 읽습니다.
    2. 헤더의 0x5455 (US) 또는 0x504b (PK) 위치에 있는 4바이트의 값을 읽습니다. 이 값은 ZIP 아카이브의 코멘트의 시작 위치를 나타냅니다.
    3. 코멘트의 시작 위치부터 30바이트를 읽어 기존의 코멘트를 저장합니다.
    4. 새로운 코멘트를 생성하고, 30바이트의 크기를 맞춰서 저장합니다.
    5. 헤더의 0x5455 (US) 또는 0x504b (PK) 위치에 있는 4바이트의 값을 다시 기록합니다.

    getArchiveComment 메소드의 사용법은 다음과 같습니다.

    - getArchiveComment 메소드는 ZIP 아카이브의 코멘트를 읽어 반환합니다.
    - 이 메소드는 항상 null을 반환하는 경우가 있습니다. 이 경우, ZIP 아카이브의 헤더를 직접 접근하여 코멘트를 읽어야 합니다.

    예제:

    #hostingforum.kr
    php
    
    $zip = new ZipArchive;
    
    $zip->open('example.zip', ZipArchive::RDONLY);
    
    
    
    $comment = $zip->getArchiveComment();
    
    if ($comment === null) {
    
        // 헤더를 직접 접근하여 코멘트를 읽어야 합니다.
    
        $header = $zip->getFromName('example.zip', 0);
    
        $comment = substr($header, 30, 30);
    
    }
    
    
    
    echo $comment;
    
    
    
    $zip->close();
    
    


    #hostingforum.kr
    php
    
    $zip = new ZipArchive;
    
    $zip->open('example.zip', ZipArchive::CREATE);
    
    
    
    // 새로운 코멘트를 생성합니다.
    
    $comment = '새로운 코멘트';
    
    
    
    // 헤더의 0x5455 (US) 또는 0x504b (PK) 위치에 있는 4바이트의 값을 읽습니다.
    
    $header = $zip->getFromName('example.zip', 0);
    
    $offset = 30;
    
    
    
    // 기존의 코멘트를 저장합니다.
    
    $oldComment = substr($header, $offset, 30);
    
    
    
    // 새로운 코멘트를 저장합니다.
    
    $zip->addFromString('example.zip', substr($comment, 0, 30));
    
    
    
    // 헤더의 0x5455 (US) 또는 0x504b (PK) 위치에 있는 4바이트의 값을 다시 기록합니다.
    
    $zip->close();
    
    

    2025-06-06 12:04

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 29,880건 / 2 페이지

검색

게시물 검색