A extensão phar fornece uma maneira de colocar aplicações PHP inteiras em um único arquivo chamado "phar" (Arquivo PHP) para fácil distribuição e instalação. Além de fornecer este serviço, a extensão phar também fornece um método de abstração de formato de arquivo para criar e manipular arquivos tar e zip através da classe PharData, assim como o PDO fornece uma interface unificada para acessar diferentes bancos de dados. Ao contrário do PDO, que não pode converter entre bancos de dados diferentes, o Phar também pode converter entre os formatos de arquivo tar, zip e phar com uma única linha de código. Veja Phar::convertToExecutable() para um exemplo.
O que é phar? Arquivos phar são melhor caracterizados como uma maneira conveniente de agrupar vários arquivos em um único arquivo. Assim, um arquivo phar fornece uma maneira de distribuir uma aplicação PHP completa em um único arquivo e executá-la a partir desse arquivo sem a necessidade de extraí-la para o disco. Além disso, arquivos phar podem ser executados pelo PHP tão facilmente quanto qualquer outro arquivo, tanto na linha de comando quanto em um servidor web. Phar é como um pen drive para aplicações PHP.
Phar implementa essa funcionalidade por meio de um empacotador de fluxo. Normalmente, para usar um arquivo externo dentro de um script PHP, seria usado include:
Exemplo #1 Using an external file
<?php
include '/caminho/para/arquivo/externo.php';
?>
Pode-se pensar que o PHP está, na verdade, traduzindo
/caminho/para/arquivo/externo.php
em um
empacotador de fluxo como arquivo:///caminho/para/arquivo/externo.php
e,
nos bastidores, ele de fato usa as funções do empacotador de fluxo de arquivo simples para
acessar todos os arquivos locais.
Para usar um arquivo chamado arquivo.php
contido em um arquivo phar
/caminho/para/meuphar.phar
,
a sintaxe é muito semelhante à sintaxe file://
acima.
Exemplo #2 Usando um arquivo dentro de um arquivo phar
<?php
include 'phar:///caminho/para/meuphar.phar/arquivo.php';
?>
De fato, é possível tratar um arquivo phar exatamente como se fosse um disco externo, usando qualquer uma das funções relacionadas a fopen(), opendir() e funções relacionadas a mkdir() para ler, alterar ou criar novos arquivos e diretórios dentro do arquivo phar. Isso permite que aplicações PHP completas sejam distribuídas em um único arquivo e executadas diretamente a partir dele.
O uso mais comum de um arquivo phar é distribuir uma aplicação completa em um único arquivo. Por exemplo, o Instalador PEAR, que acompanha as versões do PHP é distribuído como um arquivo phar. Para usar um arquivo phar distribuído desta forma, o arquivo pode ser executado na linha de comando ou por meio de um servidor web.
Os arquivos Phar podem ser distribuídos como arquivos tar
,
arquivos zip
ou como o formato de arquivo phar
personalizado
projetado especificamente para a extensão phar. Cada formato de arquivo tem vantagens
e desvantagens. Os formatos de arquivo tar e zip podem ser lidos ou extraídos por qualquer
ferramenta de terceiros que possa ler o formato, mas que requer a extensão phar para
executar com PHP. O formato de arquivo phar é personalizado e exclusivo para a extensão phar,
e só pode ser criado pela extensão phar ou pelo pacote PEAR
» PHP_Archive, mas tem a
vantagem de que as aplicações criadas neste formato serão executadas mesmo se a extensão phar
não estiver habilitada.
Em outras palavras, mesmo com a extensão phar desabilitada, é possível executar ou incluir um arquivo baseado em phar. Acessar arquivos individuais dentro de um arquivo phar só é possível com a extensão phar, a menos que o arquivo phar tenha sido criado pelo PHP_Archive.
A extensão phar também é capaz de converter um arquivo phar de tar para zip ou para o formato de arquivo phar em um único comando:
Exemplo #3 Convertendo um arquivo phar do formato phar para tar
<?php
$phar = new Phar('meuphar.phar');
$pgz = $phar->convertToExecutable(Phar::TAR, Phar::GZ); // cria meuphar.phar.tar.gz
?>
O Phar pode compactar arquivos individuais ou um arquivo inteiro usando a compactação gzip ou bzip2, e pode verificar a integridade do arquivo automaticamente por meio do uso de assinaturas MD5, SHA-1, SHA-256 ou SHA-512.
Por fim, a extensão Phar é voltada para a segurança e desabilita o acesso de gravação
aos arquivos Phar executáveis por padrão, além de exigir a desativação, em nível de sistema, da configuração
phar.readonly
do php.ini para criar ou
modificar arquivos Phar. Arquivos tar e zip normais sem um stub executável
sempre podem ser criados ou modificados usando a classe PharData.
Se aplicações para distribuição estiverem sendo criadas, leia Como criar arquivos Phar. Se quiser mais informações sobre as diferenças entre os três formatos de arquivo suportados pelo Phar, leia Phar, Tar e Zip.
Se aplicações Phar estiverem sendo usadas, há dicas úteis em Como usar os Arquivos Phar.
A palavra phar
é uma junção de PHP
e
Archive
e é vagamente baseada
no jar
(Java Archive), familiar aos desenvolvedores Java.
A implementação para arquivos Phar é baseada no pacote PEAR » PHP_Archive, e os detalhes de implementação são semelhantes, embora a extensão Phar seja muito mais poderosa. Além disso, a extensão Phar permite que a maioria das aplicações PHP sejam executadas sem modificações, enquanto os arquivos Phar baseados em PHP_Archive geralmente exigem modificações extensas para funcionar.