2024 年 PHP 大会日本站

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 归档的加载器存根中使用,以便在直接执行 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 条注释

0
phofstetter at sensational dot ch
11 年前
小心使用 mapPhar 和操作码缓存(如 opcache):它们可能会根据您提供的符号名称缓存包含的文件。

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

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

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