Что такое PHAR (PHP Archive)?

Ответ

PHAR (PHP Archive) — это формат упаковки PHP-приложений, библиотек или утилит в единый исполняемый файл, аналогичный JAR в Java. Файл .phar содержит весь необходимый код, ресурсы и метаданные, что упрощает распространение и развертывание.

Основные возможности:

  • Исполняемость: PHAR-файл можно запустить как обычный PHP-скрипт: php myapp.phar.
  • Сжатие: Поддержка сжатия gzip или bzip2 для уменьшения размера.
  • Встроенный загрузчик (stub): Автоматическая загрузка содержимого архива.

Пример создания простого PHAR-архива:

// create-phar.php
$pharFile = 'myapp.phar';

// Убедитесь, что phar.readonly=Off в php.ini
if (file_exists($pharFile)) {
    unlink($pharFile);
}

$phar = new Phar($pharFile);
// Добавляем все файлы из директории src/
$phar->buildFromDirectory(__DIR__ . '/src');
// Устанавливаем точку входа (файл, который запустится при выполнении)
$phar->setDefaultStub('index.php');

Где я с этим сталкивался: Многие популярные инструменты экосистемы PHP распространяются именно в виде PHAR-файлов, что делает их установку тривиальной — просто скачать один файл. Например:

  • Composer (composer.phar)
  • PHPUnit
  • Psalm или PHPStan (статические анализаторы)

При разработке внутренних CLI-инструментов для компании мы также использовали PHAR для упаковки, что значительно упрощало их доставку на продакшн-сервера — не нужно было копировать целые директории с зависимостями, только один файл.

Ответ 18+ 🔞

А, PHAR! Ну это ж, ёпта, просто праздник какой-то для ленивого задрота. Представь: у тебя там проект — куча файлов, библиотек, ресурсов. И таскать это всё, как говно за пазухой, с сервера на сервер — терпения ноль, ебать. А тут — хук-плюх — один файлик, и в нём всё, что нужно. Красота!

PHAR (PHP Archive) — это, по сути, такая бандура, куда ты можешь запихнуть своё PHP-приложение, библиотеку или утилиту целиком. Получается один исполняемый файл, прямо как JAR в Java, только для наших, для пыховодов. Внутри — весь код, картинки, конфиги, метаданные — овердохуища всего. Распространять и разворачивать — одно удовольствие, а не работа.

Что он умеет, этот красавчик:

  • Запускаться как скрипт: Сказал php myapp.phar — и поехали. Никаких танцев с бубном.
  • Жаться: Можешь его придавить gzip'ом или bzip2'ом, чтобы не раздувался, как пирожок после столовки.
  • Самозагружаться: Встроенный заглушечный код (stub) сам всё подтянет из своего же брюха, когда начнёшь исполнять. Умная жопа, короче.

Вот, смотри, как его слепить из говна и палок:

// create-phar.php
$pharFile = 'myapp.phar';

// Главное, не забудь в php.ini поставить phar.readonly=Off, а то нихуя не получится — будет ругаться, как баба на рынке.
if (file_exists($pharFile)) {
    unlink($pharFile); // Старый — нахуй, будем новый делать.
}

$phar = new Phar($pharFile);
// Запихиваем в него всю папку src/ со всем её содержимым. Проще некуда.
$phar->buildFromDirectory(__DIR__ . '/src');
// Говорим ему, с какого файла начинать, когда его запустят.
$phar->setDefaultStub('index.php');

А где я с этим в жизни пересекался? Да везде, блядь! Пол-интернета на этом стоит. Куча популярных PHP-шных инструментов именно так и распространяются — одним файлом. Скачал — и тут же пользуешься. Например:

  • Composer (тот самый composer.phar) — без него жизнь вообще немыслима.
  • PHPUnit — чтобы тесты гонять.
  • Psalm или PHPStan — эти умники, которые код на ошибки проверяют.

Мы на работе тоже для своих внутренних консольных утилит использовали PHAR. Представляешь, вместо того чтобы на каждый продакшн-сервер тащить целую папку с вендорами и скриптами — просто кидаешь один файлик. И всё. Никаких "ой, зависимость не подтянулась", "ой, путь кривой". Просто, надёжно, ебать мои старые костыли. Идеально.