PHP 7.0.31 Released

Введение

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

add a note add a note

User Contributed Notes 2 notes

up
-3
spotnyk at gmail dot com
1 year ago
IMPORTANT NOTE:

Because a Phar is virtually just a disk, you cannot use:
<? require_once(); ?> or <? include_once(); ?>. References will fail after the first load.
up
-4
spotnyk at gmail dot com
1 year ago
Per my previous note about require_once/include_once. That is not specifically true. However results are conflicted and strangely unreliable.
To Top