fev 11
21
Utilizando arquivos PHAR
Para quem nunca ouviu falar de PHAR, que significa PHP ARchive, se trata de uma extensão do PHP que torna possível encapsular/compactar/agrupar vários arquivos em um único pacote “.phar”, assim como o JAR, do Java. Essa extensão proporciona a capacidade de agrupar uma aplicação inteira em um único arquivo para ser disponibilizado ou apenas utilizado na internet.
Os pacotes phar não são apenas como pacotes RPM do linux, onde a aplicação vem compactada e então é descompactada no sistema de arquivos do computador e compilada de acordo com as configurações do sistema operacional para utilização. Os pacotes PHAR podem ser utilizados imediatamente, sem necessidade de descompactar ou compilar.
Nas versões do PHP posteriores à 5.2 e anteriores à 5.3 é necessário instalar a extensão PECL do phar, que pode ser localizada aqui. A partir da versão 5.3 essa funcionalidade foi adicionada ao código fonte do PHP, não dependendo de instalações ou configurações adicionais.
Mais informações sobre o phar podem ser adquiridas diretamente no manual do php. Infelizmente a documentação sobre o PHAR ainda não foi traduzida por completo para português do brasil.
Para utilizar o phar, é simples, basta incluir o arquivo phar da mesma maneira que se inclui um arquivo php ou html em seu código:
<?php include "myApplication.phar"; ?>
Podia ser mais fácil? Acho que não. Mas apesar de ser tão simples, o que essa linha de comando faz? Nada! Apenas inclui o arquivo myApplication.phar à sua aplicação, e como se trata de um pacote compactado com vários arquivos, o que o PHP deve fazer a partir da inclusão do arquivo?
Na criação de um pacote PHAR, deve ser especificado um Stub que será interpretado pelo PHP como uma fração de código que deve ser executada no momento em que o arquivo for incluido. Geralmente o Stub é um código simples, com duas instruções: um include do arquivo principal da aplicação e um __HALT_COMPILER(). Obs.: a função __HALT_COMPILER() deve sempre estar contida no stub e também deve ser a ultima instrução. O motivo da obrigatoriedade disso ainda não foi documentado.
A inclusão do Stub é sempre feita na criação do pacote, e não cabe mais detalhes sobre isso agora, pois abordarei em outro post sobre criação de pacotes phar.
Quando você tem uma aplicação que funciona bastando sua inclusão simples, basta utilizar um include(“myApplication.phar”). Caso o arquivo não tenha um Stub ou você simplesmente está utilizando um pacote com mero objetivo de agrupar/encapsular arquivos, você sempre pode incluir os arquivos internos do phar pela stream “phar://”.
<?php include "phar://myApplication.phar/directory_inside_phar/file_under_phar.php"; ?>
Obs.: os pacotes PHAR não necessariamente suportam apenas inclusão de arquivos de código. Eles podem conter qualquer tipo de arquivo, inclusive arquivos de imagens, vídeos, músicas, etc.
Para você utilizar os arquivos de imagens dentro de um pacote PHAR diretamente através do navegador é um pouco mais complicado, mas não impossível. Na realidade, eu mentí. É extremamente simples. Basta alterar uma única linha de configuração do seu servidor web. No caso de utilizar o apache, basta adicionar um .phar ao final da linha AddType que configura o php para funcionar no servidor.
AddType application/x-httpd-php .php .pharA partir daí você pode utilizar algo como isso:
<img src="myTheme.phar/images/mini_banner.png" />
Com a configuração adicional no seu servidor, você também pode utilizar sua aplicação diretamente através da barra de endereço do navegador:
http://meudominio.com/myApplication.phar/blog.php
Se a aplicação for bem encapsulada em um pacote PHAR, você pode acessar sua aplicação apenas referenciando diretamente o pacote, com um stub:
http://meudominio.com/myApplication.phar
Existe a possibilidade de incluir um stub para que o pacote funcione como qualquer diretório no seu servidor, retornando códigos de erro 404 e tudo mais, e a extensão do phar já tem isso pronto pra você. Não vou entrar em detalhes de como incluir um stub desses agora, apesar de ser extremamente simples, vou manter o foco em como utilizar, e esses detalhes coloco em outro post sobre o assunto de Como criar seu pacote PHAR.
“http://meudominio.com/myApplication.phar” seria o equivalente a chamar “http://meudominio.com/myApplication.phar/index.php”, e “http://meudominio.com/myApplication.phar/blog” seria o mesmo que “http://meudominio.com/myApplication.phar/blog/index.php”.
Phar, simples assim.