Введение

Модуль phar предоставляет возможность поместить целое PHP-приложение в один единственный файл, именуемый phar (PHP Archive), для его более простого распространения и установки. Также, модуль phar обеспечивает единый способ создания и манипулирования архивами tar и zip с помошью класса PharData, примерно как PDO обеспечивает единый интерфейс для доступа к различным базам данных. Но PDO не может конвертировать между различными базами данных, а Phar может конвертировать данные между форматами tar, zip и phar всего одной строкой кода. Смотри Phar::convertToExecutable() для примера.

Что же такое phar? Phar-архивы лучше всего можно охарактеризовать как удобный способ группировки нескольких файлов в один. Также phar архив предоставляет возможность распространять целое PHP-приложение в одном единственном файле и запускать его прямо из этого файла без необходимости распаковывать его на диск. Кроме того, phar-архивы могут выполняться PHP с той же легкостью, что и любые другие файлы, как из коммандной строки, так и через веб-сервер. Phar - это как флешка для PHP-приложений.

Phar реализует эту функциональность через Stream Wrapper. Обычно, чтобы использовать в 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::TARPhar::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 зачастую требуют существенных изменений чтобы работать.