>백엔드 개발 >PHP 튜토리얼 >PHP를 사용하여 전체 폴더를 압축하고 선택적으로 해당 내용을 삭제하는 방법은 무엇입니까?

PHP를 사용하여 전체 폴더를 압축하고 선택적으로 해당 내용을 삭제하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-27 10:22:11689검색

How to Zip a Complete Folder and Optionally Delete Its Contents Using PHP?

PHP로 전체 폴더 압축

질문:

다음을 사용하여 전체 폴더의 ZIP 아카이브를 어떻게 만들 수 있나요? PHP? 그리고 압축을 푼 후 특정 파일만 제외하고 폴더 내용을 모두 삭제하려면 어떻게 해야 하나요?

답변:

1. 전체 폴더 압축:

$rootPath = rtrim($rootPath, '\/');
$rootPath = realpath('folder-to-zip');

$zip = new ZipArchive();
$zip->open('file.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $file) {
    if (!$file->isDir()) {
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        $zip->addFile($filePath, $relativePath);
    }
}

$zip->close();

2. 전체 폴더 압축 "important.txt"를 제외한 모든 파일 삭제:

$rootPath = rtrim($rootPath, '\/');
$rootPath = realpath('folder-to-zip');

$zip = new ZipArchive();
$zip->open('file.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

$filesToDelete = array();

$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $file) {
    if (!$file->isDir()) {
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        $zip->addFile($filePath, $relativePath);

        if ($file->getFilename() != 'important.txt') {
            $filesToDelete[] = $filePath;
        }
    }
}

$zip->close();

foreach ($filesToDelete as $file) {
    unlink($file);
}

위 내용은 PHP를 사용하여 전체 폴더를 압축하고 선택적으로 해당 내용을 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.