Introducción

La extensión phar proporciona una manera de colocar aplicaciones PHP enteras dentro de un único fichero llamado "phar" (PHP Archive) para una distribución e instalación sencillas. Además de proporcionar este servicio, la extensión phar también provee de un método de abstracción de formato de fichero para crear y manipular ficheros tar y zip a través de la clase PharData, tal como PDO proporciona una interfaz unificada para acceder a diferentes bases de datos. A diferencia de PDO, la cual no puede realizar conversiones entre bases de datos diferentes, Phar también realiza conversiones entre los formatos de ficheros tar, zip phar con una sencilla línea de código. Véase Phar::convertToExecutable() para un ejemplo.

¿Qué es phar? Lo archivos Phar están mejor caracterizados como una forma conveniente de agrupar varios ficheros en un único fichero. Como tal, un archvo phar proporciona una forma para distribuir una aplicación PHP completa en un único fichero y ejecutarla desde ese mismo fichero sin necesidad de extraerlo en el disco. Además, los archivos phar pueden ser ejecutados por PHP fácilmente al igual que cualquier otro fichero, tanto desde la línea de comandos como desde un servidor web. Phar a web server. Phar es como una memoria USB para aplicaciones PHP.

Phar implementa esta funcionalidad a través de una Envoltura de Flujo. Normalmente, para utilizar un fichero externo dentro de un script de PHP, se debería usar include

Ejemplo #1 Utilizar un fichero externo

<?php
 
include '/ruta/al/fichero/externo.php';
 
?>

Puede considerarse que PHP traduce realemte /ruta/al/fichero/externo.php a una envoltura de flujo como file:///ruta/al/fichero/externo.php, y bajo la cubierta de hecho hace uso de funciones de flujo de envolturas de flujo de ficheros para acceder a todos los ficheros locales.

Para utilizar un fichero llamado fichero.php contenido en un archivo phar /ruta/a/miphar.phar, la sintaxis es muy similar a la sintaxis file:// de arriba.

Ejemplo #2 Utilizar un fichero dentro de un archivo phar

<?php
 
include 'phar:///ruta/a/miphar.phar/fichero.php';
 
?>

De hecho, se puede tratar un archivo phar exactamente como si fuera un disco externo, usando cualquiera de las funciones relacionadas con fopen(), opendir() y funciones relacionadas con mkdir() para leer, cambiar, o crear nuevos ficheros y directorios dentro del archivo phar. Esto permite que aplicaciones de PHP completas sean distribuidas en un único fichero y ejecutarlas directamente desde ese fichero.

El uso más común de un archivo phar es distribuir una aplicación completa en un único fichero. Por ejemplo, el Instalador de PEAR que se incluye con las versiones de PHP está distribuido como un archivo phar. Para usar un archivo phar distribuido de esta forma, se puede ejecutar en línea de comandos o mediante un servidor web.

Los archivos phar pueden ser distribuidos como archivos tar, zip, o como formato de fichero phar personalizado diseñado específicamente por la extensión phar. Cada formato de fichero tiene sus ventajas y desventajas. Los formatos de fichero tar y zip se pueden leer o extraer mediante cualquier herramienta de terceros que pueda leer el formato, pero necesia la extensión phar para ejecutarlo con PHP. El formato de fichero phar es personalizado y único para la extensión phar, y sólo puede ser creado por la extensión phar o el paquete de PEAR » PHP_Archive, pero tiene la ventaja de que las apliaciones creadas en este formato se ejecutarán incluso si la extensión phar no está habilitada.

En otras palabra, incluso con la extensión phar deshabilitada, se puede ejecutar o incluir un archivo basado en phar. El acceso a ficheros dentro de un archivo phar solamente es posible con la extesnión phar a menos que el archivo phar fuese creado por PHP_Archive.

La extensión phar también es capaz de convertir un archivo phar desde los formatos de fichero tar a zip o a phar en un único comando:

Ejemplo #3 Convertir un archivo phar, desde phar al formato de fichero tar

<?php
 $phar 
= new Phar('miphar.phar');
 
$pgz $phar->convertToExecutable(Phar::TARPhar::GZ); // crea miphar.phar.tar.gz
 
?>

Phar puede comprimir ficheros individuales o un archivo entero usando la compresión gzip o la bzip2, y puede verificar la integridad del archivo automáticamente a través del uso de las signaturas MD5, SHA-1, SHA-256 o SHA-512.

Por último, la extensión Phar se preocupa de la seguridad, y deshabilita el acceso a la escritura de archivos phar ejecutables de manera predeterminada, y requiere la deshabilitación a nivel de sistema del ajuste phar.readonly de php.ini para crear o modificar archivos phar. Los archivos tar y zip normales sin una rutina de interoperabilidad ejecutable siempre pueden ser creador o modificados utilizando la clase PharData.

Si está creando aplicaciones para su distribución, le interesará leer Cómo crear Archivos Phar. Si desea más información de las diferencias entre los tres formatos de ficheros que soporta phar, debería leer Phar, Tar y Zip.

Si usa aplicaciones phar, existen consejos útiles en Cómo utilizar archivos Phar

La palabra phar es una composición de PHP y Archive y está basada indirectamente en el familiar jar (Java Archive) para los desarrolladores Java.

La implementación de archivos Phar está basada en el paquete de PEAR » PHP_Archive, y los detalles de implementación son similares, aunque la extensión Phar es mucho más potente. Además, la extensión Phar permite a la mayoría de las aplicaciones de PHP ejecutarse sin modificaciones, mientras que los archivos phar basados en PHP_Archive a menudo requieren una extensa modificiación para que funcionen.