Cómo empaquetar aplicaciones PHP para su distribución en un sólo fichero .PHAR

2022-01-24 - Categorías: PHP

Una forma de distribuir, reutilizar en otros proyectos, o desplegar aplicaciones completas PHP, es empaquetando estos programas en ficheros .phar. Estos ficheros .phar son el equivalente de Java de los empaquetados .jar.

En PHP no es habitual empaquetar los proyectos completos, pero facilita las cosas si lo hacemos cuando es interesante. Es decir, empaquetando todo en un fichero .phar se facilita el despliegue en producción, la distribución para reutilizar en otros proyectos, el uso desde línea de comandos, su configuración en servidor, etcétera.. estos ficheros .phar se pueden usar como ficheros normales .php en los includes o requires.

Es muy interesante combinarlo con tecnologías de servidor PHP embebido como ReactPHP, con lo que ni siquiera haría falta configurar un servidor web Apache, Nginx.. esto también es suma y sigue. También otra cosa interesante es que se pueden crear empaquetados .tar y .zip con los proyectos PHP.

Al grano, cómo empaquetar proyectos PHP en un único fichero .PHAR

Escudriñando la documentación oficial de PHP, podemos construir nuestro propio constructor del proyecto. Aquí un ejemplo funcional para genera un .phar, podemos ponerlo por ejemplo en la raíz del proyecto en createPhar.php:

<?php

$filename = 'executable.phar';
$sourceRoot = __DIR__.'/src';

// Removing..
if (file_exists($filename)) {
    unlink($filename);
}

// Regenerating..
$phar = new Phar($filename, 0, $filename);
$phar->buildFromIterator(
    new RecursiveIteratorIterator(new RecursiveDirectoryIterator($sourceRoot, FilesystemIterator::SKIP_DOTS)),
    $sourceRoot);
$phar->setStub($phar->createDefaultStub('index.php', 'index.php'));

Este código funciona desde línea de comandos.

Para ver algo necesitaremos por ejemplo un fichero src/Commons/IncludedClass.php:

<?php

final class IncludedClass {
    public $variable1;
    public $variable2;
    public $variable3;

    public function saySomething()
    {
        echo 'Something'.PHP_EOL;
    }
}

..y en el src/index.php un posible acción inicial:

<?php

include 'Commons/IncludedClass.php';

echo (new IncludedClass())->saySomething();

El creador del .phar está configurado para cargar todo lo que haya en src/ y como punto de entrada lanzará el src/index.php. Un posible uso del empaquetado .phar resultado, es simplemente lanzarlo desde línea de comandos:

Empaquetar para reutilizar con includes o requires

Como indicaba anteriormente, estos .phar se puede enviar a ciertos destinos para a su vez incluirlos en los requires o includes de PHP. Este uso es bien parecido, sólo que ahora en vez de lanzar el proceso desde línea de comandos, entonces el .phar estará orientado para su inclusión en otros proyectos.

Entonces, para incluir en otros proyectos, podemos modificar el principal src/index.php. Y dedicarlo por ejemplo a sólo incluir los demás del proyecto:

<?php

include 'Commons/IncludedClass.php';

Luego bastaría con incluir el .phar para usarlo con todo lo que tenga dentro:

Aquí más información en la documentación oficial para el que quiera seguir:
https://www.php.net/manual/es/phar.creating.php

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

 

© 2022 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.