Utilizar Archivos Phar: Introduction
Los archivos phar son similares en concepto a los archivo JAR de Java, pero están adaptados
a las necesidades y a la flexibilidad de aplicaciones de PHP. Un archivo Phar se
usa para distribuir una aplicación o biblioteca PHP completa en un único fichero. Una
aplicación de un archivo Phar se utiliza exactamente de la misma manera que otra aplicación PHP:
Utilizar una biblioteca de archivo Phar es idéntico a usar cualquier otra biblioteca de PHP:
La envoltura de flujos phar
proporciona el núcleo de la extensión Phar, y
está explicada en detalle aquí.
La envoltura de flujos phar permite el acceso a los ficheros dentro de un archivo phar utilizando
las funciones estándar de ficheros de PHP fopen(), opendir(), y
y otras que trabajan sobre ficheros normales. La envoltura de flujos phar
soporta todas
las operaciones de lectura/escritura tanto en ficheros como en directorios.
La clase Phar implementa una funcionalidad avanzada para acceder
a ficheros y crear arhivos phar. La clas Phar está explicada en detalle
aquí.
Además, la verificación del contenido de ficheros phar se puede realizar utilizando cualquiera de los
algoritmos hash simétricos soportados (MD5, SHA1, SHA256 y SHA512 si la extensión Hash está habilitada)
y utilizando firmas de clave pública/privada asimétricas de OpenSSL (nuevo en Phar 2.0.0). Para
aprovechar la firmas de OpenSSL, se necesita generar una pareja de claves pública/privada, y
utilizar la clave privada para establecer la firma usando
Phar::setSignatureAlgorithm(). Además, la clave pública se
extrae usando este código:
<?php
$public = openssl_get_publickey(file_get_contents('private.pem'));
$pkey = '';
openssl_pkey_export($public, $pkey);
?>
debe ser guardada junto al archivo phar que verifica. Si el archivo phar
es guardado como
/ruta/a/mi.phar
, la clave pública debe guardarse
como
/ruta/a/mi.phar.pubkey
, o phar no será capaz de verificar
la firma OpenSSL.
A partir de la verisón 2.0.0, la clase Phar también proporciona tres métodos estáticos, Phar::webPhar(),
Phar::mungServer() y Phar::interceptFileFuncs(), los cuales son cruiciales
para empaquetar aplicaciones PHP diseñadas para un uso en sistemas de ficheros normales y aplicación basadas en web.
Phar::webPhar() implementa un controlador principal que direcciona llamadas HTTP a la ubicación
correcta dentro del archivo phar. Phar::mungServer() se utiliza para modificar los valores del
array $_SERVER para hacer que las aplicaciones procesen estos valores.
Phar::interceptFileFuncs() ordena a Phar que intercepte llamdas a
fopen(), file_get_contents(), opendir(), y
a todas las funciones basadas en estadísticas (file_exists(), is_readable(), etc.) y
direccione todas las rutas relativas a las ubicaciones dentro del archivo phar.
Como ejemplo, empaquetar una versión de la popular aplicación phpMyAdmin para usarla cono un archivo phar, requiere
solamente este sencillo script, y después se puede acceder a phpMyAdmin.phar.tar.php
como un fichero normal
desde el servidor web después de modificar el usuario/contraseña: