¿Qué es el formato de archivo PHAR?
Los archivos .phar están asociados con el entorno de desarrollo de PHP. Un archivo .phar es el equivalente en PHP de un archivo JAR: empaqueta una aplicación o biblioteca de PHP completa en un solo paquete ejecutable y autónomo que puede distribuirse como un único archivo.
¿Qué tipo de datos pueden contener los archivos PHAR?
Los archivos .phar almacenan scripts de PHP y cualquier recurso de apoyo (plantillas, configuraciones, recursos), opcionalmente comprimidos con gzip o bzip2 por archivo o para todo el archivo. Cada archivo .phar contiene un «stub» de PHP ejecutable, un manifiesto binario que enumera los archivos incluidos con sus metadatos y una firma criptográfica opcional (MD5, SHA-1, SHA-256, SHA-512 o OpenSSL) verificada a través de phar.require_hash.
¿Cómo puedo ejecutar archivos PHAR?
Los archivos .phar se pueden ejecutar directamente con el intérprete de línea de comandos de PHP: php app.phar. Ejemplos conocidos incluyen composer.phar y phpunit.phar. Crear o modificar un Phar mediante programación requiere phar.readonly=0 en el php.ini, que está configurado en 1 (solo lectura) por defecto.
Problemas de seguridad relacionados con los archivos PHAR
Desde PHP 5.3.0, el soporte para Phar está habilitado por defecto. La ejecución automática de código PHAR en un entorno PHP plantea graves riesgos de seguridad para el sistema. Existen casos conocidos en los que se distribuyó código PHP malicioso en archivos PHAR enmascarados como archivos JPEG o .txt mediante un simple reemplazo de extensión. Abrir un archivo de este tipo puede provocar que el sistema se infecte con software malicioso. Además, activar envoltorios de flujo Phar (phar://) en rutas de archivos controladas por un atacante puede deserializar metadatos incrustados y provocar una ejecución remota de código por inyección de objetos.
Seguridad y protección
RIESGO: HIGHUn PHAR es código PHP ejecutable, así que trátelo como cualquier programa: ejecute solo Phars de fuentes oficiales y confiables (como composer.phar de getcomposer.org o phpunit.phar de phpunit.de) y verifique la suma de comprobación o firma publicada cuando se proporcione. Más allá de su ejecución, los Phars son un vector de ataque conocido en el lado del servidor: el envoltorio de flujo phar:// puede deserializar metadatos incrustados, permitiendo la inyección de objetos PHP o la ejecución remota de código si una aplicación pasa rutas controladas por el atacante a funciones de archivo. Nunca ejecute un .phar no solicitado y, en servidores, evite introducir datos de usuario en funciones que puedan resolver rutas phar://.
Detalles del formato
en pocas palabrasProgramas que abren archivos PHAR
php tool.phar (o php tool.phar --help) para ejecutarlo. php tool.phar (o php tool.phar --help) para ejecutarlo. php tool.phar (o php tool.phar --help) para ejecutarlo. Detalles técnicos
especificación profunda| Punto de entrada (stub) | Stub de PHP ejecutable que termina con el token `__HALT_COMPILER();`, que marca el inicio del manifiesto binario |
| Firma mágica final | Magic de 4 bytes GBMB en el bloque de firma final (presente solo en Phars firmados) |
| Compresión | Ninguna, Zlib (gzip) o Bzip2 - configurable por archivo o para todo el archivo |
| Algoritmos de firma | MD5, SHA-1, SHA-256, SHA-512 o OpenSSL X.509 (controlado por phar.require_hash en php.ini) |
| Método de ejecución | Se ejecuta directamente con `php app.phar`; no requiere extracción |
| Requisito de creación | Se debe establecer `phar.readonly=0` en php.ini para crear o modificar archivos Phar en tiempo de ejecución |
| Diseño interno | Stub de PHP + manifiesto binario (lista de archivos, versión de API, indicadores) + datos de archivos + bloque de firma opcional |
| Orden de bytes | Little-endian |
| Tamaño típico | De decenas de KB a decenas de MB (por ejemplo, composer.phar ~2 MB, phpunit.phar ~3 MB) |
| Soporte de versión de PHP | Incluido por defecto desde PHP 5.3 (2009); mantenido hasta PHP 8.x |
| Riesgo de seguridad | La deserialización de Phar a través del envoltorio de flujo `phar://` en rutas controladas por un atacante puede activar RCE por inyección de objetos |
| Diseños de carga admitidos | Phar plano, Phar basado en tar o Phar basado en zip (PHP selecciona el formato del manifiesto) |
| Lanzado | 2008 (Phar extension bundled in PHP 5.3) |
| Última versión | Maintained as a core PHP extension (current through PHP 8.x) |
| Estándar abierto | Sí · libre de regalías |
| Especificación | www.php.net |
Conversiones de PHAR
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos PHAR.
Preguntas frecuentes
¿Cómo ejecuto un archivo PHAR?
php tool.phar. En Linux/macOS también puede usar chmod +x tool.phar && ./tool.phar si tiene un «shebang». Hacer doble clic generalmente no funcionará.¿Qué es un archivo PHAR?
¿Cómo abro un PHAR para ver qué hay dentro?
¿Es seguro ejecutar un archivo PHAR?
¿Por qué no se ejecuta mi PHAR - error 'phar.readonly'?
¿Puedo convertir un PHAR en un EXE?
php tool.phar, o empaquete PHP con el Phar usando un empaquetador dedicado si realmente necesita un .exe independiente.