Введение

Модуль 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, часто требуют существенных изменений для работы.