ДобавлениеИзвлечение файла в ZIP-архив с помощью PHP (ZipArchive)


Содержание

Извлечение ZIP-архива через PHP

В предыдущей статье я показал, как создать ZIP-архив на PHP. Надеюсь, что всё было понятно, а в этой статье я расскажу, как извлечь ZIP-архив через PHP.

Порядок создания архива был прост: открыть, добавить файлы в архив, закрыть. Для извлечения ZIP-архива порядок очень похожий: открыть, извлечь, закрыть. Фактически, меняется лишь центральная часть. Давайте разберём простой пример:

open(«archive.zip») === true) <
$zip->extractTo(«site/»); //Извлекаем файлы в указанную директорию
$zip->close(); //Завершаем работу с архивом
>
else echo «Архива не существует!»; //Выводим уведомление об ошибке
?>

Таким образом, все файлы и папки, находящиеся в ZIP-архиве будут извлечены в директорию «site«. Код хорошо прокомментирован, поэтому думаю, что здесь всё понятно, а если остались какие-то вопросы по извлечению ZIP-архива через PHP, то задавайте их в комментариях.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 1 ):

    Шпаргалка хорошая, но как быть если архив на другом сайте? Спасибо.

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    Как создать или извлечь данные из ZIP-архива через PHP?

    Создаём zip-архив средствами PHP

    ZIP-архивирование на сайте — тема уже довольно популярная. Не буду Вас долго томить, сразу перейдём к закомментированному коду и пояснениям.
    Алгоритм работы кода: открываем/создаём архив, добавляем файлы, закрываем.
    Рассмотрим пример кода с комментариями:

    Код PHP


    Как результат, создание ZIP-архива — archive.zip. В который были загружены файлы index.php и styles/style.css. Как Вы понимаете, указывать нужно не просто название, а путь к файлу, который будет загружен в архив.

    1. Создаём объект ZipArchive с помощью конструктора.
    2. Создали архив с помощью метода open() объекта ZipArchive. Мы передали название архива (archive.zip) и константу ZIPARCHIVE::CREATE, которая сообщает, если архива не существует, то его надо создать.
    3. С помощью метода addFile() добавляем в архив файлы. Сначала мы добавили файл «index.php», который находится в одной директории со скриптом. Далее мы добавили файл style.css, так же указав к нему правильный путь относительно скрипта.
    4. А метод close() завершает работу с архивом. Всегда его выполняйте, чтобы освободить ресурсы компьютера, а также избежать самых различных проблем, связанных с работой этого скрипта и других скриптов, которым необходим доступ к этому архиву.

    Извлекаем данные из zip-архива средствами PHP

    Принцип извлечения чем-то похож на создание. Только вторая операция уже другая.
    Алгоритм: открываем архив, извлекаем файлы, закрываем.
    Рассмотирм пример:

    Извлечь подпапки ZIP-файла в PHP

    Я использую php-скрипт для распаковки ZIP-файла. но этот скрипт распакует только один уровень каталогов, не извлекая подкаталоги этого файла сценария:

    например: если test.zip содержит 2 папки: folder1 \ file.png, folder2 \ folder3 \ file3.png

    после извлечения этого ZIP-файла я вижу только папку1 *. * и folder2 *. *, но без папки подкаталога3.

    Как я могу улучшить его?

    Я думаю, что это руководство по PHP будет полезно вам http://php.net/manual/en/ref.zip.php

    «; $count++; > zip_close($zip); > > Unzip($dir,$file); ?>

    Этот скрипт извлекает все файлы в zip-файле рекурсивно. Это приведет их в текущий каталог.

    Работа с Zip архивами через PHP

    Рассказ будет о том, как работать с маленьким PHP классом PclZip, в котором всего 5698 строк с комментариями. Как уже можно было догадаться из названия этот класс для работы с Zip архивами. Я в сжатой форме познакомлю вас с данным классом.

    1. Создание архива с нуля

    Для создания архива с нуля пишем:

    create(‘file.txt’); // Этим методом класса мы создаём архив с заданным выше названием
    var_dump($result); // Если всё прошло хорошо, возращаем массив с данными (время создание архива, занесённым файлом и т.д)
    if($result == 0) <
    echo $archive->errorInfo(true); //Возращает причину ошибки
    >
    ?>

    Но если вам надо заархивировать например файл file.txt, который лежит в папке folder и надо сделать так, чтобы file.txt лежал в корне архива, а не полность папка folder с file.txt, можно сделать так
    create(‘folder/file.txt’, PCLZIP_OPT_REMOVE_PATH, ‘folder’);
    ?>

    Если надо взять файл из одной папки и переместить его в архиве в другую папку, пишем
    create(‘folder/file.txt’, PCLZIP_OPT_REMOVE_PATH, ‘folder’, PCLZIP_OPT_ADD_PATH, ‘install’);
    ?>

    То есть мы взяли файл file.txt в папке folder, вытащили и поместили в архиве в папку install.
    Для добавления комметария к архиву надо добавить к create PCLZIP_OPT_COMMENT, ‘Комментарий’.

    2. Добавление файлов в архив.

    Здесь практически всё тоже самое, что и при создании архива с 0.
    add(‘file.txt’) == 0) echo $archive->errorInfo(true);
    ?>

    Метод add тоже может использовать PCLZIP_OPT_REMOVE_PATH и PCLZIP_OPT_ADD_PATH, что логично.

    3. Вывод содержимого архива
    4. Удаление файлов из архива

    Для удаление всех файлов из архива прибегним к методу
    delete();
    if($result == 0) echo $archive->errorInfo(true);
    ?>

    Илон Маск рекомендует:  Iis возобновление работы ftp сервера (contftp)

    После этого архив останется просто пустой оболочкой. Для удаления одиночных файлов, нам надо сделать так:
    delete(PCLZIP_OPT_BY_INDEX, ‘1,2’);
    ?>

    Этим самым мы указываем, какие файлы удалять. Мы указываем через запятую индификатор файла, которого мы хотим удалить. Индификаторы мы можем получить через функцию, которая рассматривалась выше (listContent).


    5. Разархивирование

    extract();
    if($result == 0) echo $archive->errorInfo(true);
    ?>

    В этом случае будет разархивирован весь архив. Для разархивации в папку делаем так.
    extract(PCLZIP_OPT_PATH, ‘folder’);
    ?>

    Вот и всё. Это была обзорная статья и она раскрыла не все возможности данного класса, но то что описано здесь, достаточно для обычного использования. Ах да, если заменить zip на rar, то тоже будет всё нормально работать.

    Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

    php ZipArchive — добавление только файлов не родительской папки

    Я создаю zip-архив в php и хочу добавить некоторые pdf файлы, доступные в моей папке pdfs_lib. Я успешно создал архив, но есть проблема, что внутри созданного zip-архива файлы добавляются в папку pdfs_lib, что не является чем-то я хочу.

    Я хочу добавить файлы pdf, находящиеся в папке pdfs_lib, непосредственно в архив, вместо того, чтобы добавлять эти файлы в папку pdfs_lib в созданном архиве zip.

    Этот код успешно создает zip-архив, но при распаковке архива он создает папку pdfs_lib и распаковывает все файлы внутри этой вновь созданной папки.

    Любое предложение о том, как создать zip-архив, не добавляя в него папку pdf_lib.

    Измените вызовы addFile на:

    Второй параметр — это «localname», имя, которое используется в самом zip файле. Если вы не укажете путь к папке, он будет добавлен в корень в zip файле.

    Сторона не в виде: обычно считается хорошей практикой, если архив (будь то zip или любой другой формат архива) распаковывается в чистую папку вместо того, чтобы мусор содержать содержащиеся файлы повсюду.

    Однако, если вы действительно хотите реализовать это без такой папки, вы должны переработать свой код. У вас есть две альтернативы:

    вы можете изменить рабочий каталог, в который выполняется ваш php-скрипт, в ту папку, в которую вы храните файлы. В этом случае вам не нужен какой-либо путь для добавления файлов в zip-архив, поэтому в архиве не создается папка.

    метод addFile() расширения php zip позволяет указать второй (необязательный) аргумент, который позволяет передать целевое имя переданного файла.

    Добавление/Извлечение файла в ZIP-архив с помощью PHP (ZipArchive)

    Частная коллекция качественных материалов для тех, кто делает сайты

    • Фотошоп-мастер2000+ уроков по фотошопу
    • Фото-монстр300+ уроков для фотографов
    • Видео-смайл200+ уроков по видеообработке
    • Жизнь в стиле «Кайдзен» Техники и приемы для гармоничной и сбалансированной жизни

    В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.


    Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

    Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

    Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

    Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

    Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

    Совет: активация отображения всех ошибок в PHP

    При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.

    Агент

    PHP парсер юзер агента с поддержкой Laravel, работающий на базе библиотеки Mobile Detect.

    ZipArchive — работа с архивами на php

    Статья написана очень давно — 13.08.2010

    По просьбам читателей, описываю работу с архивами на php

    Начиная с PHP 5.2 «в комплекте» есть замечательная библиотека под названием ZipArchive. Вот её-то мы и рассмотрим.
    Если у вас версия php меньше, чем 5.2, если у вас появляется ошибка class ziparchive not found, то советую данную библиотеку скачать и установить.

    Работа с библиотекой ZipArchive довольно проста. Для начала нужно объявить экземпляр её класса:

    После этого, мы сможем работать с объектом $zip (работа с ним заключается в вызове того или другого метода). Обычно, самый первый архива (как для создания, так и для чтения)

    Не забывайте делать проверки ошибок, это важно. Ведь, например, запрашиваемого файла архива может не существовать, что тогда?

    Распаковка архива средствами php (а точней, средствами ZipArchive) происходит с помощью метода extractTo

    Создание архива средствами php можно осуществить так:

    Обратите внимание, добвлять файлы в архив можно двумя способами:


    • addFile — добавление существующего файла. Если не указывать 2-й параметр (имя файла в архиве), то, созданный внутри архива файл, будет иметь то же имя, что и исходный
    • addFromString — добавление в архив файла, с указанным нами содержимым ( $zip->addFromString(‘info.txt’, ‘Этот архив создан средствами php!’); )
    • addEmptyDir — добавление пустой папки в архив

    Теперь научимся удалять файлы из архива

    Самый первый архива на сервер. Распаковывать-то мы научились, а теперь научимся извлекать определённый файл из архива

    И ещё один полезный файла в архиве

    Архиватор на php

    А теперь, вооружившись полученными знаниями, напишем небольшой простейший архиватор на php, работающий на рассмотренной ZipArchive. Разработку интерфейса оставляю за вами, здесь рассмотрим только программную часть

    Цель: разработать архиватор на php, умеющий распаковывать и запаковывать архивы
    Пусть на сервере будет папка unpacked, в которую мы будем помещать незапакованные файлы, а также туда будут распаковываться архивы
    Решение:

    Илон Маск рекомендует:  Что такое код dcgettext

    Получение списка файлов в архиве

    Как справедливо заметил 2medic в комментариях, упустил я один важный момент — как получить список всех файлов в архиве? Что-ж, восполню этот пробел

    У класса ZipArchive есть такое замечательное свойство, как numFiles — количество файлов в архиве. Его, а также метод getNameIndex (получение имени по индексу) мы и будем использовать. Не буду углубляться в теорию, просто покажу пример:

    Ничего сложного, ведь правда?

    Домашнее задание: к распаковке сделайте предварительную загрузку архивов (чтобы не по ftp каждый раз загружать архив, а через web).
    Также, можно усовершенстовать этот скрипт до полноценного php-архиватора, и пользоваться им наздоровье!

    В заключении пару слов. Не забывайте о правах доступа! Если по неведомой вами причине, архив не создаётся, либо архив не распаковывается в указанную папку, проверьте права доступа к этим папкам! В самом простом случае создайте папку и задайте ей права 777. Понятное дело, это касаемо только unix-систем.
    Успехов в освоении!

    Работа с zip-архивами в php

    Начиная с php версии 5.2, появилась замечательная фишка: работа с zip-архивами (ранее для этих целей использовались команды оболочки либо утилита pclzip.lib.php).

    Далее предлагается несколько простых примеров. Однако, если на то будет желание, познакомиться с этой особенностью поближе можно из манов, запросив информацию по классу ZipArchive.

    Т. к. это соответствующий класс, то сначала требуется создать его экземпляр, например, так:

    $zip = new ZipArchive;

    Теперь, нужно задать zip-файл, над которым будут производиться разного рода манипуляции (фактически, процесс похож на работу с функцией fopen(), с тем исключением, что здесь вызываются соответствующие методы класса):

    Где $flags может принимать следующие значения:
    значение не задано — открыть архив для извлечения файлов;
    ZIPARCHIVE::OVERWRITE — перезаписать файл;
    ZIPARCHIVE::CREATE — создать файл архива, если он не существует.

    Имеются ещё некоторые значения, но с ними (если уж это действительно понадобится) можно ознакомиться на соответствующей странице мануала.

    Когда архив открыт, фактически, его можно рассматривать как текущую папку, с которой можно производить разные манипуляции.
    И теперь самое интересное: несколько методов, которых, на мой вгляд, хватит для выполнения 99.9% поставленных задач. Итак, вот они:

    • bool addEmptyDir(string $dirname)создание в архиве пустой директории;
    • bool addFile(string $filename[, string $localname])добавляет в архив файл $filename под именем $localname . Если $localname не задано, файл добавляет в корень архива под именем $filename с сохранением пути. чтобы было понятнее:
      $zip->addFile(‘/var/www/site/index.php’); — создаст в архиве файл index.php, расположенный по адресу var/www/site/;
    • bool addFromString(string $localname, string $contents)создание в архиве файла $localname с содержимым из переменной $contents ;
    • bool deleteName(string $name)удаляет из архива файл или директорию с именем $name (для удаления директории необходимо, чтобы путь заканчивался слешем «/»!). Удаляемая директория должна быть пустой (не иметь файлов или вложенных папок)!;
    • bool extractTo(string $destination [, mixed $entries ]) — распаковывает файл/файлы, указанные в $entries (может быть имя файла/папки, либо список имён) в директорию, заданную переменной $destination . Если $entries не задано, распаковывается архив целиком;
    • bool renameName(string $name, string $newname) — переименовывает (или переносит) файл или пустую директорию, которые задаются переменной $name . новое имя задаётся переменной $newname ;
    • mixed statName(name $name[, int $flags]) — получает информацию о файле или директории $name , как то: размер, crc (контрольная сумма), время добавления и ещё некоторые. Переменная $flags позволяет определить, как будет вестись поиск файла, например, если задать значение ZIPARCHIVE::FL_NOCASE , поиск будет осуществляться без учёта регистра символов;
    • bool unchangeAll() — откатывает все сделанные изменения;
    • bool unchangeName(string $name) — откатить все изменения, сделанные с файлом (каталогом) $name .


    Но лучше, конечно, всё посмотреть на примере. например, таком:

    После всех манипуляций полученный zip-архив должен содержать 2 папки: dir1 и dir2, а также по 1 файлу в каждой директрии.

    PHP предоставляет великое множество “фишечек”. собственно, именно из-за этого (и заслуженно!) он пользуется такой популярностью.

    Если тема показалась интересной, ‘тонко’ намекну: с помощью php можно также работать с популярным в среде линукс архивом формата bzip2 (который сжимает очень хорошо, но не умеет работать с группой файлов и директориями). Также поддерживается известный архиватор rar, правда, только для распаковки файлов (см. функции rar_open(), rar_entry_get() и метод extract()).

    Как использовать Zip и Unzip файлы в PHP

    Russian (Pусский) translation by Ellen Nelson (you can also view the original English article)

    Сжатие файлов при их передаче через Интернет имеет множество преимуществ. В большинстве случаев, общий размер всех файлов в сжатом виде приятно уменьшается. Это означает, что вы сэкономите трафик, а пользователи получат более быструю скорость загрузки. Когда пользователи загрузят файл, они могут распаковывать его в любое время. Короче говоря, сжатие может сделать передача файлов через Интернет намного проще и для вас, и для ваших посетителей.

    Один из факторов, из-за которого вы можете отказаться от сжатия файлов или этот процесс для вас очень утомителен — вы делаете это вручную. К счастью, у PHP есть множество расширений, которые специально предназначены для сжатия и извлечения файлов. Вы можете использовать функции, доступные в этих расширениях, для автоматического сжатия файлов на PHP.

    В этом уроке вы научитесь применять zip и unzip — сжимать и извлекать файлы в/из zip-архив в PHP. Вы также узнаете, как удалить или переименовать файлы в архиве, не без их извлечения.

    Сжатие файлов в PHP

    Класс PHP ZipArchive обладает множеством свойств и методов, которые помогут вам сжсжимать и распаковывать все ваши файлы.

    Сжатие отдельных файлов

    Вы можете добавлять файлы в zip-архив по одному или сразу весь каталог. В любом случае первым шагом является создание нового экземпляра ZipArchive , а затем вызов метода open ($filename, [$flags]) . Этот метод откроет новый zip-архив для чтения, записи или других изменений. Существует четыре допустимых значения для необязательного параметра $flag , которым определяется способ обработки.

    • ZipArchive::OVERWRITE — этот флаг перезапишет содержимое в указанном архиве, если он уже существует.
    • ZipArchive::CREATE — этот флаг создаст новый архив, если он ещё не существует.
    • ZipArchive::EXCL — этот флаг приведёт к ошибке, если архив уже существует.
    • ZipArchive::CHECKCONS — этот флаг сообщает PHP о выполнении дополнительных проверок на целостность архива и выдаст ошибку, если при неудачной проверке.
    Илон Маск рекомендует:  Что такое код farheapchecknode

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

    Если архив откроется успешно, вы можете использовать метод addFile($filename, $localname, $start, $length) для добавления любого файла с заданным путем в ваш архив. Параметр $filename — это путь к файлу, который вы хотите добавить в архив. Параметр $localname используется для присвоения имени файлу для хранения его внутри архива. Вы можете вызывать addFile() каждый раз, когда хотите добавить новый файл в архив.

    После добавления всех необходимых файлов в архив, вы можете вызвать метод close() , чтобы закрыть его и сохранить изменения.

    Допустим, у вас есть веб-сайт, который позволяет пользователям скачивать файлы шрифтов вместе с их лицензиями. Файлы, подобные этим, станут прекрасными примерами автоматизированного архивирования на PHP. Следующий код показывает, как это делается.

    Мы начнём с создания экземпляра ZipArchive , а затем с помощью метода open() создадим наш архив. С помощью метода addFile() добавим в архив файлы шрифта .ttf и лицензии .txt.

    Следует отметить, что исходные файлы находились внутри каталога fonts/Monoton. Однако, код PHP помещает его прямо в корень нашего архива. Вы можете изменить структуру каталогов, а также имена файлов, находящихся в архиве.

    Сжатие нескольких файлов из каталога

    Добавление отдельных файлов в архив, со временем, может стать утомительным. Например, вы можете создать архив всех .pdf или .png файлов в каталоге. В этом случае, метод addGlob($pattern, $flags, $options) докажет свою полезность. Единственный минус этого метода в том, что вы теряете контроль над расположением отдельных файлов в архиве. Однако, вы все равно можете влиять на структуру каталогов внутри архива, используя параметр $options . Параметры передаются в виде ассоциативного массива.


    • add_path — значение, которое вы назначаете на add_path , ставится перед (префикс) локальным адресом файла в архиве.
    • remove_path — значение, которое вы назначаете на remove_path , используется для удаления соответствующего префикса из пути различных файлов, которые добавляются в архив.
    • remove_all_path — если задать remove_all_path значение true , то это приведет к удалению всего из пути файла, кроме его названия. В этом случае файлы добавятся в корень архива.

    Важно помнить, что удаление пути происходит до добавления префикса указанного в значениий add_path .

    Следующий фрагмент кода прояснит использование addGlob() и всех этих параметров.

    Как обычно, мы начинаем с создания экземпляра ZipArchive и затем используем метод open() для создания нашего архива. Каждый раз перед вызовом метода addGlob() , мы указываем разные значения для ключа add_path в массиве $options . Таким образом, мы можем одновременно обработать один конкретный набор файлов и применить к нему соответствующие параметры архивирования.

    В первом случае мы перебираем все файлы .jpg в каталоге lights и помещаем их в каталог light_wallpapers в архиве. Аналогично, мы перебираем все файлы .ttf в каталоге documents, а затем помещаем их в архив в папку с именем font_files. Наконец, мы перебираем сразу все файлы .jpg и .png в наших документах и помещаем их все вместе в каталог images.

    Как вы можете видеть, значения в параметре $options полезны при организации содержимого внутри архива.

    Извлечение содержимого из архива

    У класса ZipArchive есть метод для извлечения содержимого архива, называемый extractTo($destination, $entries) . Вы можете использовать его для извлечения всего в архиве или только определенных файлов. Параметр $entries может использоваться для указания одного имени файла, который нужно извлечь, или же, вы можете использовать его для передачи массива файлов.

    Важно помнить, что вам нужно указать правильный путь к файлу внутри архива, чтобы извлечь его. Например, мы заархивировали файл шрифта AlegreyaSans-Light.ttf в предыдущем разделе. Файл сохранён в архиве в каталоге font_files. Это означает, что путь, который нужно указать в параметре $entries , будет font_files/AlegreyaSans-Light.ttf, а не просто AlegreyaSans-Light.ttf.

    Структура каталогов и файлов будет сохранена во время извлечения, и файлы будут извлечены в соответствующие каталоги.

    Если вы пропустите второй параметр, данный метод извлечёт все файлы из архива.

    Больше контроля над архивами

    Класс ZipArchive также имеет множество других методов и свойств, которые помогут вам получить больше информации о архиве перед извлечением всего его содержимого.

    Вы можете подсчитать количество файлов в архиве, используя метод count() . Другой вариант — использовать свойство numFiles . Их можно использовать для перебора всех файлов в архиве и извлекать только те из них, которые вам нужны, или вы можете сделать с ними что-то ещё, например, удалить их из архива.

    В следующем примере, мы удаляем все файлы из архива, содержащие слово Italic. Аналогичный код можно использовать для удаления всех файлов, которые не содержат определенного слова. Также, вы можете перебирать файлы и заменять определенное слово на другое.

    В приведённом выше коде, мы используем deleteName() для удаления конкретного файла. Однако, вы можете использовать его для удаления всего каталога.

    Аналогичную функцию renameName($oldname, $newname) можно использовать для изменения имени любых файлов в архиве. Вы получите сообщение об ошибке, если файл под названием $newname уже существует.

    Заключительные мысли

    Мы рассмотрели множество полезных методов класса ZipArchive , которые сделают автоматическое сжатие и извлечение файлов в PHP простым. Теперь вы сможете сжимать отдельные файлы или группу файлов, исходя из ваших собственных нужд. Аналогичным образом, вы должны иметь возможность извлечь любой файл из архива, не затрагивая другой контент.

    С помощью count() и numFiles у вас будет больше контроля над отдельными файлами, а их переименование или удаление будет очень простым. Обязательно посмотрите документацию хотя бы один раз, чтобы узнать больше об этих функциях.

    Извлечь подпапки ZIP-файла в PHP

    Я использую php-скрипт для распаковки ZIP-файла. но этот скрипт распакует только один уровень каталогов, не извлекая подкаталоги этого файла сценария:

    например: если test.zip содержит 2 папки: folder1 \ file.png, folder2 \ folder3 \ file3.png

    после извлечения этого ZIP-файла я вижу только папку1 *. * и folder2 *. *, но без папки подкаталога3.

    Как я могу улучшить его?

    Я думаю, что это руководство по PHP будет полезно вам http://php.net/manual/en/ref.zip.php

    «; $count++; > zip_close($zip); > > Unzip($dir,$file); ?>

    Этот скрипт извлекает все файлы в zip-файле рекурсивно. Это приведет их в текущий каталог.

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL