Как редактировать phar файл
.phar — исполняемые PHP-архивы
Требования
Для того, чтобы работать с архивами PHAR Вам нужен PHP не ниже версии 5.2 с расширениями PHAR, zlib и bzip2 (если у Вас PHP 5.3, то PHAR уже установлен по умолчанию ).
Безопасность
По умолчанию, к PHAR архивам есть только доступ на чтение. При желании, можно установить phar.readonly = 0 в php.ini.
Кроме того, PHAR архивы могут исполняться только PHP интерпретатором
Пример
Создаем архив с текстовым файлом:
А теперь считываем его содержимое:
Файл-заглушка
“Заглушка” — это файл, который читается первым при подключении PHAR-архива, это своего рода Bootstrap. Этот файл интерпретируется только в том случае, если архив подключен полностью. Если же скрипт использует только конкретные файлы из архива — файл-заглушка не интерпретируется.
Посмотрим пример:
При создании файла-заглушки используйте вызов __HALT_COMPILER() в конце файла.
Доступ к файлу-заглушке можно получить вызовом метода getStub(), как в примере:
Для установки файла-заглушки по умолчанию нужно использовать метод setDefaultStub():
Создание содержимого архива
ВАЖНО: установите phar.readonly = 0 в php.ini
Чтение из архива
Сигнатура PHAR архива
ZIP и TAR
PHAR поддерживает чтение ZIP и TAR архивов. При этом чтение происходит так будто это обычный PHAR архив. Однако, следует помнить о том, что длина названия не должна превышать 255 байт, включая путь к файлу, а также, что для того, чтобы архив был исполняемым, он должен содержать в своем названии ‘.phar’ (например, habr.phar.gz)
Сжатие архивов производится одним из двух алгоритмов: gzip или bzip2.
Обратите внимание, что ZIP и TAR архивы могут быть созданы даже если phar.readonly = 1 в php.ini, но в таком случае не могут содержать файл-заглушку или ‘.phar’ в названии.
Конвертация форматов архива
Конвертацию архива можно проделать двумя способами:
Сжатие
Как я уже написал выше — доступно два способа сжатия: Gzip и Bzip2, при этом сжимать можно как сам архив, так и файлы внутри него.
Для сжатия архива нужно использовать метод compress(), который принимает два параметра — тип сжатия и расширение файла:
Для сжатия файлов — compressFiles() с одним параметром — тип сжатия:
Производительность
При использовании APC производительность PHAR вырастает до 6 раз.
Без кеширования — почти не отличается от варианта без использования PHAR.
Как редактировать phar файл
Here is an apache2 htaccess example that prevents the downloading of phar-Archives by the user:
If you get blank pages when trying to access a phar web-page, then you probably have Suhosin on your PHP (like in Debian and Ubuntu), and you need to ad this to your php.ini to allow execution of PHAR archives :
Users should set the `sys_temp_dir` directive.
PHAR stores temporary files in either `sys_temp_dir` or the current working directory(CWD).
This is especially important if you’re CWD is on a remote file system. Often web server clusters will share a common file system between each web server (using NFS, DFS, etc. ). In such scenarios, if you don’t set `sys_temp_dir` to a local directory, PHAR will be creating temporary files over the network, which will result in performance and functionality problems.
Here is a very simple program for creating phar files with CLI. Note that it requires phar.readonly in php.ini set to false (Off).
= «default» ;
$dir = «./» ;
$regex = «/^(. *build\\.php)(. *)$/» ;
$main = «main.php» ;
$shebang = «#!/usr/bin/env php» ;
$chmod = true ;
when read via phar://, stream will unserialize object including phar file
Here is a very simple class to build a phar file from a given source directory. You can use this for your own project and simple deployment.
But my main goal was to show how to use PHAR functions in a simple way.
Расширение файла PHAR
PHP Archive
Что такое файл PHAR?
Программы, которые поддерживают PHAR расширение файла
Ниже вы найдете указатель программ, которые можно использовать для открытия файлов PHAR, разделенных на категории 3 в соответствии с поддерживаемой системной платформой. Файлы с расширением PHAR, как и любые другие форматы файлов, можно найти в любой операционной системе. Указанные файлы могут быть переданы на другие устройства, будь то мобильные или стационарные, но не все системы могут быть способны правильно обрабатывать такие файлы.
Программы, обслуживающие файл PHAR
Как открыть файл PHAR?
Отсутствие возможности открывать файлы с расширением PHAR может иметь различное происхождение. К счастью, наиболее распространенные проблемы с файлами PHAR могут быть решены без глубоких знаний в области ИТ, а главное, за считанные минуты. Приведенный ниже список проведет вас через процесс решения возникшей проблемы.
Шаг 1. Получить PHP
Проблемы с открытием и работой с файлами PHAR, скорее всего, связаны с отсутствием надлежащего программного обеспечения, совместимого с файлами PHAR на вашем компьютере. Этот легкий. Выберите PHP или одну из рекомендованных программ (например, Phar) и загрузите ее из соответствующего источника и установите в своей системе. Полный список программ, сгруппированных по операционным системам, можно найти выше. Одним из наиболее безопасных способов загрузки программного обеспечения является использование ссылок официальных дистрибьюторов. Посетите сайт PHP и загрузите установщик.
Шаг 2. Обновите PHP до последней версии
Если у вас уже установлен PHP в ваших системах и файлы PHAR по-прежнему не открываются должным образом, проверьте, установлена ли у вас последняя версия программного обеспечения. Иногда разработчики программного обеспечения вводят новые форматы вместо уже поддерживаемых вместе с новыми версиями своих приложений. Если у вас установлена более старая версия PHP, она может не поддерживать формат PHAR. Все форматы файлов, которые прекрасно обрабатывались предыдущими версиями данной программы, также должны быть открыты с помощью PHP.
Шаг 3. Свяжите файлы PHP Archive с PHP
Если у вас установлена последняя версия PHP и проблема сохраняется, выберите ее в качестве программы по умолчанию, которая будет использоваться для управления PHAR на вашем устройстве. Следующий шаг не должен создавать проблем. Процедура проста и в значительной степени не зависит от системы
Изменить приложение по умолчанию в Windows
Изменить приложение по умолчанию в Mac OS
Шаг 4. Убедитесь, что PHAR не неисправен
Вы внимательно следили за шагами, перечисленными в пунктах 1-3, но проблема все еще присутствует? Вы должны проверить, является ли файл правильным PHAR файлом. Проблемы с открытием файла могут возникнуть по разным причинам.
1. Проверьте PHAR файл на наличие вирусов или вредоносных программ.
Если файл заражен, вредоносная программа, находящаяся в файле PHAR, препятствует попыткам открыть его. Рекомендуется как можно скорее сканировать систему на наличие вирусов и вредоносных программ или использовать онлайн-антивирусный сканер. Если файл PHAR действительно заражен, следуйте инструкциям ниже.
2. Убедитесь, что файл с расширением PHAR завершен и не содержит ошибок
Если вы получили проблемный файл PHAR от третьего лица, попросите его предоставить вам еще одну копию. Возможно, что файл не был должным образом скопирован в хранилище данных и является неполным и поэтому не может быть открыт. Это может произойти, если процесс загрузки файла с расширением PHAR был прерван и данные файла повреждены. Загрузите файл снова из того же источника.
3. Проверьте, есть ли у вашей учетной записи административные права
Иногда для доступа к файлам пользователю необходимы права администратора. Переключитесь на учетную запись с необходимыми привилегиями и попробуйте снова открыть файл PHP Archive.
4. Убедитесь, что в системе достаточно ресурсов для запуска PHP
Если система перегружена, она может не справиться с программой, которую вы используете для открытия файлов с расширением PHAR. В этом случае закройте другие приложения.
5. Убедитесь, что ваша операционная система и драйверы обновлены
Регулярно обновляемая система, драйверы и программы обеспечивают безопасность вашего компьютера. Это также может предотвратить проблемы с файлами PHP Archive. Возможно, файлы PHAR работают правильно с обновленным программным обеспечением, которое устраняет некоторые системные ошибки.
Вы хотите помочь?
Если у Вас есть дополнительная информация о расширение файла PHAR мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся здесь и отправьте нам свою информацию о файле PHAR.
Токарчук Андрей
Мне 34 года. Профессионально занимаюсь PHP-программированием. В работе использую PHP, JS, Symfony, Doctrine и многое другое. А вообще мне нравится всё новое и интересное 🙂
PHAR — упаковка PHP-приложений
В ближайшее время должна быть выпущена версия PHP V5.3. Cерия статей Что нового в PHP V5.3» посвящена новым замечательным функциям, появившимся в этой версии. В части 1 рассматриваются изменения в версии PHP V5.3, относящиеся к объектно-ориентированному программированию и управлению объектами, в части 2 — лямбда-функции и замыкания, а в части 3 мы говорили о пространстве имен, одной из самых долгожданных и обсуждаемых особенностей этой версии РНР. Здесь, в части 4, мы рассмотрим формат архивов Phar, который можно использовать внутри РНР. Он применяется не только для архивирования файлов, но и для распространения и исполнения целого приложения РНР, упакованного в один файл. Его можно использовать с РНР как расширение репозитория PECL, но в будущей версии V5.3 этот формат становится официальным расширением РНР.
Идея архивов Phar заимствована из технологии Java™ с ее архивами JAR, которые позволяют упаковать приложение в один файл, где есть все необходимое для работы этого приложения. Она отличается от концепции единственного исполняемого файла, который обычно создается такими языками программирования, как С, так как это не скомпилированное приложение, а просто архив. Так что файл JAR на самом деле содержит файлы, составляющие приложение, хотя по причинам безопасности они могут быть скрыты. Расширение Phar основано на аналогичной концепции, но больше ориентировано на веб-среду РНР. Кроме того, в отличие от JAR, архивы Phar могут обрабатываться самим РНР и не требуют внешнего инструмента для своего создания или использования.
Расширение Phar не является чем-то новым для РНР. Оно изначально было написано в РНР и известно как PHP_Archive, а в 2005 году было добавлено в репозиторий PEAR. Однако «чистое» РНР-решение этой задачи в реальной жизни работает довольно медленно, поэтому в 2007 году его переписали на С. В то же время была добавлена поддержка использования объекта SPL ArrayAccess для итерационной обработки архивов Phar. С тех пор была проведена определенная работа по повышению быстродействия архивов Phar.
Создание Phar
Для создания файла Phar нужно выполнить несколько шагов. Все они требуют исполнения команд РНР в той или иной форме, так как самостоятельных инструментов для создания таких архивов не существует. Кроме того, чтобы создать и модифицировать файлы Phar, нужно установить в 0 параметр php.ini phar.readonly. Для открытия или вызова файлов внутри архива Phar в РНР этого не требуется.
По умолчанию созданный архив Phar будет использовать собственный формат архива Phar. Но можно использовать и формат ZIP или TAR, преобразовав файл Phar в этот формат. В листинге 2 показано изменение формата на ZIP.
Листинг 2. Изменение формата хранения на ZIP
Изменение формата архива имеет свои преимущества и недостатки. Главное преимущество заключается в том, что содержимое архива можно просматривать при помощи любого инструмента для работы с файлами ZIP или TAR. Однако при использовании архива Phar в форматах ZIP или TAR требуется расширение Phar, а при использовании архива Phar в собственном формате Phar можно обойтись без его загрузки.
Теперь нужно определить загрузчик файла, то есть первый код, вызываемый при загрузке файла Phar.
Загрузчик файла Phar
Обращение к методу Phar::mapPhar() инициализирует архив Phar путем считывания manifest-файла. Это нужно сделать до ссылки на внутренние файлы архива посредством оболочки (stream wrapper) phar://. Первым будет загружаться тот файл, который данное приложение обычно загружает первым; в данном случае: index.php.
Второй необязательный аргумент метода Phar::createDefaultStub() позволяет включить другой файл, если Phar загружается из веб-сервера. Это удобно, когда приложение должно работать и в командной строке, и в контексте веб-браузера.
В реализациях на базе ZIP и TAR содержимое загрузчика хранится в файле.phar/stub.php, и команда setStub() не используется.
Добавление файлов в архив
Чтобы сжать файл или динамически использовать архив со сжатым файлом, нужно, чтобы при установке PHP было разрешено расширение bzip2 или zlib (для файлов, сжимаемых посредством gz).
Итак, мы создали архив Phar, который можно применять в любом приложении РНР. Теперь посмотрим, как использовать этот архив.
Работа с архивами Phar
Достоинство архивов Phar состоит в том, что их можно легко интегрировать в приложение, особенно при использовании собственного формата архива на базе Phar. В этом случае даже не нужно устанавливать расширение Phar, так как РНР сам умеет загружать такие файлы и извлекать их содержимое. Для загрузки ZIP- и TAR-архивов требуется расширение Phar.
Архивы Phar можно включать в приложение как любой другой файл РНР, что делает их использование предельно простым для разработчиков, которые уже знают, как включить в приложение чужой код. Продемонстрируем, как легко интегрировать Phar в приложениt
Интеграция кода из архива Phar в приложение
Простейший способ интегрировать код из архива Phar – просто включить в него этот архив, а затем ввести в архив файл, который нужно использовать. Для доступа к файлу внутри загруженного архива Phar можно использовать stream-оболочку phar:// (листинг 10).
Листинг 10. Загрузка кода из архива Phar
Первый оператор include загружает архив myphar.phar, включая код, указанный в загрузчике файла. Второй с помощью stream-оболочки открывает архив Phar и включает в архив только указанный файл. Заметим, что, как видно из листинга 10, для включения файла, находящегося в архиве, не обязательно применять include к самому архиву Phar.
Исполнение РНР-приложения из архива Phar
Одна из замечательных возможностей архивов Phar — это упаковка в архив Phar целого приложения и его распространение в таком виде. Преимущество этого подхода заключается в том, что он облегчает развертывание приложений, причем без ущерба для производительности — благодаря нескольким усовершенствованиям, внесенным в PHP V5.3. Однако при проектировании приложения для работы внутри Phar нужно учитывать несколько моментов:
Одно из популярных РНР-приложений, упакованных в Phar для иллюстрации того, как легко работать с архивами Phar, — PHPMyAdmin (см. Ресурсы). Оно целиком разработано для исполнения из файла архива Phar, однако позволяет хранить свой файл конфигурации вне архива Phar.
Заключение
Архивы Phar — весьма полезное дополнение к PHP V5.3. Они позволяют упаковать код РНР, что удобно для распространения приложений или библиотек в одном файле. Архив Phar можно легко загрузить из файла РНР при помощи функции require или include, либо выполнить прямо из браузера или командной строки, указав имя архива Phar.
Спасибо!
Введение
Phar реализует эту функциональность через потоки. Обычно, чтобы использовать в PHP-скрипте внешний файл, вы бы воспользовались, например, include :
Пример #1 Использование внешнего файла
Пример #2 Использование файла внутри phar-архива
Другими словами, даже если модуль phar отключён, phar-архив всё равно может быть выполнен или подключён. Доступ к отдельным файлам в архиве возможен только с модулем phar, если только архив не был создан с помощью PHP_Archive.
Модуль phar также способно конвертировать phar-архив из tar в zip или в phar-формат одной командой:
Пример #3 Конвертирование phar-архива из формата phar в формат tar
Phar может сжимать отдельные файлы или архив целиком с использованием gzip-компрессии или bzip2-компрессии, а также автоматически проверять целостность архива, используя сигнатуры MD5, SHA-1, SHA-256 или SHA-512.
Если вы создаёте приложение с целью распространения, вы, возможно, захотите прочитать раздел Как создавать Phar-архивы. Если вам нужно больше информации об отличиях между тремя поддерживаемыми phar форматами файлов, вам следует прочитать раздел Phar, Tar и Zip.
Если вы используете phar-приложение, то полезные советы находятся в разделе Как использовать phar-архивы.
Реализация Phar-архивов основана на PEAR-пакете » PHP_Archive, и детали реализации схожи, хотя модуль Phar гораздо мощнее. Кроме того, модуль Phar позволяет большинству PHP-приложений запускаться без изменений, тогда как phar-архивы, основанные на PHP_Archive, часто требуют существенных изменений для работы.