Usando Arquivos Phar: o empacotador de fluxo phar

O empacotador de fluxo Phar suporta totalmente fopen() para leitura e gravação (não anexação), unlink(), stat(), fstat(), fseek(), rename() e operações de fluxo de diretório opendir(), rmdir() e mkdir().

A compactação de arquivos individuais e os metadados por arquivo também podem ser manipulados em um arquivo Phar usando contextos de fluxo:

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

O empacotador de fluxo phar não opera em arquivos remotos, e não pode operar em arquivos remotos, sendo, portanto, permitido mesmo quando as opções INI allow_url_fopen e allow_url_include estão desabilitadas.

Embora seja possível criar arquivos PHAR do zero usando apenas operações de fluxo, é melhor usar a funcionalidade incorporada à classe Phar. O empacotador de fluxo é mais adequado para operações somente leitura.

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
4
staff at pro-unreal dot de
13 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
-1
carl at dot dot com
13 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') ;
?>
To Top