La extensión phar proporciona un medio para empaquetar una aplicación PHP completa en un único archivo llamado "phar" (PHP Archive) para facilitar la instalación y configuración. Además de este servicio, la extensión también proporciona una clase de abstracción de formato de archivo para crear y manipular archivos tar y zip a través de la clase PharData, de manera similar a como PDO proporciona una interfaz unificada para acceder a diferentes bases de datos. Sin embargo, a diferencia de PDO, que no puede transferir datos entre bases de datos, Phar tiene la capacidad de convertir archivos tar, zip y phar con una sola línea de código. Consulte Phar::convertToExecutable() para obtener un ejemplo.
¿Qué es phar? Las archivos phar son en realidad un medio práctico para agrupar varios archivos en uno solo. Así, un archivo phar permite distribuir una aplicación PHP completa en un único archivo y ejecutarla desde este archivo sin necesidad de extraerlo en el disco. Además, los archivos phar pueden ser ejecutados por PHP tan fácilmente como cualquier otro archivo, tanto desde la línea de comandos como a través de un servidor web. Phar es una especie de memoria USB para aplicaciones PHP.
Phar implementa esta funcionalidad mediante un flujo. Normalmente, para utilizar un archivo externo desde un script PHP, se debe utilizar la función include:
Ejemplo #1 Utilizar un archivo externo
<?php
include '/ruta/al/archivo/externo.php';
?>
Puede considerarse que PHP convierte en realidad
/ruta/al/archivo/externo.php
en un
flujo file:///ruta/al/archivo/externo.php
, y que
utiliza de forma oculta las funciones de flujo de archivos planos para acceder
a archivos locales.
Para utilizar un archivo llamado archivo.php
contenido en un archivo phar
/ruta/al/miphar.phar
,
la sintaxis es casi similar a la sintaxis file://
anterior.
Ejemplo #2 Utilizar un archivo contenido en un archivo phar
<?php
include 'phar:///ruta/al/miphar.phar/archivo.php';
?>
En realidad, un archivo phar puede tratarse como si fuera un disco externo, utilizando cualquiera de las funciones relacionadas con fopen(), opendir() y mkdir() para leer, modificar o crear nuevos archivos o directorios dentro del archivo phar. Esto permite que aplicaciones PHP completas sean distribuidas en un único archivo y ejecutadas desde él.
El uso más común de un archivo phar es distribuir una aplicación completa en un único archivo. Por ejemplo, el instalador PEAR que se incluye con las versiones de PHP se distribuye mediante un archivo phar. Para utilizar el archivo phar distribuido de esta manera, este puede ser ejecutado mediante la línea de comandos o a través de un navegador web.
Los archivos phar pueden distribuirse en formato tar
,
zip
o en el formato phar
especialmente diseñado
para la extensión phar. Cada formato de archivo tiene sus ventajas e inconvenientes. Los archivos
zip y tar pueden ser extraídos por cualquier herramienta de terceros que pueda leer el formato, pero
requieren la extensión phar para ser ejecutados por PHP. El formato de archivo phar es único y dedicado
a la extensión phar y solo puede ser creado por esta o por el paquete PEAR
» PHP_Archive, pero tiene la ventaja de no
requerir la instalación de la extensión phar para que la aplicación empaquetada pueda ser ejecutada.
En otras palabras, incluso con la extensión phar desactivada, es posible ejecutar o incluir un archivo basado en phar. Acceder a archivos individuales dentro de un archivo phar solo es posible con la extensión phar a menos que el archivo phar haya sido creado por PHP_Archive.
La extensión phar también es capaz de convertir un archivo phar desde un tar hacia un archivo zip o phar con un solo comando:
Ejemplo #3 Convertir un archivo phar al formato tar
<?php
$phar = new Phar('miphar.phar');
$pgz = $phar->convertToExecutable(Phar::TAR, Phar::GZ); // produce miphar.phar.tar.gz
?>
Phar puede comprimir archivos individuales o un archivo completo utilizando la compresión gzip o bzip2, y puede verificar la integridad del archivo automáticamente utilizando funciones de firma MD5, SHA-1, SHA-256 o SHA-512.
Finalmente, la extensión phar está orientada a la seguridad, desactiva por defecto los accesos
de escritura en archivos phar ejecutables y requiere la desactivación a nivel de sistema
del parámetro phar.readonly
del php.ini para crear o modificar archivos phar.
Los archivos tar y zip sin el marcador ejecutable pueden ser siempre creados o modificados
utilizando la clase PharData.
Si se crean aplicaciones con el propósito de distribuirlas, se debe leer Cómo crear archivos Phar. Si se desea más información sobre las diferencias entre los formatos de archivo que phar soporta, se debe leer Phar, Tar y Zip.
Si se utilizan aplicaciones phar, hay trucos muy útiles en Cómo utilizar archivos Phar.
La palabra phar
es la contracción de PHP
y de
Archive
y está fuertemente inspirada
en la palabra jar
(Java Archive) familiar a los desarrolladores Java.
La implementación de los archivos Phar se basa en el paquete PEAR » PHP_Archive, y los detalles de implementación son los mismos, aunque la extensión Phar es más potente. Además, esta permite que la mayoría de las aplicaciones PHP sean ejecutadas sin modificación mientras que los archivos basados en PHP_Archive requieren a menudo muchas modificaciones para funcionar.