Utilizar los archivos Phar : Introducción
Los archivos Phar son idénticos en concepto a los archivos JAR
de Java, pero están diseñados específicamente para las necesidades y
la flexibilidad de las aplicaciones PHP. Un archivo Phar se utiliza
para distribuir una aplicación PHP completa o una biblioteca
en forma de un único archivo.
Una aplicación en forma de archivo Phar se utiliza exactamente de
la misma forma que cualquier otra aplicación PHP:
php aplicacionesympa.phar
El uso de una biblioteca en forma de archivo Phar es el mismo que cualquier otra biblioteca PHP:
El flujo phar
proporciona el núcleo de la extensión phar, y
es descrito en detalle aquí.
El flujo phar permite el acceso a los ficheros contenidos en un archivo phar mediante las
funciones estándar de ficheros fopen(), opendir(), y
cualquier otra que funcione con ficheros normales. El flujo phar
soporta todas
las operaciones de lectura/escritura tanto en ficheros como en directorios.
La clase Phar implementa funcionalidades
avanzadas para acceder a los ficheros y crear archivos phar. La
clase Phar es descrita en detalle aquí.
Por otro lado, la verificación del contenido del archivo phar puede realizarse utilizando uno de
los algoritmos de firma simétrica (MD5, SHA1, SHA256 y SHA512 si ext/hash está activada) y
utilizando la firma asimétrica por clave pública/privada de OpenSSL.
Para aprovechar la firma OpenSSL, debe generarse un par de claves pública/privada y
utilizar la clave privada para firmar con Phar::setSignatureAlgorithm(). Además, la
clave pública, extraída utilizando este código:
<?php
$public = openssl_get_publickey(file_get_contents('private.pem'));
$pkey = '';
openssl_pkey_export($public, $pkey);
?>
debe ser guardada por separado del archivo phar que verifica. Si el archivo phar es guardado
como
/ruta/hacia/mon.phar
, la clave pública debe ser guardada como
/ruta/hacia/mon.phar.pubkey
, de lo contrario phar no será capaz de verificar
la firma OpenSSL.
La clase Phar también proporciona tres métodos estáticos, Phar::webPhar(),
Phar::mungServer() y Phar::interceptFileFuncs() que son cruciales
para empaquetar aplicaciones PHP destinadas a ser utilizadas en un sistema de ficheros clásico o como aplicación web.
Phar::webPhar() implementa un controlador que enruta las llamadas HTTP al lugar correcto del archivo phar.
Phar::mungServer() se utiliza para modificar los valores del array $_SERVER para
indicar a las aplicaciones que utilicen estos valores. Phar::interceptFileFuncs() indica a Phar que intercepte las llamadas a
fopen(), file_get_contents(), opendir(), y
a todas las funciones basadas en stat (file_exists(), is_readable(), etc) y
enruta todos los caminos relativos a los lugares correctos del archivo phar.
Por ejemplo, empaquetar una versión de la famosa aplicación phpMyAdmin en un archivo phar requiere
simplemente este script y, a partir de entonces, phpMyAdmin.phar.tar.php
puede ser accedido como un fichero
clásico desde su servidor web, después de haber modificado la pareja usuario/contraseña: