Progress28.ru

IT Новости
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Ziparchive php как подключить

Класс ZipArchive

(PHP 5 >= 5.2.0, PHP 7, PECL zip >= 1.1.0)

Введение

Файловый архив, сжатый Zip.

Обзор классов

Свойства

Системный статус Zip-архива

Количество файлов в архиве

Имя файла в файловой системе

Комментарий к архиву

Содержание

  • ZipArchive::addEmptyDir — Добавляет новую директорию
  • ZipArchive::addFile — Добавляет в ZIP-архив файл по указанному пути
  • ZipArchive::addFromString — Добавляет файл в ZIP-архив, используя его содержимое
  • ZipArchive::addGlob — Add files from a directory by glob pattern
  • ZipArchive::addPattern — Add files from a directory by PCRE pattern
  • ZipArchive::close — Закрывает активный архив (открытый или вновь созданный)
  • ZipArchive::deleteIndex — Удаляет элемент в архиве, используя его индекс
  • ZipArchive::deleteName — Удаляет элемент в архиве, используя его имя
  • ZipArchive::extractTo — Извлекает содержимое архива
  • ZipArchive::getArchiveComment — Возвращает комментарий ZIP-архива
  • ZipArchive::getCommentIndex — Возвращает комментарий элемента, используя его индекс
  • ZipArchive::getCommentName — Возвращает комментарий элемента, используя его имя
  • ZipArchive::getExternalAttributesIndex — Retrieve the external attributes of an entry defined by its index
  • ZipArchive::getExternalAttributesName — Retrieve the external attributes of an entry defined by its name
  • ZipArchive::getFromIndex — Возвращает содержимое элемента по его индексу
  • ZipArchive::getFromName — Возвращает содержимое элемента по его имени
  • ZipArchive::getNameIndex — Возвращает имя элемента по его индексу
  • ZipArchive::getStatusString — Возвращают статус сообщения об ошибке, системный и/или zip-статус
  • ZipArchive::getStream — Получить дескриптор файла элемента, определенный по имени элемента (только для чтения)
  • ZipArchive::locateName — Возвращает индекс элемента в архиве
  • ZipArchive::open — Открывает ZIP-архив
  • ZipArchive::renameIndex — Переименовывает элемент по его индексу
  • ZipArchive::renameName — Переименовывает элемент по его имени
  • ZipArchive::setArchiveComment — Устанавливает комментарий к ZIP-архиву
  • ZipArchive::setCommentIndex — Устанавливает комментарий к элементу по его индексу
  • ZipArchive::setCommentName — Устанавливает комментарий к элементу, заданному по имени
  • ZipArchive::setCompressionIndex — Set the compression method of an entry defined by its index
  • ZipArchive::setCompressionName — Set the compression method of an entry defined by its name
  • ZipArchive::setExternalAttributesIndex — Set the external attributes of an entry defined by its index
  • ZipArchive::setExternalAttributesName — Set the external attributes of an entry defined by its name
  • ZipArchive::setPassword — Set the password for the active archive
  • ZipArchive::statIndex — Получение детальной информации о элементе по его индексу
  • ZipArchive::statName — Получение детальной информации о элементе по его имени
  • ZipArchive::unchangeAll — Отменяет все изменения, сделанные в архиве
  • ZipArchive::unchangeArchive — Возвращает все глобальные изменения, сделанные в архиве
  • ZipArchive::unchangeIndex — Отменяет все изменения у позиции с заданным индексом
  • ZipArchive::unchangeName — Отменяет все измения у позиции с заданным именем

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

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

Читать еще:  Php cgi exe

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

Один из факторов, из-за которого вы можете отказаться от сжатия файлов или этот процесс для вас очень утомителен — вы делаете это вручную. К счастью, у 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 о выполнении дополнительных проверок на целостность архива и выдаст ошибку, если при неудачной проверке.

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

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

Читать еще:  Php string to datetime

После добавления всех необходимых файлов в архив, вы можете вызвать метод 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.

Читать еще:  Php recordid спирка fund

Как вы можете видеть, значения в параметре $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 у вас будет больше контроля над отдельными файлами, а их переименование или удаление будет очень простым. Обязательно посмотрите документацию хотя бы один раз, чтобы узнать больше об этих функциях.

Ссылка на основную публикацию
Adblock
detector