Модуль phar предоставляет возможность поместить целое PHP-приложение в один-единственный файл c именем phar (PHP Archive) для простого распространения и установки. Помимо этого, модуль phar предоставляет метод абстракции формата файла для создания и обработки архивов tar и zip через класс PharData, примерно как PDO обеспечивает единый интерфейс для доступа к различным базам данных. В отличие от PDO, который не может конвертировать между различными базами данных, Phar может конвертировать данные между форматами tar, zip и phar всего одной строкой кода. Смотрите Phar::convertToExecutable() для примера.
Что же такое phar? Phar-архивы лучше всего можно охарактеризовать как удобный способ группировки нескольких файлов в один. Также phar архив предоставляет возможность распространять целое PHP-приложение в одном единственном файле и запускать его прямо из этого файла без необходимости распаковывать его на диск. Кроме того, phar-архивы могут выполняться PHP с той же лёгкостью, что и любые другие файлы, как из командной строки, так и через веб-сервер. Phar - это как флеш-накопитель для PHP-приложений.
Phar реализует эту функциональность через потоки. Обычно, чтобы использовать в PHP-скрипте внешний файл, вы бы воспользовались, например, include:
Пример #1 Использование внешнего файла
<?php
include '/path/to/external/file.php';
?>
PHP может рассматривать это как преобразование /path/to/external/file.php
в обёртку потока file:///path/to/external/file.php
, а
в действительности он использует потоковые функции обёртки простого файлового потока
для доступа ко всем локальным файлам.
Чтобы использовать файл file.php
, находящийся внутри phar-архива
/path/to/myphar.phar
, используется синтаксис очень похожий
на синтаксис file://
выше.
Пример #2 Использование файла внутри phar-архива
<?php
include 'phar:///path/to/myphar.phar/file.php';
?>
На самом деле, можно рассматривать phar-архив как если бы это был внешний диск, используя любые fopen()-подобные функции, opendir() и mkdir()-подобные функции для чтения, изменения, или создания новых файлов и директорий внутри phar-архива. Это позволяет целому PHP-приложению распространяться в одном файле и запускаться прямо из этого файла.
Наиболее часто используемое применение для phar-архива - это распространение целого приложения в одном файле. Например, установщик PEAR, который поставляется вместе с PHP, является phar-архивом. Для использования phar-архива распространяемого таким способом, архив может быть выполнен через консоль или через веб-сервер.
Phar-архивы могут распространяться как архивы tar
и zip
,
или как пользовательский формат файла phar
, предназначенный специально для
модуля phar. Каждый формат файла имеет как преимущества, так и недостатки. Форматы tar и
zip могут быть прочитаны или извлечены любой сторонней утилитой которая может работать с
этими форматами. Но чтобы PHP мог их запускать, ему будет необходим модуль phar. Файлы в
phar-формате настраиваются и уникальны для модуля phar, и могут быть созданы только им или
PEAR-пакетом » PHP_Archive.
Но их преимущество в том, что приложения, созданные в этом формате, будут работать, даже если
модуль phar не включён.
Другими словами, даже если модуль phar отключён, phar-архив всё равно может быть выполнен или подключён. Доступ к отдельным файлам в архиве возможен только с модулем phar, если только архив не был создан с помощью PHP_Archive.
Модуль phar также способно конвертировать phar-архив из tar в zip или в phar-формат одной командой:
Пример #3 Конвертирование phar-архива из формата phar в формат tar
<?php
$phar = new Phar('myphar.phar');
$pgz = $phar->convertToExecutable(Phar::TAR, Phar::GZ); // создаст myphar.phar.tar.gz
?>
Phar может сжимать отдельные файлы или архив целиком с использованием gzip-компрессии или bzip2-компрессии, а также автоматически проверять целостность архива, используя сигнатуры MD5, SHA-1, SHA-256 или SHA-512.
Наконец, модуль Phar заботится о вашей безопасности и отключает доступ на запись
для исполняемых phar-архивов по умолчанию, а также требует отключения на системном
уровне настройки phar.readonly
в php.ini для создания или изменения
phar-архивов. Обычные неисполняемые архивы tar и zip, всегда могут быть созданы или
изменены с помощью класса PharData.
Если вы создаёте приложение с целью распространения, вы, возможно, захотите прочитать раздел Как создавать Phar-архивы. Если вам нужно больше информации об отличиях между тремя поддерживаемыми phar форматами файлов, вам следует прочитать раздел Phar, Tar и Zip.
Если вы используете phar-приложение, то полезные советы находятся в разделе Как использовать phar-архивы.
Слово phar
- это сокращение от PHP
и
Archive
, и оно частично основано на jar
(Java Archive), знакомом Java-разработчикам.
Реализация Phar-архивов основана на PEAR-пакете » PHP_Archive, и детали реализации схожи, хотя модуль Phar гораздо мощнее. Кроме того, модуль Phar позволяет большинству PHP-приложений запускаться без изменений, тогда как phar-архивы, основанные на PHP_Archive, часто требуют существенных изменений для работы.