PHP 8.5.0 Alpha 2 available for testing

Phar::mount

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

Phar::mountMonta un camino o un fichero externo a una ubicación virtual dentro del archivo phar

Descripción

final public static Phar::mount(string $pharPath, string $externalPath): void

Al igual que el concepto unix de montar un dispositivo externo en un punto de la jerarquía, Phar::mount() permite referirse a ficheros y directorios externos como si estuvieran dentro del archivo.

Parámetros

pharPath

El camino interno dentro del archivo phar a utilizar como punto de montaje. Debe ser un camino relativo dentro del archivo phar, y no debe existir ya.

externalPath

Un camino o URL hacia un fichero o directorio externo a montar dentro del archivo

Valores devueltos

No devuelve valor. Se lanza una excepción PharException en caso de fallo.

Errores/Excepciones

Se lanza una excepción PharException si se encuentra un problema durante el montaje.

Ejemplos

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

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

Primero, el código dentro del archivo phar:

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

Luego el código externo utilizado para montar el fichero de configuración:

<?php
// se comienza configurando la asociación entre el fichero config.xml abstracto
// y el que está en el disco
Phar::mount('phar://config.xml', '/home/example/config.xml');
// ahora se lanza la aplicación
include '/ruta/al/archivo.phar';
?>

Otro método es colocar el código de montaje dentro del contenedor de carga del archivo phar. Aquí hay un ejemplo para configurar un fichero de configuración por defecto si no se hace ninguna configuración de usuario:

<?php
// se comienza configurando la asociación entre el fichero config.xml abstracto
// y el que está en el 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 se lanza la aplicación
include 'phar://' . __FILE__ . '/index.php';
__HALT_COMPILER();
?>

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

<?php
define
('EXTERNAL_CONFIG', '/home/ejemplo/config.xml');
// ahora se lanza la aplicación
include '/ruta/al/archivo.phar';
?>

add a note

User Contributed Notes 1 note

up
1
espendiller at gmx dot de
15 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