как открыть архив phar?

Discussion in 'PHP' started by qaz, 10 Apr 2014.

  1. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    172
    Reputations:
    75
    как открыть архив phar? хостинг не потдерживает phar , на компе как-то можно?
     
    1 person likes this.
  2. Партнёр

    Joined:
    7 Sep 2010
    Messages:
    224
    Likes Received:
    67
    Reputations:
    1

    Тип файла: PHP Archive
    Разработчик: Greg Beaver
    Категория: Файлы-программы (exe)
    Файл, запакованный в формат PHAR (PHP Archive), который может создаваться при помощи класса Phar PHP. Хранит набор файлов и поддерживает сжатие bzip2 и gzip, а также контрольную сумму для архива. Применяется для распространения и запуска приложений PHP с помощью отдельного файла.

    Файлы PHAR близки к файлам .JAR Java и могут запускаться с помощью PHP. Примером стандартного приложения PHP, распространяемого в виде архива PHAR, является PEAR (PHP Extension and Application Repository) — менеджер пакетов для расширений PHP.

    Файлы PHP Archive совместимы с APC (Alternative PHP Cache) - "кэшем кода операции", оптимизирующим представление приложения с помощью кэширования и компилирования версий кода. PhpMyAdmin — чаще всего используемый внешний интерфейс для MySQL — был замерен с помощью 6 скорости при запуске файла PHAR.

    Примечание: Phar — компонент PHP, читающий и записывающий файлы PHAR, входит в состав PHP 5.3.

    Чем открыть PHAR-файл (PHP Archive)
     
  3. Партнёр

    Joined:
    7 Sep 2010
    Messages:
    224
    Likes Received:
    67
    Reputations:
    1
    Данную статью я хочу посвятить одному интересному нововведению в PHP 5.2 (с версии 5.3 входит в стандартную поставку PHP) — PHAR.
    image
    PHAR — это утилита для создания исполняемых архивов в PHP, аналог JAR в Java.
    PHAR ползволяет упаковать много файлов в один, в результате чего Ваше приложение может работать с целой библиотекой, как с одним файлом.
    PHAR умеет создавать, читать, записывать и конвертировать такие форматы, как TAR, ZIP и, собственно, PHAR.
    Доступ к файлам в архиве осуществляется напрямую, без необходимости распаковки архива, через PHP Stream Wrapper, тоесть с файлами из архива работают все функции, которые поддерживают PHP Stream Wrapper.

    Требования

    Для того, чтобы работать с архивами PHAR Вам нужен PHP не ниже версии 5.2 с расширениями PHAR, zlib и bzip2 (если у Вас PHP 5.3, то PHAR уже установлен по умолчанию ).
    Безопасность
    По умолчанию, к PHAR архивам есть только доступ на чтение. При желании, можно установить phar.readonly = 0 в php.ini.
    Кроме того, PHAR архивы могут исполняться только PHP интерпретатором


    Пример

    Создаем архив с текстовым файлом:
    PHP:
    $phar = new Phar('test.phar');
    $phar[hello_habr.txt] = 'Hello Habr!';
    А теперь считываем его содержимое:

    PHP:
    echo file_get_contents('phar://test.phar/hello_habr.txt');
    Файл-заглушка

    “Заглушка” — это файл, который читается первым при подключении PHAR-архива, это своего рода Bootstrap. Этот файл интерпретируется только в том случае, если архив подключен полностью. Если же скрипт использует только конкретные файлы из архива — файл-заглушка не интерпретируется.
    Посмотрим пример:

    PHP:
    //файл-заглушка будет прочитан
    include_once(‘some_archive.phar’);

    //файл-заглушка прочитан не будет
    include_once(‘phar://some_archive.phar/somefile.php’);
    При создании файла-заглушки используйте вызов __HALT_COMPILER() в конце файла.
    Доступ к файлу-заглушке можно получить вызовом метода getStub(), как в примере:

    PHP:
    $phar = new Phar(‘some_archive.phar’);
    $stub $phar->getStub();
    Для установки файла-заглушки по умолчанию нужно использовать метод setDefaultStub():

    PHP:
    $phar = new Phar(‘some_archive.phar’);
    $phar->setDefaultStub('cli.php''web/index.php');
    Создание содержимого архива

    ВАЖНО: установите phar.readonly = 0 в php.ini

    Существует несколько способов записи содержимого:
    через свойство объекта
    Phar::addFile()
    Phar::addFromString()
    Phar::addEmptyDir()
    Phar::buildFromDirectory()
    Phar::buildFromIterator()


    Несколько примеров:

    PHP:
    $phar = new Phar(‘habr.phar’);
    $phar[‘index.php’] = file_get_contents(‘some/path/to/file.php’); // через свойство объекта в виде доступа к элементам массива (ArrayAccess)
    PHP:
    $phar = new Phar(‘habr.phar’);
    $phar->addFile(‘http://habrahabr.ru’, ‘HabrHomePage.html’);
    $phar->addFromString(‘HabrHomePage’file_get_contents(‘http://habrahabr.ru’));
    $phar = new Phar(‘habr.phar’);
    $phar->addEmptyDir(‘temporary/);
    $phar->buildFromDirectory(‘some_directory/);
    PHP:
    $phar = new Phar(‘habr’);
    $dir ‘somedir/;
    $phar->buildFromIterator(
        new 
    RecursiveDirectoryIterator($dir)
    );

    Чтение из архива

    Как и с записью, существует несколько способов:
    PHAR stream wrapper (phar://)
    прямое подключение
    Phar::extractTo()
    Итерация по инстансу 'Phar'


    Сигнатура PHAR архива

    Сигнатура используется для проверки достоверности данных.
    PHAR поддерживает четыре алгоритма для создания сигнатур:
    MD5
    SHA1
    SHA256
    SHA512


    Для установки сигнатуры следует использовать метод Phar::setSignatureAlgorithm(), который принимает два параметра:
    Тип сигнатуры:
    Phar::MD5
    Phar::SHA1
    Phar::SHA256
    Phar::SHA512
    Phar::OPENSSL

    Приватный ключ — тоесть OpenSSL private key


    Пример кода:

    PHP:
    $phar=new Phar('habr.phar');
    $phar->buildFromDirectory('habr/');
    $signatures=Phar::getSupportedSignatures();
    if (
    in_array(PHAR::SHA512,$signatures))
    {
       
    $phar->setSignatureAlgorithm(PHAR::SHA512);
    }
    elseif (
    in_array(PHAR::SHA256,$signatures))
    {
       
    $phar->setSignatureAlgorithm(PHAR::SHA256);
    }
    elseif (
    in_array(PHAR::SHA1,$signatures))
    {
       
    $phar->setSignatureAlgorithm(PHAR::SHA1);
    }
    elseif (
    in_array(PHAR::MD5,$signatures))
    {
       
    $phar->setSignatureAlgorithm(PHAR::MD5);
    }



    и для OpenSSL:
    $phar=new Phar('habr.phar');
    $phar->buildFromDirectory('habr/');
    $OSSLPrivateKey=openssl_get_privatekey(file_get_contents('private.pem'));
    $OSSLPKey='';
    openssl_pkey_export($OSSLPrivateKey,$OSSLPKey);
    $phar->setSignatureAlgorithm(Phar::OPENSSL,$OSSLPKey);
    ZIP и TAR

    PHAR поддерживает чтение ZIP и TAR архивов. При этом чтение происходит так будто это обычный PHAR архив. Однако, следует помнить о том, что длина названия не должна превышать 255 байт, включая путь к файлу, а также, что для того, чтобы архив был исполняемым, он должен содержать в своем названии ‘.phar’ (например, habr.phar.gz)
    Сжатие архивов производится одним из двух алгоритмов: gzip или bzip2.
    Обратите внимание, что ZIP и TAR архивы могут быть созданы даже если phar.readonly = 1 в php.ini, но в таком случае не могут содержать файл-заглушку или ‘.phar’ в названии.
    Конвертация форматов архива
    Конвертацию архива можно проделать двумя способами:

    1. Phar::ConvertToData(), который принимает три параметра: формат (Phar::TAR, Phar::ZIP), сжатие(Phar::NONE, Phar::GZ, Phar::BZ2) и расширение(.tar, .tar.bz2, .tar.gz, .zip).

    2. Phar::ConvertToExecutable(), который принимает все те же параметры за исключением последнего — расширения. Тут доступно гораздо больше вариантов, которые все же основываются на форматах PHAR, ZIP или TAR соответственно: .phar, .phar.gz, .phar.bz2, .phar.tar, .phar.tar.gz, .phar.tar.bz2, .phar.zip

    Сжатие

    Как я уже написал выше — доступно два способа сжатия: Gzip и Bzip2, при этом сжимать можно как сам архив, так и файлы внутри него.
    Для сжатия архива нужно использовать метод compress(), который принимает два параметра — тип сжатия и расширение файла:

    PHP:
    $phar=new Phar('habr.phar');
    $phar->buildFromDirectory('habr/');
    if (
    Phar::canCompress(Phar::GZ))
    {
       
    $phar->compress(Phar::GZ,'.phar.gz');
    }
    else if (
    Phar::canCompress(Phar::BZ2))
    {
       
    $phar->compress(Phar::BZ2,'.phar.bz2');
    }

    Для сжатия файлов — compressFiles() с одним параметром — тип сжатия:

    PHP:
    $phar=new Phar('habr.phar');
    $phar->buildFromDirectory('habr/');
    if (
    Phar::canCompress(Phar::GZ))
    {
       
    $phar->compressFiles(Phar::GZ);
    }
    else if (
    Phar::canCompress(Phar::BZ2))
    {
       
    $phar->compressFiles(Phar::BZ2);
    }
    Производительность

    При использовании APC производительность PHAR вырастает до 6 раз.
    Без кеширования — почти не отличается от варианта без использования PHAR.

    Итоги

    И так, подведем итоги:
    PHAR легко устанавливается, а если точнее — он входит в стандартную поставку PHP 5.3.
    Его легко использовать.
    Легко разворачивать — всего один файл.
    Он хорошо защищен — сигнатуры, OpenSSL.
    Обладает высокой производительностью.
     
Loading...