ΠΠ»Π°ΡΡ 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-Π°ΡΡ ΠΈΠ²Π΅, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΡΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ.