Usando Arquivos Phar: Introdução
Os arquivos Phar são semelhantes em conceito aos arquivos JAR do Java, mas são adaptados
às necessidades e à flexibilidade de aplicações PHP. Um arquivo Phar é
usado para distribuir uma aplicação ou biblioteca PHP completa em um único arquivo.
Uma aplicação de arquivo Phar é usada exatamente como qualquer outra aplicação PHP:
php aplicacaoincrivel.phar
Usar uma biblioteca de arquivo Phar é idêntico ao uso de qualquer outra biblioteca PHP:
O empacotador de fluxo phar
fornece o núcleo da extensão phar e
é explicado em detalhes aqui.
O empacotador de fluxo phar permite acessar os arquivos dentro de um arquivo phar usando
as funções de arquivo padrão do PHP fopen(), opendir() e
outras que funcionam em arquivos comuns. O empacotador de fluxo phar
suporta todas as
operações de leitura/gravação em arquivos e diretórios.
A classe Phar implementa funcionalidades avançadas para acessar
arquivos e criar arquivos phar. A classe Phar é explicada em detalhes
aqui.
Além disso, a verificação do conteúdo do arquivo phar pode ser feita usando qualquer um dos
algoritmos de hash simétricos suportados (MD5, SHA1, SHA256 e SHA512 se ext/hash estiver habilitado)
e usando assinatura assimétrica de chave pública/privada usando OpenSSL. Para
aproveitar a assinatura OpenSSL, é necessário gerar um par de chaves pública/privada e
usar a chave privada para definir a assinatura usando
Phar::setSignatureAlgorithm(). Adicionalmente, a chave pública
extraída usando este código:
<?php
$public = openssl_get_publickey(file_get_contents('private.pem'));
$pkey = '';
openssl_pkey_export($public, $pkey);
?>
deve ser salva adjacente ao arquivo phar que ela verifica. Se o arquivo phar
for salvo como
/caminho/para/meu.phar
, a chave pública deve ser salva
como
/caminho/para/meu.phar.pubkey
, ou o phar não conseguirá verificar
a assinatura OpenSSL.
A classe Phar também fornece 3 métodos estáticos, Phar::webPhar(),
Phar::mungServer() e Phar::interceptFileFuncs(), que são cruciais
para empacotar aplicações PHP projetadas para uso em sistemas de arquivos comuns e para aplicações web.
Phar::webPhar() implementa um controlador de frente que roteia chamadas HTTP para o local correto
dentro do arquivo phar. Phar::mungServer() é usado para modificar os valores
do array $_SERVER para enganar aplicações que processam esses valores.
Phar::interceptFileFuncs() instrui o Phar a interceptar chamadas para
fopen(), file_get_contents(), opendir() e
todas as funções baseadas em estatísticas (file_exists(), is_readable() e assim por diante) e
rotear todos os caminhos relativos para locais dentro do arquivo phar.
Por exemplo, empacotar uma versão do popular aplicativo phpMyAdmin para uso como um arquivo phar requer
apenas este script simples e então phpMyAdmin.phar.tar.php
pode ser acessado como um arquivo normal
a partir do servidor web após modificar o usuário/senha: