La clase Phar admite la lectura y la manipulación de archivos Phar, así como la iteración a través de la funcionalidad de la clase RecursiveDirectoryIterator. Con el soporte para la interfaz ArrayAccess, se puede acceder a los ficheros que están dentro de un archivo Phar como si fueran parte de un array asociativo.
La clase PharData extiende la clase Phar, y
permite crear y modificar 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 desactivados ya que los conceptos de alias y rutina de interoperabilidad (stub) son válidos únicamente para archivos
phar ejecutables.
Observe que al crear un archivo Phar, se debería pasar la ruta completa al contructor del objeto de la clase Phar. Las rutas relativas causarán un error en la inicialización.
Asumiendo que $p
es un objeto de la clase Phar inicializado como sigue:
<?php
$p = new Phar('/ruta/a/miphar.phar', 0, 'miphar.phar');
?>
se creará un archivo Phar vacío en /ruta/a/miphar.phar
,
o si /ruta/a/miphar.phar
ya existe, se abrirá
de nuevo. El literal miphar.phar
demuestra el concepto de un alias
que puede ser usado para referenciar a /ruta/a/miphar.phar
en URLs, como en:
<?php
// estas dos llamadas a file_get_contents() son equivalentes si
// /ruta/a/miphar.phar tiene un alias especificado como "miphar.phar"
// en su manifiesto, o si el phar fue inicializado con la
// configuración del objeto Phar del ejemplo anterior
$f = file_get_contents('phar:///ruta/a/miphar.phar/loquesea.txt');
$f = file_get_contents('phar://miphar.phar/loquesea.txt');
?>
Con el recién creado objeto $p
de la clase Phar,
lo siguiente es posible:
$a = $p['fichero.php']
creates a PharFileInfo
class that refers to the contents of 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 de fichero abierto, en cuyo caso todo el
contenido del fichero se usará para crear el nuevo fichero. Observe que
$p->addFromString('fichero.php', $v)
es funcionalmente
equivalente a lo de más arriba. También es posible añadir el contenido de un fichero
con $p->addFile('/path/to/fichero.php', 'fichero.php')
.
Por ultimo, se puede crear un directorio vacío con
$p->addEmptyDir('vacio')
.
isset($p['fichero.php'])
se puede usar para determinar
si phar://miphar.phar/fichero.php
existe dentro de
miphar.phar
.
unset($p['fichero.php'])
borra
phar://miphar.phar/fichero.php
de
miphar.phar
.
Además, el objeto de la clase Phar es la única manera de acceder a metainformación específica de Phar, a través de Phar::getMetadata(), y la única manera de establecer o recuperar una rutina de interoperabilidad (stub) del cargador de PHP de un archivo Phar a través de Phar::getStub() y Phar::setStub(). Además, la compresión del archivo completo Phar de una vez, sólo puede ser manipulada utilizando la clase Phar.
La lista completa de la funcionalidad de objetos de la clase Phar está documentada más adelante.
La clase PharFileInfo extiende a la clase SplFileInfo, y añade varios métodos para manipular detalles específicos de Phar de un fichero contenido en un Phar, tales como la manipulación de la compresión y la metainformación.