ConFoo 2025

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://, ссылаясь на этот архив, вместо использования полного пути.

offset

Неиспользуемая переменная. Существует только для совместимости с PEAR-пакетом PHP_Archive.

Возвращаемые значения

Функция возвращает true в случае успешного выполнения или false, если возникла ошибка.

Ошибки

Выбрасывается исключение PharException, если вызывается из скрипта, в котором не обнаружено токена __HALT_COMPILER();, либо если файл недоступен для чтения.

Примеры

Пример #1 Пример использования Phar::mapPhar()

Phar::mapPhar следует использовать только внутри загрузчика заглушки Phar-архива. Используйте loadPhar для загрузки внешнего phar в память.

Простой загрузчик Phar, использующий mapPhar.

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

Смотрите также

  • Phar::loadPhar() - Загрузить phar-архив с псевдонимом

Добавить

Примечания пользователей 1 note

up
0
phofstetter at sensational dot ch
11 years ago
Be careful with mapPhar and opcode caches like opcache: They might cache files included by the symbolic name based on the symbolic name you give.

This becomes a problem when a server is hosting multiple different versions of a phar file all using the same symbolic name because then subsequent include()'s in the phar file might load an already cached file from another version of the phar file.

Instead, generate a unique name and use that in mapPhar and in subsequent include()'s

See for example https://github.com/zendtech/ZendOptimizerPlus/issues/115#issuecomment-25612769 for the issue in the opcache module.
To Top