Что такое формат файла PHAR?
Файлы .phar связаны со средой разработки PHP. Архив .phar является эквивалентом файла JAR для PHP - он упаковывает все PHP-приложение или библиотеку в один автономный исполняемый пакет, который можно распространять как единый файл.
Какие данные могут содержать файлы PHAR?
Архивы .phar хранят PHP-скрипты и любые вспомогательные ресурсы (шаблоны, конфигурации, ресурсы), опционально сжатые с помощью gzip или bzip2 для каждого файла в отдельности или для всего архива целиком. Каждый файл .phar содержит исполняемую заглушку (stub) PHP, бинарный манифест со списком упакованных файлов и метаданными, а также необязательную криптографическую подпись (MD5, SHA-1, SHA-256, SHA-512 или OpenSSL), проверяемую через phar.require_hash.
Как запустить файлы PHAR?
Файлы .phar можно запускать напрямую с помощью интерпретатора командной строки PHP: php app.phar. Известными примерами являются composer.phar и phpunit.phar. Создание или изменение Phar программным способом требует установки phar.readonly=0 в php.ini, так как по умолчанию установлено значение 1 (только для чтения).
Проблемы безопасности, связанные с файлами PHAR
Начиная с PHP 5.3.0, поддержка Phar включена по умолчанию. Автоматическое выполнение кода PHAR в среде PHP создает серьезные риски для безопасности системы. Известны случаи распространения вредоносного PHP-кода в файлах PHAR, замаскированных под файлы JPEG или .txt путем простой замены расширения. Открытие такого файла может привести к заражению системы вредоносным ПО. Кроме того, вызов потоковых оберток Phar (phar://) по путям к файлам, контролируемым злоумышленником, может привести к десериализации встроенных метаданных и удаленному выполнению кода через инъекцию объектов.
Безопасность и защита
РИСК: HIGHPHAR - это исполняемый код PHP, поэтому относитесь к нему как к любой программе: запускайте только Phar из доверенных официальных источников (например, composer.phar с getcomposer.org, phpunit.phar с phpunit.de) и проверяйте контрольную сумму/подпись, если она предоставлена. Помимо запуска, Phar является известным вектором атак на стороне сервера: потоковая обертка phar:// может десериализовать встроенные метаданные, что позволяет реализовать инъекцию объектов PHP или удаленное выполнение кода, если приложение передает контролируемые пользователем пути в файловые функции. Никогда не запускайте подозрительные .phar и избегайте передачи пользовательского ввода в функции, которые могут обрабатывать пути phar:// на серверах.
Детали формата
в двух словахПрограммы, открывающие файлы PHAR
php tool.phar (или php tool.phar --help) для запуска. php tool.phar (или php tool.phar --help) для запуска. php tool.phar (или php tool.phar --help) для запуска. Технические подробности
глубокая спецификация| Точка входа (stub) | Исполняемая заглушка PHP, заканчивающаяся токеном `__HALT_COMPILER();`, который отмечает начало бинарного манифеста |
| Магические байты в конце подписи | 4-байтовый маркер «GBMB» в блоке подписи в конце файла (присутствует только в подписанных Phar) |
| Сжатие | Нет, Zlib (gzip) или Bzip2 - настраивается для каждого файла или для всего архива |
| Алгоритмы подписи | MD5, SHA-1, SHA-256, SHA-512 или OpenSSL X.509 (управляется параметром phar.require_hash в php.ini) |
| Метод выполнения | Запуск напрямую через `php app.phar`; извлечение не требуется |
| Требование для создания | Для создания или изменения файлов Phar во время выполнения в php.ini должно быть установлено `phar.readonly=0` |
| Внутренняя структура | Заглушка PHP + бинарный манифест (список файлов, версия API, флаги) + данные файлов + необязательный блок подписи |
| Порядок байтов | Little-endian (от младшего к старшему) |
| Типичный размер | От десятков КБ до десятков МБ (например, composer.phar ~2 МБ, phpunit.phar ~3 МБ) |
| Поддержка версий PHP | Включено по умолчанию начиная с PHP 5.3 (2009); поддерживается в PHP 8.x |
| Риск безопасности | Десериализация Phar через обертку `phar://` на путях, контролируемых злоумышленником, может вызвать RCE через инъекцию объектов |
| Поддерживаемые структуры данных | Flat Phar, Phar на базе tar или Phar на базе zip (PHP выбирает формат на основе манифеста) |
| Выпущен | 2008 (Phar extension bundled in PHP 5.3) |
| Последняя версия | Maintained as a core PHP extension (current through PHP 8.x) |
| Открыть стандартное | Да · без роялти |
| Спецификация | www.php.net |
Конвертации PHAR
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах PHAR.
Часто задаваемые вопросы
Как запустить файл PHAR?
php tool.phar. В Linux/macOS вы также можете выполнить chmod +x tool.phar && ./tool.phar, если в файле есть shebang. Двойной клик обычно не работает.Что такое файл PHAR?
Как открыть PHAR, чтобы посмотреть содержимое?
Безопасно ли запускать файл PHAR?
Почему мой PHAR не запускается - ошибка «phar.readonly»?
phar.readonly=0 в php.ini. Если вы хотите только запустить его, эта настройка не нужна.Можно ли превратить PHAR в EXE?
php tool.phar или соберите PHP вместе с Phar, используя специальный упаковщик, если вам действительно нужен автономный .exe.