Phar::mapPhar

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

Phar::mapPhar读取当前执行的文件(一个 phar)并注册其清单

描述

final public static Phar::mapPhar(?string $alias = null, int $offset = 0): bool

此静态方法只能在 Phar 归档文件的加载器存根中使用,以便在直接执行归档文件或将其包含在其他脚本中时初始化该归档文件。

参数

alias

可以在 phar:// URL 中使用的别名,用于引用此归档文件,而不是其完整路径。

offset

未使用的变量,用于与 PEAR 的 PHP_Archive 保持兼容。

返回值

成功时返回 true,失败时返回 false

错误/异常

如果不在 PHP 执行中直接调用,如果当前源文件中没有找到 __HALT_COMPILER(); 标记,或者如果文件无法打开以供读取,则会抛出 PharException

示例

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

mapPhar 应该只在 phar 的加载器存根中使用。使用 loadPhar 将外部 phar 加载到内存中。

这是一个使用 mapPhar 的示例 Phar 加载器存根。

<?php
function __autoload($class)
{
include
'phar://me.phar/' . str_replace('_', '/', $class) . '.php';
}
try {
Phar::mapPhar('me.phar');
include
'phar://me.phar/startup.php';
} catch (
PharException $e) {
echo
$e->getMessage();
die(
'Cannot initialize Phar');
}
__HALT_COMPILER();

参见

添加注释

用户贡献的注释 1 个注释

phofstetter at sensational dot ch
10 年前
小心使用 mapPhar 和 opcode 缓存(如 opcache):它们可能会根据你提供的符号名称缓存由符号名称包含的文件。

当服务器托管多个不同版本的 phar 文件,所有这些文件都使用相同的符号名称时,这会成为一个问题,因为随后在 phar 文件中的 include() 可能会加载来自另一个版本的 phar 文件的已缓存文件。

相反,生成一个唯一的名称,并在 mapPhar 和后续的 include() 中使用该名称。

例如,请参见 https://github.com/zendtech/ZendOptimizerPlus/issues/115#issuecomment-25612769,了解 opcache 模块中的问题。
To Top