Как запустить приложение phar
Сегодня мы познакомимся с понятием phar архивов, и их использовании в PHP. Зачем они нужны? Если вы пишите PHP приложение, которое направлено на развитие, то вы обязательно столкнетесь с такой проблемой. У вас будут происходить накопления PHP файлов, которые некуда будет девать. Предположим, тысяча или несколько тысяч файлов, которые занимают место. К тому же такое количество файлов, очень сложно загружать на хостинг, по FTP. Выходом из данной ситуации, будет использование phar архивов.
Сегодня мы узнаем
Что такое Phar?
Доступ к исходным файлам архива осуществляется напрямую, без распаковки архива. Прямой доступ обеспечивает PHP Stream Wrapper. Другими словами с файлами архива работают функции поддерживаемые PHP Stream Wrapper.
Требования к PHP версии
Расширение phar, доступно с версии PHP 5.2. А с версии 5.3 – это неотъемлемая часть PHP. Для начала, советую вам проверить версию PHP. Если версия ниже, меняйте. Если версия PHP не ниже 5.2 – вам необходимо переустановить PHP ядро с Phar, Zlib и bzip2 расширениями. Если у вас версия 5.3 – все отлично, phar установлен по умолчанию.
Если хотите, можете настроить защиту для ваших phar архивов, и сделать их доступными, только для чтения. Для этого, нужно установить настройку в файле php.ini. Установите следующий параметр phar.readonly = 0.
Преимущества Phar в PHP
PHAR легко устанавливается, а если точнее — он входит в стандартную поставку PHP 5.3.
Удобно при копировании файлов на другой хост.
Легко разворачивать — всего один файл.
Высокая степень защиты PHP приложения — сигнатуры, OpenSSL.
Обладает высокой производительностью.
Работа с Phar в PHP
В этом разделе, мы будем работать с утилитой. А точнее, будем создавать и использовать собственные библиотеки файлов PHP приложения. Вы увидите, насколько просто и удобно использовать phar библиотеки.
Пример Hello World
Для начала создадим простой архив, с текстовым файлом:
А теперь, прочитаем его:
Создание и использование библиотек Phar
В этом разделе, мы научимся создавать собственные phar библиотеки и использовать их в нужных целях. Для начала напишем 2 класса, которые нам пригодятся:
classes/SampleClass.php
classes/SampleClass2.php
Очень просто, неправда ли? Теперь создадим в этой же папке файл, который будет подключать оба класса.
classes/index.php
Теперь создайте папку lib, которая будет использоваться для phar библиотек. И создадим главный PHP файл, который будет компилировать phar архивы, и будет демонстрировать работоспособность библиотек.
index.php
Результат выполнения нашего скрипта предоставлен на скриншоте ниже:
В начале, проверяем, существует ли наша библиотека (lib/SampleLibrary.phar). Если существует – нам не нужно компилировать ее снова. Если нет – мы автоматически компилируем и пакуем нашу библиотеку.
Для начала проверяем читаемость phar архива с помощью функции ini_set. Далее, указываем имя и будущее местонахождение архива, для phar конструктора. С помощью setDefaultStub, указываем главный файл в библиотеке, который будет подключать все классы библиотеки. С помощью функции buildFromDirectory, собственно произошло компилирование библиотеки. Функция compress сжала библиотеку в формат GZIP.
Обращение к библиотеке происходит с помощью phar://. Это синтаксис PHP stream wrapper.
Добавление файлов в библиотеку Phar
Добавить файл в библиотеку, можно с помощью разных функций:
Смотрите несколько примеров добавления файлов в архив:
Чтение phar архива
Как в случае с добавлением файлов, чтение phar архива, можно провести несколькими способами:
PHP stream wrapper (phar://)
Итерация по инстансу 'Phar'
Сжатие Phar архива
Сжатие phar архивов, можно провести с использованием двух функций compress() и compressFiles(). Функция compress(), принимает два параметра, это имя файла и тип сжатия. Функция compressFiles(), принимает только один параметр – тип сжатия.
Рассмотрим пример использования функции compress():
Также рассмотрим пример сжатия phar архива с помощью compressFiles():
Конвертация форматов архива
Мы уже рассматривали сжатие phar архивов, в разделе выше. В данном разделе рассмотрим конвертацию форматов архива. Конвертацию архива, можно сделать несколькими способами:
Phar::ConvertToData()
Принимает три параметра:
Формат - Phar::TAR, Phar::ZIP
Сжатие - Phar::NONE, Phar::GZ, Phar::BZ2
Расширение - .tar, .tar.bz2, .tar.gz, .zip
Другой вариант, используя функцию Phar::ConvertToExecutable(), которая принимает все тоже, что и предыдущая, за исключением последнего параметра (расширения).
Сигнатура (защита) phar архивов
Сигнатура phar библиотек, используется для защиты архивов. А если говорить точнее, для проверки достоверности данных. PHAR поддерживает несколько алгоритмов создания сигнатур:
При установки сигнатуры phar архива, используют метод Phar::setSignatureAlgorithm(), который принимает два параметра: тип сигнатуры, приватный ключ. Причем, типы сигнатуры в функции, указываются следующим образом:
Для большей ясности смотрите примеры установки сигнатуры на phar архив:
Чтение других архивов
Также phar поддерживает чтение других архивов: ZIP и TAR. Архивы читаются, так как и phar архивы. При этом, длинна названия архива не должна превышать 255 байт, включая путь файла, и то, что в своем названии он должен иметь слово .phar. Например: sitear.phar.gz.
Заключение
Использование phar в программировании на PHP, очень удобно и полезно. Это экономит ваше дисковое пространство, защищает код, улучшает производительность и многое другое при создании больших PHP приложений.
Если у вас есть предложения или вопросы по использованию Phar в PHP, выскажите их в комментариях!
Концептуально Phar-архивы аналогичны JAR-архивам Java, но учитывают нужды и гибкость PHP-приложений. Phar-архив используется для распространения законченного PHP-приложения или библиотеки в виде одного файла. Приложение, имеющее вид Phar-архива, используется в точности так же, как и любое другое PHP-приложение:
Использование библиотеки, имеющей вид Phar-архива, идентично использованию любой другой PHP-библиотеки:
Обёртка потока phar представляет собой основу модуля phar, про её использование подробно написано здесь. Обёртка потока phar предоставляет доступ к файлам внутри phar-архива с использованием стандартных файловых функции PHP: fopen() , opendir() и других, которые работают с обычными файлами. Обёртка потока phar поддерживает все операции чтения/записи как над файлами, так и над каталогами.
<?phpinclude 'phar://coollibrary.phar/internal/file.php' ;
header ( 'Content-type: image/jpeg' );
// доступ к phar-архивам может осуществляться по полному пути или с помощью псевдонима
echo file_get_contents ( 'phar:///полный/путь/к/coollibrary.phar/images/wow.jpg' );
?>
Класс Phar реализует расширенные возможности по доступу к файлам и по созданию phar-архивов. Использование класса Phar подробно описано здесь.
<?php
try // открыть существующий phar-архив
$p = new Phar ( 'coollibrary.phar' , 0 );
// Phar наследует SPL-класс DirectoryIterator
foreach (new RecursiveIteratorIterator ( $p ) as $file ) // $file является объектом класса PharFileInfo, который наследует SplFileInfo
echo $file -> getFileName () . "\n" ;
echo file_get_contents ( $file -> getPathName ()) . "\n" ; // отображает содержимое;
>
if (isset( $p [ 'internal/file.php' ])) var_dump ( $p [ 'internal/file.php' ]-> getMetadata ());
>
// создать новый phar-архив - параметр phar.readonly в php.ini должен быть 0
// phar.readonly включён по умолчанию из соображений безопасности.
// На работающих серверах phar-архивы никогда не должны создаваться,
// а только выполняться.
if ( Phar :: canWrite ()) $p = new Phar ( 'newphar.tar.phar' , 0 , 'newphar.tar.phar' );
// создать phar-архив, основанный на tar, сжатый gzip-сжатием (.tar.gz)
$p = $p -> convertToExecutable ( Phar :: TAR , Phar :: GZ );
// создать транзакцию - в newphar.phar ничего не будет записано
// до тех пор, пока не будет вызван stopBuffering(), однако для этого требуется временное хранилище
$p -> startBuffering ();
// добавить все файлы в каталоге /путь/к/проекту/project, сохранение в phar-архив с префиксом "project"
$p -> buildFromIterator (new RecursiveIteratorIterator (new RecursiveDirectoryIterator ( '/путь/к/проекту/project' )), '/путь/к/проекту/' );
// добавить новый файл используя ArrayAccess
$p [ 'file1.txt' ] = 'Информация' ;
$fp = fopen ( 'hugefile.dat' , 'rb' );
// скопировать все данные из потока
$p [ 'data/hugefile.dat' ] = $fp ;
if ( Phar :: canCompress ( Phar :: GZ )) $p [ 'data/hugefile.dat' ]-> compress ( Phar :: GZ );
>
$p [ 'images/wow.jpg' ] = file_get_contents ( 'images/wow.jpg' );
// любое значение может быть сохранено в качестве метаданных файла
$p [ 'images/wow.jpg' ]-> setMetadata (array( 'mime-type' => 'image/jpeg' ));
$p [ 'index.php' ] = file_get_contents ( 'index.php' );
$p -> setMetadata (array( 'bootstrap' => 'index.php' ));
// сохранить phar-архив на диск
$p -> stopBuffering ();
>
> catch ( Exception $e ) echo 'Невозможно открыть Phar: ' , $e ;
>
?>
Кроме того, проверка содержимого phar-файла может быть осуществлена с помощью любого из поддерживаемых симметричных алгоритмов хеширования (MD5, SHA1, SHA256 и SHA512, если ext/hash включён), а также с помощью подписывания асимметричными открытым/закрытым ключами, используя OpenSSL. Для того чтобы использовать подписывание OpenSSL, вам необходимо сгенерировать пару из открытого и закрытого ключей и установить закрытый ключ для подписывания, используя Phar::setSignatureAlgorithm() . Кроме того, открытый ключ, извлечённый при помощи этого кода:
<?php$public = openssl_get_publickey ( file_get_contents ( 'private.pem' ));
$pkey = '' ;
openssl_pkey_export ( $public , $pkey );
?> должен быть сохранён рядом с phar-архивом, для проверки которого он используется. Если phar-архив сохранён как /путь/к/моему/архиву/my.phar , то открытый ключ должен быть сохранён как /путь/к/моему/архиву/my.phar.pubkey , иначе phar не сможет проверить подлинность подписи OpenSSL.
Например, для упаковки выпуска популярного приложения phpMyAdmin для его использования в качестве phar-архива, требуется только этот простой скрипт, а phpMyAdmin.phar.tar.php будет доступен как обычный файл на вашем веб-сервере после изменения значений user/password:
<?php
@ unlink ( 'phpMyAdmin.phar.tar.php' );
copy ( 'phpMyAdmin-2.11.3-english.tar.gz' , 'phpMyAdmin.phar.tar.php' );
$a = new Phar ( 'phpMyAdmin.phar.tar.php' );
$a -> startBuffering ();
$a [ "phpMyAdmin-2.11.3-english/config.inc.php" ] = '<?php
/* Конфигурация сервера */
$i = 0;
/* Сервер localhost (config:root) [1] */
$i++;
$cfg[\'Servers\'][$i][\'host\'] = \'localhost\';
$cfg[\'Servers\'][$i][\'extension\'] = \'mysqli\';
$cfg[\'Servers\'][$i][\'connect_type\'] = \'tcp\';
$cfg[\'Servers\'][$i][\'compress\'] = false;
$cfg[\'Servers\'][$i][\'auth_type\'] = \'config\';
$cfg[\'Servers\'][$i][\'user\'] = \'root\';
$cfg[\'Servers\'][$i][\'password\'] = \'\';
Я пытаюсь запустить композитор в Windows с помощью Wamp. Я установил композитор с помощью командной строки, и теперь я пытаюсь запустить «обновление композитора» для SDK. Однако, когда я набираю «composer.phar update», Windows спрашивает, какое приложение я хочу использовать для запуска этой программы. Я хочу, чтобы с этим справилась командная строка! Как мне просто запустить его через cmd без появления этого окна «какое приложение»?
3 ответа
Вы должны установить php.exe в качестве приложения по умолчанию для файлов phar.
Будь проще. Вместо того, чтобы изменять программу .phar по умолчанию, что не всегда просто в Windows, попробуйте просто ввести «php» перед своей командой.
.phar означает архив PHP.
Обычно .phar принимают некоторые аргументы, поэтому они предназначены для запуска из командной строки. Оболочка Linux / BSD / OS X или командная строка Windows.
Сценарии использования Linux .phar предполагают, что .phar скопированы в какой-то / bin и переименованы без расширения .phar, поэтому вы можете использовать архив php, как если бы вы использовали любую другую команду linux. Поэтому я рекомендую сделать то же самое с Windows следующим образом:
- Поместите все свои файлы .phar в один каталог, например C:\php\phars
- Добавьте C:\php\phars в системные переменные среды (щелкните правой кнопкой мыши мой Computer -> Properties -> Advanced System Settings -> Environment variables )
- Запустите командную строку с повышенными привилегиями (найдите командную строку в меню «Пуск», щелкните правой кнопкой мыши и выберите Run as Administrator )
- Введите следующие команды, заменив путь C:\phpdev\php\php542\php.exe полным путем к исполняемому файлу PHP:
В следующий раз вы сможете просто запустить консоль Windows (клавиатура Win + R и набрать cmd.exe ) и ввести любой из ваших .phar например apigen.phar , за которым следует любая команда, и это будет работать
Таким образом, этот способ позволяет вам запускать архивы .phar в каталоге, в котором вам нужно работать, например, создавать документацию в C:\myproject\controller без указания полного пути к .phar , как если бы вы выполняли его без добавления это путь к Windows.
Чтобы объяснить, что выполняли команды на шаге 4:
- Создано отображение HKCR.phar → HKCR \ PHARFile
- Создан HKCR \ PHARFile \ shell \ open \ command = 'php.exe "% 1"% *' [REG_EXPAND_SZ]
- Расширенный HKCU \ Environment \ PATHEXT = '% PATHEXT% ;. PHAR' [REG_EXPAND_SZ]
*.phar обрабатывается как двоичный файл / скрипт, и выполнение *.phar работает до тех пор, пока файл *.phar находится где-нибудь в %PATH% .
Практически каждый сталкивался с некоторыми проблемами при открытии неизвестных файлов при работе на компьютере. Это может быть очень сложно. Однако такие проблемы, не только с файлами PHAR, могут быть решены стандартным способом. Следуйте инструкциям ниже, и мы можем гарантировать, что ваша проблема с открытием PHAR будет решена!
PHAR расширение файла
- Тип файла PHP Archive
- Разработчик файлов Greg Beaver
- Категория файла Исполняемые файлы
- Рейтинг популярности файлов
Как открыть файл PHAR?
Если данная учетная запись пользователя не имеет необходимых разрешений для открытия файлов с расширением PHAR , весьма вероятно, что в системе пользователей не установлена программа, поддерживающая данные файлы. Ниже приведен список действий, которые пользователь должен выполнить для решения наиболее распространенных проблем.
Шаг 1. Загрузите и установите приложение, которое поддерживает PHAR файлы
После установки приложения система должна автоматически открывать PHAR файлы с данным приложением. Ниже приведен список соответствующих программ, а также операционных систем, для которых они доступны:
Программы, поддерживающие PHAR файлы
WindowsШаг 2. Убедитесь, что файлы PHAR связаны с соответствующим программным обеспечением
Возможно, что приложение, которое поддерживает файлы PHAR, не связано с такими файлами. В этом случае программа должна быть вручную связана с файлами PHAR (щелкните правой кнопкой мыши значок файла → Свойства → Вкладка «Общие» → В подменю «Открыть с помощью» и нажмите кнопку «Изменить». Система отобразит список предлагаемых программы, которые поддерживают PHAR файлы. Выберите приложение, установив флажок «Всегда использовать выбранное приложение для открытия файлов такого типа». Система сохранит эту информацию в своем реестре и будет использовать ее для открытия PHAR файлов с выбранной программой. ,
Изменение PHAR ассоциации файлов в реестре
Ассоциация файлов для файлов PHAR может быть отредактирована вручную путем редактирования соответствующей записи в системном реестре Windows. Тем не менее, это не рекомендуется, так как это может привести к ошибкам в реестре, если это не сделано должным образом, и может даже повредить систему.
Читайте также: