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/monphar.phar', 0, 'monphar.phar');
?>
Un archivo Phar vacío será creado como /ruta/hacia/monphar.phar
,
o si /ruta/hacia/monphar.phar
ya existe, será abierto
de nuevo. El término monphar.phar
demuestra el concepto de un alias
que puede ser utilizado para referenciar /ruta/hacia/monphar.phar
en URLs como esto:
<?php
// estas dos llamadas a file_get_contents() son equivalentes si
// /ruta/hacia/monphar.phar tiene un alias explícito de "monphar.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/monphar.phar/algo.txt');
$f = file_get_contents('phar://monphar.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://monphar.phar/fichero.php
$p['fichero.php'] = $v
crea un nuevo fichero
(phar://monphar.phar/fichero.php
), o sobrescribe
un fichero existente dentro de monphar.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://monphar.phar/fichero.php
existe dentro de
monphar.phar
.
unset($p['fichero.php'])
elimina
phar://monphar.phar/fichero.php
de
monphar.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.