Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Как выглядит zip-архив и что мы с этим можем сделать. Часть 3 — Практическое применение

Ненормальное программированиеPHP
Продолжение статьи Как выглядит zip-архив и что мы с этим можем сделать. Часть 2 — Data Descriptor и сжатие.

Дорогие читатели, я снова приветствую вас на передаче Нетрадиционное программирование на PHP. Для понимания происходящего рекомендую ознакомиться с предыдущими двумя статьями о zip-архивах: Как выглядит zip-архив и что мы с этим можем сделать и Как выглядит zip-архив и что мы с этим можем сделать. Часть 2 — Data Descriptor и сжатие

Ранее я рассказывал как создавать архивы используя только лишь код на PHP и не применяя никакие библиотеки и расширения (в том числе и стандартное zip), а так же упоминал некоторые сценарии использования. Сегодня я постараюсь привести пример одного из таких сценариев.

Мы будем хранить картинки в архиве на удаленном сервере, а при необходимости показывать определенную картинку пользователю, не скачивая и не распаковывая архив, а получая с сервера лишь данные самой, конкретно взятой картинки и ничего более (ну ладно, оверхед на заголовки еще никто не отменял, но все же).
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Просмотры2K
Комментарии 3

Как выглядит zip-архив и что мы с этим можем сделать. Часть 4 — Чтение архива

Ненормальное программированиеPHP
Продолжение цикла о Zip-архивах и PHP. Предыдущие статьи: Часть 1, Часть 2, Часть 3

Доброго времени суток, дорогие читатели.
На этот раз я хотел бы представить, наверное, заключительную часть цикла о Zip-архивах и PHP.

В этой статье я покажу как прочесть уже существующий архив и для примера мы возьмем photos.zip из прошлой статьи. Чтоб не повторять все процедуры воспользуемся готовым — https://github.com/userqq/images/raw/master/photos.zip.

А теперь давайте на минутку отвлечемся и вспомним, из чего состоит наш архив: сначала идет набор данных упакованных файлов, где каждый упакованный файл предварён структурой Local File Header (LFH), после всех данных у нас идет набор структур Central Directory File Header (CDFH) — это такое оглавление по нашему архиву, в котором перечислены все элементы и позиции их смещения относительно начала файла. А завершает архив End Of Central Directory Record (EOCD) — тут указана позиция начала структур CDFH, их количество и общая длина в байтах. Поэтому архив следует читать с конца, чтоб сначала найти EOCD, потом прочесть структуры CDFH и таким образом получить список файлов в архиве.

FYI: А некоторые форматы, например JPEG, читаются с начала. Поэтому мы можем склеить картинку с архивом, даже банально через cat image.jpeg archive.zip > imagearchive.jpeg, не потеряв функционала. Браузеры и приложения для просмотра картинок будут без каких-либо проблем показывать нам картинку. В то время как любое приложение для чтения zip-архивов, будь то 7z или unzip, сможет преспокойно работать с файлом как с архивом. Например, вот — https://github.com/userqq/images/blob/master/jpegarchive.jpg (Осторожно, эта штука весит около 20мб, поэтому не советую открывать с телефонов или если вам дорог трафик). Таким образом, если вы знаете хостинг картинок, на котором изображения не перекодируются и не обрезаются, вы можете заливать туда не только картинки:) Хотя, мне кажется, сейчас таких уже не найти.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Просмотры2.9K
Комментарии 4
2