Заглянув в "святые-святых" WP, и по-капавшись в его внутренностях, я нашла тот основной файл, с помощью которого и происходит реаллизация этого великолепного сервиса, как загрузка модуля плагина средствами установки запакованного файла, с последующей ее распоковкой на стороне удаленной машины, в конкретную дирректорию, с определенными, для этого случая начальными или подготовительными сервисами и окончательными или завершающими операциями.
Это файл оформлен в виде класса и весит - 237 кило!!! Понятно, что распаковка zip-а не простое дело, но я все же усомнилась в таком не-производительном объеме файла. Первое что насторожило меня - это то что все было обернуто в "классовые" рамки
Вообще применение классов в PHP у меня вызывает некое отторжение, ибо классы не для интерпритаторов, а для компилирующих программ и систем. Интерпритаторы сами по себе - классы и имеют внутри себя великолепную организацию, при трансляции своими особенными методами трансляции с языка в коды. Но этому я посвящу отдельную статью. Понятно почему получился такой объем, ибо в класс вогнали все возможно-необходимые функции при работе с файлами формата ZIP. Для компилятора - это есть хорошо, но интерпритатор, а тем более нам нужна толька одна возможность - только распоковка. Получается, что все остальное просто создано для будущих расширений, и причем опять не всегда совместных, когда одновременно нужно и распаковывать и запаковывать и еще просматривать один файл.
Читатель возможно спросит
- А разве нет ли штатных средств, для работы с ZIP форматами в Инете.
На что я отвечу, что
- Есть - но добавлю - Для того чтоб ими воспользоваться, то необходимо просить хостеров включить подобные средства в стандартный поставляемый PHP, что не всегда возможно, а зачастую просто - просить не кого, ибо мы часитенько работаем на всяких бесплатных рессурсах, где вообще ни чего для юзверей не делают - на халяву.
Вот и я решила разобраться
- как можно обычными средствами PHP просто распаковать ZIP файл,
и его содержимое разместить в нужном мне месте.
Начнем с того - каким способом это делается в WP, а потом, рассмотрев форматы ZIP, привести необходимые скрипты для решения нашей задачи.
Как это делается в WordPress
Главными файлами которые выполняют эти операции в WP это два модуля, расположенные в админской части движка.
- /wp-admin/include/file.php
функция unzip_file($from,$to) - /wp-admin/include/class-pclzip.php
класс - PclZip
Имено последний файл и выполняет все необходимве преобразования с форматом ZIP файла. А конкретно этот класс выполняет следующие основные операции, с различными настройками, передаваемые через аргументы в виде опций. Вот конкретно все возможные операции
- PclZip() : Конструктор объекта
- create() : Создать Zip-архив и добавить в него файлы
- listContent() : Список входящих файлов и структура Zip-архива
- extract() : Экстрактирование контента из Zip-архива
- properties() : получение свойств Zip-архива
Так вот WP использует лишь одну единственную возможность, этого огромадного файла, и только с единственной из парудесятков возможных опций использования данной функции - extract(), а имено распаковка ZIP-архива в виде массива данных в оперативную память. Укладку получено информации выполняется в другом файле, приведенном ранее.