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.