Сегодня мы познакомимся с понятием phar архивов, и их использовании в PHP. Зачем они нужны? Если вы пишите PHP приложение, которое направлено на развитие, то вы обязательно столкнетесь с такой проблемой. У вас будут происходить накопления PHP файлов, которые некуда будет девать. Предположим, тысяча или несколько тысяч файлов, которые занимают место. К тому же такое количество файлов, очень сложно загружать на хостинг, по FTP. Выходом из данной ситуации, будет использование phar архивов.
Что такое Phar?
Phar – это приложение, позволяющее создавать архивы из файлов PHP проекта. Он пакует файлы в одну библиотеку, которую можно будет подключить и использовать, как один файл. Поэтому, cпомощью phar, мы можем значительно сократить код подключения файлов в php приложение, и упростить задачу сохранения файлов. Phar может работать с такими форматами, как tar, zip, bzip2 и phar. Эта утилита способна: создавать, читать, дописывать архивы и конвертировать один архив в другой. Такой принцип работы, доступен в других языках программирования, таких как DLL, N#, VB.Net, или jar файлы java. Чтобы узнать, как использовать phar в php, читайте раздел требования к PHP.
Доступ к исходным файлам архива осуществляется напрямую, без распаковки архива. Прямой доступ обеспечивает PHP Stream Wrapper. Другими словами с файлами архива работают функции поддерживаемые PHP Stream Wrapper.
Требования к PHP версии
Расширение phar, доступно с версии PHP 5.2. А с версии 5.3 – это неотъемлемая часть PHP. Для начала, советую вам проверить версию PHP. Если версия ниже, меняйте. Если версия PHP не ниже 5.2 – вам необходимо переустановить PHP ядро с Phar, Zlib и bzip2 расширениями. Если у вас версия 5.3 – все отлично, phar установлен по умолчанию.
Если хотите, можете настроить защиту для ваших phar архивов, и сделать их доступными, только для чтения. Для этого, нужно установить настройку в файле php.ini. Установите следующий параметр phar.readonly = 0.
Преимущества Phar в PHP
PHAR легко устанавливается, а если точнее — он входит в стандартную поставку PHP 5.3.
Легко использовать.
Удобно при копировании файлов на другой хост.
Легко разворачивать — всего один файл.
Высокая степень защиты PHP приложения — сигнатуры, OpenSSL.
Обладает высокой производительностью.
Работа с Phar в PHP
В этом разделе, мы будем работать с утилитой. А точнее, будем создавать и использовать собственные библиотеки файлов PHP приложения. Вы увидите, насколько просто и удобно использовать phar библиотеки.
Пример Hello World
Для начала создадим простой архив, с текстовым файлом:
А теперь, прочитаем его:
Создание и использование библиотек Phar
В этом разделе, мы научимся создавать собственные phar библиотеки и использовать их в нужных целях. Для начала напишем 2 класса, которые нам пригодятся:
classes/SampleClass.php
classes/SampleClass2.php
Очень просто, неправда ли? Теперь создадим в этой же папке файл, который будет подключать оба класса.
classes/index.php
Теперь создайте папку lib, которая будет использоваться для phar библиотек. И создадим главный PHP файл, который будет компилировать phar архивы, и будет демонстрировать работоспособность библиотек.
index.php
Результат выполнения нашего скрипта предоставлен на скриншоте ниже:
В начале, проверяем, существует ли наша библиотека (lib/SampleLibrary.phar). Если существует – нам не нужно компилировать ее снова. Если нет – мы автоматически компилируем и пакуем нашу библиотеку.
Для начала проверяем читаемость phar архива с помощью функции ini_set. Далее, указываем имя и будущее местонахождение архива, для phar конструктора. С помощью setDefaultStub, указываем главный файл в библиотеке, который будет подключать все классы библиотеки. С помощью функции buildFromDirectory, собственно произошло компилирование библиотеки. Функция compress сжала библиотеку в формат GZIP.
Обращение к библиотеке происходит с помощью phar://. Это синтаксис PHP stream wrapper.
Добавление файлов в библиотеку Phar
Добавить файл в библиотеку, можно с помощью разных функций:
Phar::addFile()
Phar::addFromString()
Phar::addEmptyDir()
Phar::buildFromDirectory()
Phar::buildFromIterator()
Смотрите несколько примеров добавления файлов в архив:
Чтение phar архива
Как в случае с добавлением файлов, чтение phar архива, можно провести несколькими способами:
PHP stream wrapper (phar://)
прямое подключение
Phar::extractTo()
Итерация по инстансу ‘Phar’
Сжатие Phar архива
Сжатие phar архивов, можно провести с использованием двух функций compress() и compressFiles(). Функция compress(), принимает два параметра, это имя файла и тип сжатия. Функция compressFiles(), принимает только один параметр – тип сжатия.
Рассмотрим пример использования функции compress():
Также рассмотрим пример сжатия phar архива с помощью compressFiles():
Конвертация форматов архива
Мы уже рассматривали сжатие phar архивов, в разделе выше. В данном разделе рассмотрим конвертацию форматов архива. Конвертацию архива, можно сделать несколькими способами:
Phar::ConvertToData()
Принимает три параметра:
Формат — Phar::TAR, Phar::ZIP
Сжатие — Phar::NONE, Phar::GZ, Phar::BZ2
Расширение — .tar, .tar.bz2, .tar.gz, .zip
Другой вариант, используя функцию Phar::ConvertToExecutable(), которая принимает все тоже, что и предыдущая, за исключением последнего параметра (расширения).
Сигнатура (защита) phar архивов
Сигнатура phar библиотек, используется для защиты архивов. А если говорить точнее, для проверки достоверности данных. PHAR поддерживает несколько алгоритмов создания сигнатур:
MD5
SHA1
SHA256
SHA512
При установки сигнатуры phar архива, используют метод Phar::setSignatureAlgorithm(), который принимает два параметра: тип сигнатуры, приватный ключ. Причем, типы сигнатуры в функции, указываются следующим образом:
Phar::MD5
Phar::SHA1
Phar::SHA256
Phar::SHA512
Phar::OPENSSL
Для большей ясности смотрите примеры установки сигнатуры на phar архив:
и для OpenSSL:
Чтение других архивов
Также phar поддерживает чтение других архивов: ZIP и TAR. Архивы читаются, так как и phar архивы. При этом, длинна названия архива не должна превышать 255 байт, включая путь файла, и то, что в своем названии он должен иметь слово .phar. Например: sitear.phar.gz.
Источник: sitear.ru