A classe Phar suporta leitura e manipulação de arquivos Phar, bem como iteração por meio da funcionalidade herdada da classe RecursiveDirectoryIterator. Com suporte à interface ArrayAccess, os arquivos dentro de um arquivo Phar podem ser acessados como se fossem parte de um array associativo.
A classe PharData estende a classe Phar e
permite criar e modificar arquivos tar e zip não executáveis (de dados), mesmo que
phar.readonly=1 em php.ini. Dessa forma,
PharData::setAlias() e PharData::setStub()
estão desabilitados, pois os conceitos de alias e stub são exclusivos dos arquivos phar
executáveis.
É importante observar que, ao criar um arquivo Phar, o caminho completo deve ser passado para o construtor do objeto Phar. Caminhos relativos não serão inicializados.
Supondo que $p é um objeto Phar inicializado da seguinte maneira:
<?php
$p = new Phar('/caminho/para/meuphar.phar', 0, 'meuphar.phar');
?>
Um arquivo Phar vazio será criado em /caminho/para/meuphar.phar,
ou, se /caminho/para/meuphar.phar já existir, ele será aberto
novamente. O literal meuphar.phar demonstra o conceito de um apelido
que pode ser usado para referenciar /caminho/para/meuphar.phar em URLs como em:
<?php
// essas duas chamadas para file_get_contents() são equivalentes se
// /caminho/para/meuphar.phar tiver um apelido explícito de "meuphar.phar"
// em seu manifesto, ou se o phar foi inicializado com a
// configuração do objeto Phar do exemplo anterior
$f = file_get_contents('phar:///caminho/para/meuphar.phar/qualquercoisa.txt');
$f = file_get_contents('phar://meuphar.phar/qualquercoisa.txt');
?>
Com o objeto $p Phar recém-criado,
o seguinte é possível:
$a = $p['arquivo.php'] cria uma classe PharFileInfo
que se refere ao conteúdo de phar://meuphar.phar/arquivo.php
$p['arquivo.php'] = $v cria um novo arquivo
(phar://meuphar.phar/arquivo.php) ou sobrescreve
um arquivo existente dentro de meuphar.phar. $v
pode ser uma string ou um ponteiro para arquivo aberto, caso em que todo o
conteúdo do arquivo será usado para criar o novo arquivo. Observe que
$p->addFromString('arquivo.php', $v) é funcionalmente
equivalente ao acima. Também é possível adicionar o conteúdo de um arquivo
com $p->addFile('/caminho/para/arquivo.php', 'arquivo.php').
Por fim, um diretório vazio pode ser criado com
$p->addEmptyDir('empty').
isset($p['arquivo.php']) pode ser usado para determinar
se phar://meuphar.phar/arquivo.php existe dentro de
meuphar.phar.
unset($p['arquivo.php']) apaga
phar://meuphar.phar/arquivo.php de
meuphar.phar.
Além disso, o objeto Phar é a única maneira de acessar metadados específicos do Phar, por meio de Phar::getMetadata(), e a única maneira de definir ou recuperar o stub do carregador PHP de um arquivo Phar por meio de Phar::getStub() e Phar::setStub(). Além disso, a compactação de todo o arquivo Phar de uma só vez só pode ser manipulada usando a classe Phar.
A lista completa de funcionalidades do objeto Phar está documentada abaixo.
A classe PharFileInfo estende a classe SplFileInfo e adiciona vários métodos para manipular detalhes específicos de Phar de um arquivo contido em um Phar, como manipular compactação e metadados.