CakeFest 2024: The Official CakePHP Conference

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

このstaticメソッドは、直接実行されたときや 他のスクリプトからインクルードされたときに Phar アーカイブのローダスタブ内で使用され、 phar を初期化します。

パラメータ

alias

このアーカイブを参照する際にフルパスのかわりに使用する、 phar:// 形式の URL。

offset

未使用。PEAR の PHP_Archive との互換性のために用意しています。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

PHP から直接コールされなかった場合、 ソースファイル内に __HALT_COMPILER(); トークンがなかった場合、 あるいはファイルを読み込みモードでオープンできなかった場合に PharException をスローします。

例1 Phar::mapPhar() の例

mapPhar は、phar のローダスタブ内でのみ使用します。 外部の phar をメモリに読み込むには、loadPhar を使用します。

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(
'Phar を初期化できません');
}
__HALT_COMPILER();

参考

  • Phar::loadPhar() - 任意の phar アーカイブを、エイリアスを指定して読み込む

add a note

User Contributed Notes 1 note

up
-1
phofstetter at sensational dot ch
10 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