Phar в PHP: преимущества и работа с PHAR

Phar в PHPСегодня мы познакомимся с понятием phar архивов, и их использовании в PHP. Зачем они нужны? Если вы пишите PHP приложение, которое направлено на развитие, то вы обязательно столкнетесь с такой проблемой. У вас будут происходить накопления PHP файлов, которые некуда будет девать. Предположим, тысяча или несколько тысяч файлов, которые занимают место. К тому же такое количество файлов, очень сложно загружать на хостинг, по FTP. Выходом из данной ситуации, будет использование phar архивов.

Сегодня мы узнаем

Phar – что это такое?

Преимущества Phar в PHP

Создание, добавление файлов, чтение, сжатие и конвертация архивов

Сигнатура или защита phar архивов

Чтение других архивов

Что такое Phar?

Phar – это приложение, позволяющее создавать архивы из файлов PHP проекта. Он пакует файлы в одну библиотеку, которую можно будет подключить и использовать, как один файл. Поэтому, cпомощью phar, мы можем значительно сократить код подключения файлов в php приложение, и упростить задачу сохранения файлов. Phar может работать с такими форматами, как tar, zip, bzip2 и phar. Эта утилита способна: создавать, читать, дописывать архивы и конвертировать один архив в другой. Такой принцип работы, доступен в других языках программирования, таких как DLL, N#, VB.Net, или jar файлы java. Чтобы узнать, как использовать phar в php, читайте раздел требования к PHP.

Доступ к исходным файлам архива осуществляется напрямую, без распаковки архива. Прямой доступ обеспечивает 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 = new Phar('test.phar');

$phar[hello_world.txt] = 'Hello World!';

А теперь, прочитаем его:

echo file_get_contents('phar://test.phar/hello_world.txt');

Создание и использование библиотек Phar

В этом разделе, мы научимся создавать собственные phar библиотеки и использовать их в нужных целях. Для начала напишем 2 класса, которые нам пригодятся:

classes/SampleClass.php

<?

 

class SampleClass {

 

    var $sName;

    var $sVersion;

 

    // constructor

    function SampleClass() {

        $this->sName = 'I am Sample class';

        $this->sVersion = '1.0.0';

    }

 

    function getAnyContent() {

        return '<h1>Hello World from Sample class</h1>';

    }

 

    function getContent2() {

        return '<h2>Get content 2</h2>';

    }

 

}

 

?>

classes/SampleClass2.php

<?

 

class SampleClass2 extends SampleClass {

 

    // constructor

    function SampleClass2() {

        $this->sName = 'I am Sample class 2';

        $this->sVersion = '1.0.2';

    }

 

    function getAnyContent() {

        return '<h1>Hello World from Sample class 2</h1>';

    }

 

}

 

?>

Очень просто, неправда ли? Теперь создадим в этой же папке файл, который будет подключать оба класса.

classes/index.php

<?

 

require_once('SampleClass.php');

require_once('SampleClass2.php');

 

?>

Теперь создайте папку lib, которая будет использоваться для phar библиотек. И создадим главный PHP файл, который будет компилировать phar архивы, и будет демонстрировать работоспособность библиотек.

index.php

<?

 

$sLibraryPath = 'lib/SampleLibrary.phar';

 

// we will build library in case if it not exist

if (! file_exists($sLibraryPath)) {

    ini_set("phar.readonly", 0); // Could be done in php.ini

 

    $oPhar = new Phar($sLibraryPath); // creating new Phar

    $oPhar->setDefaultStub('index.php', 'classes/index.php'); // pointing main file which require all classes

    $oPhar->buildFromDirectory('classes/'); // creating our library using whole directory

 

    $oPhar->compress(Phar::GZ); // plus - compressing it into gzip

}

 

// when library already compiled - we will using it

require_once('phar://'.$sLibraryPath.'.gz');

 

// demonstration of work

$oClass1 = new SampleClass();

echo $oClass1->getAnyContent();

echo '<pre>';

print_r($oClass1);

echo '</pre>';

 

$oClass2 = new SampleClass2();

echo $oClass2->getAnyContent();

echo $oClass2->getContent2();

echo '<pre>';

print_r($oClass2);

echo '</pre>';

 

?>

Результат выполнения нашего скрипта предоставлен на скриншоте ниже:

Пример работы Phar

В начале, проверяем, существует ли наша библиотека (lib/SampleLibrary.phar). Если существует – нам не нужно компилировать ее снова. Если нет – мы автоматически компилируем и пакуем нашу библиотеку.

Для начала проверяем читаемость phar архива с помощью функции ini_set. Далее, указываем имя и будущее местонахождение архива, для phar конструктора. С помощью setDefaultStub, указываем главный файл в библиотеке, который будет подключать все классы библиотеки. С помощью функции buildFromDirectory, собственно произошло компилирование библиотеки. Функция compress сжала библиотеку в формат GZIP.

Обращение к библиотеке происходит с помощью phar://. Это синтаксис PHP stream wrapper.

Добавление файлов в библиотеку Phar

Добавить файл в библиотеку, можно с помощью разных функций:

Phar::addFile()

Phar::addFromString()

Phar::addEmptyDir()

Phar::buildFromDirectory()

Phar::buildFromIterator()

Смотрите несколько примеров добавления файлов в архив:

$phar = new Phar(‘sitear.phar’);

$phar[‘index.php’] = file_get_contents(‘some/path/to/file.php’); // черезсвойствообъектаввидедоступакэлементаммассива (ArrayAccess)

 

$phar = new Phar(‘sitear.phar’);

$phar->addFile(‘http://sitear.ru’, ‘somefile.html’);

$phar->addFromString(‘somepage, file_get_contents(‘http://sitear.ru’));

$phar = new Phar(‘sitear.phar’);

$phar->addEmptyDir(‘temporary/’);

$phar->buildFromDirectory(‘some_directory/’);

 

 

$phar = new Phar(‘sitear);

$dir = ‘somedir/’;

$phar->buildFromIterator(

    new RecursiveDirectoryIterator($dir)

);

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

Как в случае с добавлением файлов, чтение phar архива, можно провести несколькими способами:

PHP stream wrapper (phar://)

прямое подключение

Phar::extractTo()

Итерация по инстансу 'Phar'

Сжатие Phar архива

Сжатие phar архивов, можно провести с использованием двух функций compress() и compressFiles(). Функция compress(), принимает два параметра, это имя файла и тип сжатия. Функция compressFiles(), принимает только один параметр – тип сжатия.

Рассмотрим пример использования функции compress():

$phar=new Phar('sitear.phar');

$phar->buildFromDirectory(' sitear /');

if (Phar::canCompress(Phar::GZ))

{

   $phar->compress(Phar::GZ,'.phar.gz');

}

else if (Phar::canCompress(Phar::BZ2))

{

   $phar->compress(Phar::BZ2,'.phar.bz2');

}

Также рассмотрим пример сжатия phar архива с помощью compressFiles():

$phar=new Phar('sitear.phar');

$phar->buildFromDirectory('sitear/');

if (Phar::canCompress(Phar::GZ))

{

   $phar->compressFiles(Phar::GZ);

}

else if (Phar::canCompress(Phar::BZ2))

{

   $phar->compressFiles(Phar::BZ2);

}

Конвертация форматов архива

Мы уже рассматривали сжатие phar архивов, в разделе выше. В данном разделе рассмотрим конвертацию форматов архива. Конвертацию архива, можно сделать несколькими способами:

Phar::ConvertToData()

Принимает три параметра:

Формат - Phar::TAR, Phar::ZIP

Сжатие - Phar::NONE, Phar::GZ, Phar::BZ2

Расширение - .tar, .tar.bz2, .tar.gz, .zip

Другой вариант, используя функцию Phar::ConvertToExecutable(), которая принимает все тоже, что и предыдущая, за исключением последнего параметра (расширения).

Сигнатура (защита) phar архивов

Сигнатура phar библиотек, используется для защиты архивов. А если говорить точнее, для проверки достоверности данных. PHAR поддерживает несколько алгоритмов создания сигнатур:

MD5

SHA1

SHA256

SHA512

При установки сигнатуры phar архива, используют метод Phar::setSignatureAlgorithm(), который принимает два параметра: тип сигнатуры, приватный ключ. Причем, типы сигнатуры в функции, указываются следующим образом:

Phar::MD5

Phar::SHA1

Phar::SHA256

Phar::SHA512

Phar::OPENSSL

Для большей ясности смотрите примеры установки сигнатуры на phar архив:

$phar=new Phar('sitear.phar');

$phar->buildFromDirectory(' sitear /');

$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('sitear.phar');

$phar->buildFromDirectory('sitear/');

$OSSLPrivateKey=openssl_get_privatekey(file_get_contents('private.pem'));

$OSSLPKey='';

openssl_pkey_export($OSSLPrivateKey,$OSSLPKey);

$phar->setSignatureAlgorithm(Phar::OPENSSL,$OSSLPKey);

Чтение других архивов

Также phar поддерживает чтение других архивов: ZIP и TAR. Архивы читаются, так как и phar архивы. При этом, длинна названия архива не должна превышать 255 байт, включая путь файла, и то, что в своем названии он должен иметь слово .phar. Например: sitear.phar.gz.

Заключение

Использование phar в программировании на PHP, очень удобно и полезно. Это экономит ваше дисковое пространство, защищает код, улучшает производительность и многое другое при создании больших PHP приложений.

Если у вас есть предложения или вопросы по использованию Phar в PHP, выскажите их в комментариях! 



Дальше: APC в PHP: Понятие, установка, использование APC


Дискуссия по теме     0 Комментариев
Добавить комментарий
Просмотров: 9600
Страхование КАСКО
карта банка
ндфл
усн
Оформление доверенности
страхование ипотеки
esim
осаго
ВЗР страхование
кредитная карта
Cialis barato Viagra Contrareembolso Cialis 5 mg precio mejores farmacias para comprar Viagra reacciones adversas de Cialis Reduslim cómo tomar soluciones para la impotencia Sildenafil Comprare Cialis 5 mg Giornaliero online in Italia Effetti indesiderati del Cialis 5 mg Acquista Cialis 20mg Cialis originale in vendita In Svizzera si compra il Viagra senza ricetta Cialis 10mg online Acquista Viagra in farmacia Offerta Cialis 5mg Spedra Avanafil in vendita online Acquista Viagra in Svizzera senza prescrizione авиатор спрайб Consegna a domicilio di Cialis 5 mg Effetti collaterali di Cialis 5 mg Consegna a domicilio di Cialis 20mg Acquista Cialis originale generico in Svizzera Consegna a domicilio di Viagra senza ricetta in Svizzera Compra Cialis 10mg Consegna a domicilio di Viagra in farmacia online Sconto Cialis 5mg Comprar Reduslim por internet Comprare Spedra Avanafil senza ricetta online Dove comprare il Viagra in Svizzera Compra Cialis Comprar online Viagra Contrareembolso Dónde encontrar Cialis 5 mg al mejor precio Viagra sin receta Cialis 5 mg efectos secundarios graves Reduslim comprar en línea Disfuncion Erectil tadalafilo avanafil prezzo cialis 20 mg prezzo cialis effetti benefici cialis 10 mg Reduslim Kaufen pulse x coin price