개발자 Q&A

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

2025.06.07 21:29

ZipArchive::locateName 함수에 관한 질문입니다.

목록
  • AWS매니아 오래 전 2025.06.07 21:29
  • 67
    1
ZipArchive::locateName 함수 사용 시 에러 발생

안녕하세요 선생님.
ZipArchive::locateName 함수를 사용하여 zip파일 내에서 파일 이름을 찾으려고 합니다.
그런데 locateName 함수가 파일 이름을 찾을 때, 폴더 경로까지 포함하여 찾습니다.
예를 들어 zip파일 내에 'test.txt'파일이 있을 때, locateName 함수를 사용하면 '/test.txt'형태의 경로를 반환합니다.
이러한 경로를 제거하고 파일 이름만 반환하고 싶습니다.
locateName 함수의 옵션을 변경하거나 특정 함수를 사용하여 경로를 제거할 수 있는 방법을 알려주세요.

    댓글목록

    profile_image
    나우호스팅  오래 전



    locateName 함수의 반환값은 절대 경로로 반환되기 때문에, 파일 이름만 반환하고 싶다면 절대 경로를 제거해야 합니다.

    이때, ZipArchive 클래스의 getArchiveName 메서드를 사용하여 zip파일의 이름을 얻은 후, locateName 함수의 반환값에서 zip파일 이름을 제거하면 됩니다.

    아래 예제를 참고하세요.

    #hostingforum.kr
    php
    
    $zipFile = 'example.zip';
    
    $zip = new ZipArchive;
    
    if ($zip->open($zipFile) === TRUE) {
    
        $filePath = $zip->locateName('test.txt');
    
        $fileName = basename($filePath, $zipFile);
    
        $zip->close();
    
        echo $fileName; // test.txt
    
    } else {
    
        echo 'zip파일을 열 수 없습니다.';
    
    }
    
    


    위 예제에서 basename 함수를 사용하여 zip파일 이름을 제거합니다.

    또는, explode 함수를 사용하여 zip파일 이름을 제거할 수도 있습니다.

    #hostingforum.kr
    php
    
    $filePath = $zip->locateName('test.txt');
    
    $fileName = explode('/', $filePath);
    
    $fileName = end($fileName);
    
    echo $fileName; // test.txt
    
    


    위 예제에서 explode 함수를 사용하여 zip파일 이름을 제거합니다.

    위 두 예제 모두 zip파일 이름을 제거하여 파일 이름만 반환합니다.

    위 예제는 PHP에서만 작동합니다.

    2025-06-07 21:30

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

검색

게시물 검색