## Utilizar los archivos Phar : las clases Phar y PharData

La clase Phar soporta la lectura y la manipulación de los archivos Phar, así como la iteración a través de la funcionalidad heredada de la clase RecursiveDirectoryIterator. Con el soporte de la interfaz ArrayAccess, los ficheros contenidos en un archivo Phar pueden ser accedidos como si fueran miembros de un array asociativo.

La clase PharData extiende la clase Phar, y permite la creación y modificación de archivos tar y zip no ejecutables (datos) incluso si `phar.readonly`=1 en php.ini. Por lo tanto, PharData::setAlias() y PharData::setStub() están ambas desactivadas ya que los conceptos de alias y contenedor están restringidos a los archivos phar ejecutables.

Es importante señalar que cuando un archivo Phar es creado, la ruta completa debe ser pasada al constructor del objeto Phar. Una ruta relativa impediría la inicialización.

Suponiendo que `$p` es un objeto inicializado de esta forma:

    <?php
    $p = new Phar('/ruta/hacia/miphar.phar', 0, 'miphar.phar');
    ?>

Un archivo Phar vacío será creado como `/ruta/hacia/miphar.phar`, o si `/ruta/hacia/miphar.phar` ya existe, será abierto de nuevo. El término `miphar.phar` demuestra el concepto de un alias que puede ser utilizado para referenciar `/ruta/hacia/miphar.phar` en URLs como esto:

    <?php
    // estas dos llamadas a file_get_contents() son equivalentes si
    // /ruta/hacia/miphar.phar tiene un alias explícito de "miphar.phar"
    // en su manifiesto, o si el phar fue inicializado con la instanciación de
    // el objeto Phar del ejemplo anterior
    $f = file_get_contents('phar:///ruta/hacia/miphar.phar/algo.txt');
    $f = file_get_contents('phar://miphar.phar/algo.txt');
    ?>

Con el objeto Phar `$p` recién creado, las siguientes cosas son posibles:

- `$a = $p['fichero.php']` crea una PharFileInfo que se refiere al contenido de `phar://miphar.phar/fichero.php`
- `$p['fichero.php'] = $v` crea un nuevo fichero (`phar://miphar.phar/fichero.php`), o sobrescribe un fichero existente dentro de `miphar.phar`. `$v` puede ser una cadena o un puntero a un fichero abierto, en cuyo caso el contenido del fichero será utilizado para crear el nuevo fichero. Tenga en cuenta que `$p->addFromString('fichero.php', $v)` es equivalente en términos de funcionalidad al caso anterior. También es posible añadir el contenido de un fichero con `$p->addFile('/ruta/hacia/fichero.php', 'fichero.php')`. Finalmente, un directorio vacío puede ser creado con `$p->addEmptyDir('vacío')`.
- `isset($p['fichero.php'])` puede ser utilizado para determinar si `phar://miphar.phar/fichero.php` existe dentro de `miphar.phar`.
- `unset($p['fichero.php'])` elimina `phar://miphar.phar/fichero.php` de `miphar.phar`.

Además, el objeto Phar es el único medio de acceder a los metadatos específicos de Phar, mediante Phar::getMetadata(), y es también el único medio de establecer o recuperar el contenedor del cargador del archivo Phar mediante Phar::getStub() y Phar::setStub(). Además, la compresión para el archivo Phar completo puede ser manipulada solo mediante la clase Phar.

La lista completa de funcionalidades del objeto Phar está documentada a continuación.

La clase PharFileInfo extiende la clase SplFileInfo y añade varios métodos para manipular los metadatos específicos de Phar de un fichero contenido en un Phar, tales como manipular la compresión o los metadatos.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open