Phar::mount

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

Phar::mount将外部路径或文件装载到 phar 归档内的虚拟位置

说明

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

类似于 Unix 文件系统中将外部设备装载到目录树中的路径的概念,Phar::mount() 允许将外部文件和目录视为它们在归档文件中一样。这允许强大的抽象,例如将外部配置文件视为它们在归档文件中一样。

参数

pharPath

phar 归档内用作装载路径位置的内部路径。这必须是 phar 归档内的相对路径,并且必须不存在。

externalPath

指向要装载到 phar 归档内的外部文件或目录的路径或 URL

返回值

无返回值。 PharException 在失败时抛出。

错误/异常

如果在装载路径时出现任何问题,则抛出 PharException

示例

示例 #1 Phar::mount() 示例

以下示例展示了如何访问外部配置文件,就好像它是在 phar 归档内的路径一样。

首先,phar 归档内的代码

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

接下来是用于装载配置文件的外部代码

<?php
// 首先建立抽象 config.xml 与磁盘上实际文件之间的关联
// 和实际的磁盘上的文件
Phar::mount('phar://config.xml', '/home/example/config.xml');
// 现在运行应用程序
include '/path/to/archive.phar';
?>

另一种方法是在 phar 归档的存根中放置装载代码。以下是设置默认配置文件的示例,如果未指定用户配置,则使用该示例

<?php
// 首先建立抽象 config.xml 与磁盘上实际文件之间的关联
// 和实际的磁盘上的文件
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');
}
// 现在运行应用程序
include 'phar://' . __FILE__ . '/index.php';
__HALT_COMPILER();
?>

…以及用于外部加载此 phar 归档的代码

<?php
define
('EXTERNAL_CONFIG', '/home/example/config.xml');
// 现在运行应用程序
include '/path/to/archive.phar';
?>

添加注释

用户贡献的注释 1 注释

espendiller at gmx dot de
14 年前
我测试了 phar 来生成一个文件 Drupal 安装程序。
与每个 CMS 一样,Drupal 将所有上传的文件放在一个单独的文件夹中(例如 /sites)。

我认为这里提供的装载选项期望一个文件,我没有让它在装载文件夹时起作用。有办法做到这一点吗?

要从 Drupal7 生成带有 SQLite 数据库的 phar

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();
?>"
);

为了调用 phar,我使用了一个 .htaccess 文件
RewriteCond %{REQUEST_URI} !^/drupal.phar/
RewriteCond %{REQUEST_URI} !build.php
RewriteRule ^(.*)$ /drupal.phar/$1
To Top