댓글 검색 목록

[php] 초보자를 위한 PHP Zip – 작성, 읽기, 추가, 추출

페이지 정보

작성자 운영자 작성일 20-04-17 09:28 조회 1,079 댓글 0

ZIP 액션 


PHP Zip 초보자 자습서에 오신 것을 환영합니다. zip 파일 작업이 필요한 프로젝트가 있고 어디에서 시작할지 모릅니다. 걱정 마. 

이 안내서에서는 zip 아카이브를 작성하고 파일, 폴더를 추가하고 압축을 풀고 zip 파일을 강제로 다운로드하는 방법에 대한 모든 기본 사항을 설명합니다.


ⓘ이 튜토리얼의 시작 부분에 모든 예제 코드가 포함 된 zip 파일이 포함되어 있으므로 모든 것을 복사하여 붙여 넣을 필요가 없습니다.


소스 코드 다운로드 


먼저 약속 된 예제 소스 코드에 대한 다운로드 링크가 있습니다.


소스 코드 다운로드 


소스 코드를 다운로드하려면 여기를 클릭하십시오. MIT 라이센스에 따라 릴리스되었으므로 그 위에 빌드하거나 자신의 프로젝트에서 자유롭게 사용하십시오.


빠른 시작 

  • 폴더에 다운로드하여 압축을 풉니다.
  • 관련된 데이터베이스가 없으므로 포함 된 각 파일을 따라 가십시오.


요구 사항 


PHP 5.3부터 zip 함수는 내장 기능이 되었습니다. 새로운 버전의 PHP를 추가로 설치하거나 설정할 필요가 없습니다. 

그러나 여전히 최신 버전의 PHP를 사용하는 경우 zip 확장명을 업그레이드하거나 활성화하는 것이 좋습니다. 

우편 번호 확장 문제가 있는 분들을 위해 이 섹션이 도움이 될 수 있습니다.


ZIP 확장 구현 – WINDOWS 


  • php \ ext 폴더에 php_zip.dll 파일이 있는지 확인하십시오.
  • 그렇지 않은 경우 Google 검색을 수행하여 PHP 버전에 해당 파일이 있는지 확인하십시오
  • 그런 다음 php.ini 파일에서 zip 확장자 만 활성화하십시오.

extension=php_zip.dll 


ZIP 확장 구현 – LINUX 


Linux를 사용하는 사람들은 다음을 시도해보십시오.


sudo apt-get install php-zip 


그런 다음 웹 서버를 다시 시작하십시오.


sudo service apache2 restart 


설치 확인 


PHP zip이 성공적으로 설치되었는지 확인하려면 한 줄의 코드로 PHP 파일만 작성하면 됩니다.


<?php phpinfo(); ?> 


그런 다음 웹 브라우저에서 이 페이지에 액세스하여 "zip"을 검색하십시오. – 올바르게 설치 한 경우 표시됩니다.


php-zip.jpg 


작성 및 추가 


PHP에서 zip 파일을 시작하려면 어떻게 해야 합니까? 이 섹션에서는 zip 아카이브를 생성하고 파일 / 폴더를 추가하는 방법에 대한 몇 가지 예를 점진적으로 살펴 봅니다.


1) ZIP 파일 생성 / 열기 


<?php $zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE)) { $zip->close(); echo "OK"; } else { echo "ERROR!"; } ?> 


  • 항상 새로운 ZipArchive 객체를 생성하여 시작하십시오.
  • zip 파일을 열려면 다음과 같이 2 개의 매개 변수 – 파일 이름 및 액세스 모드를 제공해야 합니다.
    ZipArchive::CREATE – 찾을 수 없는 경우 새 zip 파일을 작성합니다.
    ZipArchive::OVERWRITE – 기존 zip 파일이 있는 경우 덮어 씁니다. 즉, 이전 zip 파일이 삭제됩니다.
    ZipArchive::EXCL – 더 안전한 방법은 기존 zip 파일이 있는 경우 오류를 반환합니다.
  • 마지막에 zip 파일을 닫아야 합니다. 기술적으로는 무시해도 되지만 손상된 zip 파일을 얻지 못하므로 제대로 닫는 것이 더 안전합니다.

그러나 물론이 스크립트는 아무것도 추가되지 않으므로 실제 zip 파일을 생성하지 않습니다.


2) STRING에서 ZIP 파일로 


<?php $zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE)) { // FILE NAME, STRING TO ADD $zip->addFromString("test.txt", "Lorem ipsum dolor sit amet, consectetur adipiscing elit."); $zip->close(); echo "OK"; } else { echo "ERROR!"; } ?> 


3) ZIP 아카이브에 파일 추가 


<?php $zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE)) { // SOURCE FILE, FILE NAME IN ZIP $zip->addFile("chicken.jpg", "chicken-in-zip.jpg"); $zip->close(); echo "OK"; } else { echo "ERROR!"; } ?> 


4) ZIP 보관소에 빈 폴더 추가 


<?php <?php $zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE)) { $zip->addEmptyDir("foobar"); $zip->close(); echo "OK"; } else { echo "ERROR!"; } ?> 


5) ZIP에 파일을 추가하는 대량 


<?php $zip = new ZipArchive(); if ($zip->open('test.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE)) { // ADD ALL JPG, PNG, GIF FILES INTO THE ZIP ARCHIVE $zip->addGlob("*.{jpg,png,gif}", GLOB_BRACE); $zip->close(); echo "OK"; } else { echo "ERROR!"; } ?> 


파일을 대량으로 추가하는 것은 "표준"글로브 검색 패턴이 필요하기 때문에 조금 더 혼란스러워합니다. 공식 PHP 참조 매뉴얼에서 패턴과 모드를 공식화하는 방법에 대해 자세히 읽을 수 있습니다.


6) 폴더 및 하위 폴더 추가 


<?php /* [INIT] */ $zipFile = "test.zip"; // TARGET ZIP FILE $dir = "foo"; // SOURCE FOLDER TO ZIP $zip = new ZipArchive(); /* [START ZIP] */ if ($zip->open($zipFile, ZipArchive::CREATE | ZipArchive::OVERWRITE)) { // INIT + ERROR CHECKING if (!is_dir($dir)) { echo "$dir is not a folder!"; return false; } // CREATE THE BASE FOLDER FIRST $zip->addEmptyDir($dir); // DRILL DOWN INSIDE THE FOLDER $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::SELF_FIRST ); foreach ($files as $f) { // SKIP THE EMPTY . AND .. FOLDERS $basename = basename($f); if ($basename=="." || $basename=="..") { continue; } // ADD THE FILES AND SUB-FOLDERS TO ZIP ARCHIVE if (is_dir($f)) { echo "ADD FOLDER " . $f . "<br>"; $zip->addEmptyDir($f); } else { echo "ADD FILE " . $f . "<br>"; $zip->addFile($f, $f); } } // DONE! $zip->close(); echo "OK"; } else { echo "ERROR!"; } ?> 


전체 폴더와 파일 및 하위 폴더를 zip 파일에 추가하는 것은 실제로 그렇게 어렵지 않습니다. 폴더를 드릴 다운하기 위해 약간의 재귀 적 IteratorIterator 마술 만 있으면 됩니다.


7) 강제 다운로드 ZIP 파일 


<?php // TARGET ZIP FILE $zipfile = "test.zip"; // OUTPUT THE HEADERS header("Content-Type: application/zip"); header("Content-Disposition: attachment; filename=" . basename($zipfile)); header("Content-Length: " . filesize($zipfile)); // READ THE FILE flush(); readfile($zipfile); exit; ?> 


추출 및 제거 


이제 파일 / 폴더를 만들어 zip 아카이브에 추가하는 방법을 알았습니다. 이제 반대 방향으로 제거하여 제거하십시오.


8) 파일 및 폴더 삭제 


<?php $zip = new ZipArchive(); if ($zip->open('test.zip')) { // DELETE A FILE INSIDE THE ZIP ARCHIVE $zip->deleteName('bird.jpg'); // DELETE A FOLDER INSIDE THE ZIP ARCHIVE $zip->deleteName('foo' . DIRECTORY_SEPARATOR); $zip->close(); echo "OK"; } else { echo "ERROR!"; } ?> 


9) 이름 바꾸기 


<?php $zip = new ZipArchive(); if ($zip->open('test.zip')) { // OLD NAME, NEW NAME $zip->renameName('chicken.jpg', 'big-birb.jpg'); $zip->close(); echo "OK"; } else { echo "ERROR!"; } 

?>


10) 추출 


<?php $zip = new ZipArchive(); if ($zip->open('test.zip')) { $zip->extractTo('/target/folder/'); $zip->close(); echo "OK"; } else { echo "ERROR!"; } ?> 


요약 


이것이 모든 예제 코드에 대한 것이며 모든 zip 함수의 요약입니다.


한눈에 보는 ZIP 함수 


FunctionDescription
open(FILE, MODE)

Opens a zip file.

  • ZipArchive::CREATE – Create a new file if not found.
  • ZipArchive::OVERWRITE – Overwrite existing zip file.
  • ZipArchive::EXCL – Return an error if there is an existing zip file.
close()Properly closes a zip file.
addFromString(FILE, STRING)Create a file in the zip archive and string.
addFile(SOURCE, FILE IN ZIP)Add the specified file into the zip archive.
addEmptyDir(NAME)Add an empty folder in the zip archive.
addGlob(PATTERN, MODE)Add files and folders into the zip archive for the given pattern.
deleteName(FILE)Delete the given file/folder in the zip archive.
renameName(OLD, NEW)Rename the file/folder in the zip archive.
extractTo(DESTINATION)Extract the zip folder to the destination folder.

ZIP 매뉴얼 


공식 PHP ZipArchive 매뉴얼을 보려면 여기를 클릭하십시오.



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.