Руководство для начинающих по загрузке нескольких файлов в виде ZIP-файла с помощью PHP

В этой статье блога мы рассмотрим различные способы загрузки нескольких файлов в виде zip-файла с помощью PHP. Если вы хотите предложить пользователям удобный способ загрузки нескольких файлов или сжатия и объединения файлов для архивирования, PHP предлагает несколько подходов для достижения этой цели. Давайте углубимся и откроем для себя различные методы!

Метод 1: использование класса ZipArchive
Одним из часто используемых методов является использование класса ZipArchive, который доступен в расширении PHP Zip. Это позволяет вам создавать, изменять и извлекать zip-архивы. Вот пример фрагмента кода, демонстрирующий, как создать zip-файл и добавить в него несколько файлов:

<?php
$zip = new ZipArchive;
$zipName = 'files.zip';
if ($zip->open($zipName, ZipArchive::CREATE) === TRUE) {
    $files = ['file1.txt', 'file2.txt', 'file3.txt'];
    foreach ($files as $file) {
        $zip->addFile($file);
    }
    $zip->close();
    // Download the zip file
    header("Content-type: application/zip");
    header("Content-Disposition: attachment; filename=$zipName");
    readfile($zipName);
} else {
    echo 'Failed to create the zip file.';
}
?>

Метод 2: использование ZipArchive и DirectoryIterator
Другой подход — использовать класс ZipArchive в сочетании с классом DirectoryIterator. Этот метод позволяет сжать весь каталог, включая все его файлы и подкаталоги. Вот пример:

<?php
$zip = new ZipArchive;
$zipName = 'files.zip';
$directory = '/path/to/directory';
if ($zip->open($zipName, ZipArchive::CREATE) === TRUE) {
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
    foreach ($iterator as $file) {
        if (!$file->isDir()) {
            $zip->addFile($file->getPathname(), $file->getRelativePathname());
        }
    }
    $zip->close();
    // Download the zip file
    header("Content-type: application/zip");
    header("Content-Disposition: attachment; filename=$zipName");
    readfile($zipName);
} else {
    echo 'Failed to create the zip file.';
}
?>

Метод 3: использование функции exec()
В этом методе мы воспользуемся функцией exec() для выполнения системной команды, создающей zip-файл. Вот пример:

<?php
$zipName = 'files.zip';
$files = ['file1.txt', 'file2.txt', 'file3.txt'];
$command = 'zip -j ' . $zipName . ' ' . implode(' ', $files);
exec($command);
// Download the zip file
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=$zipName");
readfile($zipName);
?>

В этой статье мы рассмотрели несколько способов загрузки нескольких файлов в виде zip-файла с помощью PHP. Мы рассмотрели использование класса ZipArchive, комбинацию ZipArchive и DirectoryIterator, а также функцию exec(). Каждый метод имеет свои преимущества и варианты использования, поэтому выберите тот, который лучше всего соответствует вашим требованиям. Теперь вы можете предложить своим пользователям удобный способ загрузки нескольких файлов или легкого сжатия и объединения файлов с помощью PHP!