PHP Conference Nagoya 2025

Phar::mount

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)

Phar::mountMontar un fichero o ruta externos en una ubicación virtual dentro de un archivo phar

Descripción

final public static Phar::mount(string $pharpath, string $externalpath): void

Al igual que con el concepto del sistema de ficheros de Unix de montar dispositivos externos en rutas dentro del árbol de directorios, Phar::mount() siempre se refiere a ficheros y directorios externos como si estuvieran dentro de un archivo phar. Esto perimte una potente abstracción tal como referirse a ficheros de configuración externos como si estuvieran dentro del archivo.

Parámetros

pharpath

La ruta interna a usar dentro del archivo phar como la ubicación de la ruta montada. Debe ser una ruta relativa dentro del archivo phar, y no debe existir.

externalpath

Una ruta o un URL a un fichero o directorio externo a montar dentro del archivo phar.

Valores devueltos

No devuelve nada. Lanza una excepción de tipo PharException en caso de fallo.

Errores/Excepciones

Lanza una excepción de tipo PharException si ocurrió algún problema al montar la ruta.

Ejemplos

Ejemplo #1 Un ejemplo de Phar::mount()

El siguiente ejemplo muestra el acceso a un fichero de configuración externo como si fuera una ruta dentro de un archivo phar.

Lo primero, el código dentro de un archivo phar:

<?php
$configuración
= simplexml_load_string(file_get_contents(
Phar::running(false) . '/config.xml'));
?>

Lo siguiente, el código externo utilizado para montar el fichero de configuración:

<?php
// primero se establece la asociación entre el config.xml abstracto
// y el real del disco
Phar::mount('phar://config.xml', '/home/example/config.xml');
// ahora ejecutar la aplicación
include '/ruta/a/archivo.phar';
?>

Otro método es poner el codigo de montaje dentro de la rutina de interoperabilidad del archivo phar. Aquí está un ejemplo de establecer un fichero de configuración predeterminado si no se especifica una configuración de usuario:

<?php
// primero se establece la asociación entre el config.xml abstracto
// y el real del disco
if (defined('EXTERNAL_CONFIG')) {
Phar::mount('config.xml', EXTERNAL_CONFIG);
if (
file_exists(__DIR__ . '/extra_config.xml')) {
Phar::mount('extra.xml', __DIR__ . '/extra_config.xml');
}
} else {
Phar::mount('config.xml', 'phar://' . __FILE__ . '/default_config.xml');
Phar::mount('extra.xml', 'phar://' . __FILE__ . '/default_extra.xml');
}
// ahora ejecutar la aplicación
include 'phar://' . __FILE__ . '/index.php';
__HALT_COMPILER();
?>

...y el código externo para cargar este archivo phar:

<?php
define
('EXTERNAL_CONFIG', '/inicio/ejemplo/config.xml');
// ahora ejecutar la aplicación
include '/ruta/a/archivo.phar';
?>

add a note

User Contributed Notes 1 note

up
1
espendiller at gmx dot de
14 years ago
i tested phar to generate a one file drupal installation.
as every cms, drupal put all uploaded files in a seperate folder (i.e. /sites).

i think the mount options here expected a file, i didnt get it to work on mounting a folder. is there any possibility to do that?

to generate a phar out of drupal7 with sqlite database

build.php
$phar = new Phar('drupal7.phar');
$phar->buildFromDirectory(dirname(__FILE__) . '/drupal-7.0-alpha5');
$phar->setStub("<?php
Phar
::interceptFileFuncs();
Phar::mount('sites/default/settings.php', __DIR__ . '/sites/default/settings.php');
Phar::mount('database.db', __DIR__ . '/database.db');
Phar::webPhar();
__HALT_COMPILER();
?>"
);

to call the phar iam using a .htacces file:
RewriteCond %{REQUEST_URI} !^/drupal.phar/
RewriteCond %{REQUEST_URI} !build.php
RewriteRule ^(.*)$ /drupal.phar/$1
To Top