ИспользованиС Phar-Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ²: ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠ° phar

ΠžΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠ° Phar ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ fopen() для чтСния ΠΈ записи (Π½Π΅ для добавлСния), unlink(), stat(), fstat(), fseek(), rename() ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ opendir(), rmdir() ΠΈ mkdir().

Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ контСкстов ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° сТатиС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² Phar-Π°Ρ€Ρ…ΠΈΠ²Π΅:

<?php
$context
= stream_context_create(array('phar' =>
array(
'compress' => Phar::GZ)),
array(
'metadata' => array('user' => 'cellog')));
file_put_contents('phar://my.phar/somefile.php', 0, $context);
?>

ΠžΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° ΠΏΠΎΡ‚ΠΎΠΊΠ° phar Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, располоТСнными ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎ, ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅Ρ‘ использованиС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ INI allow_url_fopen ΠΈ allow_url_include ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹.

НСсмотря Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ возмоТности ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ phar-Π°Ρ€Ρ…ΠΈΠ²Ρ‹ с нуля просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°, встроСнного Π² класс Phar. ΠžΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния.

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

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

up
4
staff at pro-unreal dot de ΒΆ
15 years ago
Please note that the phar stream wrapper does not work with any glob.
When you decide to move your project to phar archives you need to consider this.

The following won't work:
<?php
glob('phar://some.phar/*');
new DirectoryIterator('glob://phar://some.phar/*');
?>

While the following will work:
<?php
new DirectoryIterator('phar://some.phar/');
?>
up
0
carl at dot dot com ΒΆ
15 years ago
Some Examples of how to use the stream wrapper would be really helpful.  
My floundering attempts reveal only the following:

<?php
$p = new PharData(dirname(__FILE__).'/phartest.zip', 0,'phartest',Phar::ZIP) ;

$p->addFromString('testfile.txt', 
'this is just some test text');

// This works
echo file_get_contents('phar://phartest.zip/testfile.txt');

//This Fails
file_put_contents('phar://phartest.zip/testfile.txt',
'Thist is text for testfile.txt');

$context = stream_context_create(
array('phar' =>array('compress' =>Phar::ZIP))
) ;

//This Fails
file_put_contents(
'phar://phartest.zip/testfile.txt',
'Thist is text for testfile.txt',0,$context);

// This works but only with 'r' readonly mode.
$f = fopen(
'phar://C:\\Inetpub\\wwwroot\\PACT\\test\\phartest.zip\\testfile.txt',
'r') ;
?>