Phar アーカイブの使用法: Phar クラスおよび PharData クラス
Phar クラスは Phar アーカイブの読み込みや操作をサポートしています。
また RecursiveDirectoryIterator
クラスを継承しているため、順次処理も可能です。
ArrayAccess インターフェイスをサポートしているので、
Phar アーカイブ内のファイルに対して、
それがまるで連想配列であるかのようにアクセスすることができます。
PharData クラスは Phar
を継承したもので、実行可能でない (データ) tar アーカイブおよび
zip アーカイブなら php.ini で
phar.readonly
=1 であっても作成/変更できるようになります。
このクラスでは
PharData::setAlias と PharData::setStub
は使用不可能になっています。というのもエイリアスやスタブというのは
実行可能な phar アーカイブに独特の概念だからです。
注意すべき点は、Phar アーカイブを作成する際には
Phar のコンストラクタに
フルパスを渡さなければならないということです。
相対パスでは初期化に失敗します。
$p
が、次のように作成した Phar オブジェクトであるとしましょう。
空の Phar アーカイブが /path/to/myphar.phar
に作成されます。もし /path/to/myphar.phar
が既に存在する場合は、それを再度オープンします。
リテラル myphar.phar
は、エイリアスを表します。
これを用いると、URL で /path/to/myphar.phar
を参照する際に次のようにできます。
新しく作成した Phar オブジェクト
$p
に対して、次のような処理が可能となります。
-
$a = $p['file.php']
とすると、
phar://myphar.phar/file.php
の中身を参照する
PharFileInfo クラスが作成されます。
-
$p['file.php'] = $v
とすると、
myphar.phar
の中に新しいファイル
(phar://myphar.phar/file.php
)
を作成するか、あるいは同名のファイルを上書きします。
$v
には、文字列あるいはファイルポインタのいずれかを指定できます。
ファイルポインタを指定した場合は、その中身全体をもとにして新しいファイルを作成します。
$p->addFromString('file.php', $v)
は、
機能的に上と同じであることに注意しましょう。また、ファイルの中身を
$p->addFile('/path/to/file.php', 'file.php')
で追加することもできます。最後に、空のディレクトリを作成するには
$p->addEmptyDir('empty')
とします。
-
isset($p['file.php'])
とすると、phar://myphar.phar/file.php
が
myphar.phar
の中に存在するかどうかがわかります。
-
unset($p['file.php'])
とすると、
phar://myphar.phar/file.php
を
myphar.phar
から削除します。
さらに、Phar 固有のメタデータにアクセスするためには
Phar オブジェクトを使用することが唯一の方法となります。そのためには
Phar::getMetadata
を使用します。また、Phar アーカイブの PHP ローダスタブを設定したり取得したりするための唯一の方法が
Phar::getStub および
Phar::setStub です。
また、Phar アーカイブ全体の圧縮を行うには
Phar クラスが必要となります。
Phar オブジェクトの全機能の一覧については、以下で説明します。
PharFileInfo クラスは
SplFileInfo
クラスを継承しており、Phar 内のファイルについての Phar
固有の情報 (圧縮情報やメタデータなど) を扱うためのメソッドが追加されています。