ИспользованиС Phar-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ²: классы Phar ΠΈ PharData

Класс Phar ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Phar-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ класса RecursiveDirectoryIterator. Благодаря ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ интСрфСйса ArrayAccess, доступ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ Phar-Π°Ρ€Ρ…ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Ρ‡Π°ΡΡ‚ΡŒΡŽ ассоциативного массива.

Класс PharData Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ класс Phar ΠΈ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ нСисполняСмыС tar- ΠΈ zip-Π°Ρ€Ρ…ΠΈΠ²Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ phar.readonly=1 Π² php.ini. ЀактичСски Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PharData::setAlias() ΠΈ PharData::setStub() ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ концСпция псСвдонима ΠΈ Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ являСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ для исполняСмых phar-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ².

Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ создании Phar-Π°Ρ€Ρ…ΠΈΠ²Π° Π² конструктор ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Phar Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Phar с ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ путями потСрпят Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ $p β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Phar, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

<?php
$p
= new Phar('/ΠΏΡƒΡ‚ΡŒ/ΠΊ/myphar.phar', 0, 'myphar.phar');
?>

ΠŸΡƒΡΡ‚ΠΎΠΉ Phar-Π°Ρ€Ρ…ΠΈΠ² Π±ΡƒΠ΄Π΅Ρ‚ создан Π² /ΠΏΡƒΡ‚ΡŒ/ΠΊ/myphar.phar, ΠΈΠ»ΠΈ, Ссли Ρ„Π°ΠΉΠ» /path/to/myphar.phar ΡƒΠΆΠ΅ сущСствуСт, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ. ИспользованиС myphar.phar ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ псСвдонима, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для указания Π½Π° /ΠΏΡƒΡ‚ΡŒ/ΠΊ/myphar.phar Π² URL-адрСсах, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

<?php
// эти Π΄Π²Π° Π²Ρ‹Π·ΠΎΠ²Π° file_get_contents() Ρ€Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ Π² Ρ‚ΠΎΠΌ случаС, Ссли
// /ΠΏΡƒΡ‚ΡŒ/ΠΊ/myphar.phar ΠΈΠΌΠ΅Π΅Ρ‚ явно Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ псСвдоним "myphar.phar"
// Π² своём манифСстС, ΠΈΠ»ΠΈ Ссли phar Π±Ρ‹Π» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ созданиСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Phar,
// ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅
$f = file_get_contents('phar:///ΠΏΡƒΡ‚ΡŒ/ΠΊ/myphar.phar/whatever.txt');
$f = file_get_contents('phar://myphar.phar/whatever.txt');
?>

Π‘ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ созданным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ $p класса Phar Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • $a = $p['file.php'] создаст ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса PharFileInfo, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° содСрТимоС phar://myphar.phar/file.php
  • $p['file.php'] = $v создаст Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» (phar://myphar.phar/file.php) ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ myphar.phar. $v ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ строкой ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π’ послСднСм случаС для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ использовано всё содСрТимоС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ эквивалСнтным этому Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² $p->addFromString('file.php', $v). Π’Π°ΠΊΠΆΠ΅ имССтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ добавлСния содСрТимого Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ $p->addFile('/path/to/file.php', 'file.php'). НаконСц, пустой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ $p->addEmptyDir('empty').
  • isset($p['file.php']) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для опрСдСлСния сущСствования Ρ„Π°ΠΉΠ»Π° phar://myphar.phar/file.php Π²Π½ΡƒΡ‚Ρ€ΠΈ myphar.phar.
  • unset($p['file.php']) удаляСт Ρ„Π°ΠΉΠ» phar://myphar.phar/file.php ΠΈΠ· myphar.phar.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, использованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Phar являСтся СдинствСнным способом ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π°Ρ€Ρ…ΠΈΠ²Π° (Ρ‡Π΅Ρ€Π΅Π· Phar::getMetadata()) ΠΈ СдинствСнным способом ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°Π³Π»ΡƒΡˆΠΊΡƒ Phar-Π°Ρ€Ρ…ΠΈΠ²Π° Ρ‡Π΅Ρ€Π΅Π· Phar::getStub() ΠΈ Phar::setStub(). К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со сТатиСм Ρ†Π΅Π»ΠΎΠ³ΠΎ Phar-Π°Ρ€Ρ…ΠΈΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ класс Phar.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Phar Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½ΠΈΠΆΠ΅.

Класс PharFileInfo Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ класс SplFileInfo ΠΈ добавляСт нСсколько ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с дСталями, присущими Ρ„Π°ΠΉΠ»Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТатся Π² Phar-Π°Ρ€Ρ…ΠΈΠ²Π΅, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π° со сТатиСм ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы