Phar->begin

(no version information, might be only in CVS)

Phar->begin -- Phar の変更トランザクションを開始する

説明

void Phar->begin ( void )

技術的には必須ではありませんが、begin() メソッドを使用すると、大量のファイルを含む Phar アーカイブの作成や変更が非常に高速になります。 通常は、Phar アーカイブ内のファイルが作成あるいは変更されるたびに Phar アーカイブ全体を改めて作り直します。 これによって、アーカイブが常に最新の状態となります。

しかし、単に新しい Phar アーカイブを作りたいときや アーカイブ全体を一度に書き出したいときなどは、これは不要です。 同様に、いくつかの変更を行うときに、 すべての変更がうまくいったことを確認してから実際にディスクに書き込みたい ということもあるでしょう。 これは、ちょうどデータベースのトランザクションの概念と同じようなものです。 begin()/commit() の両メソッドが、このような場合のために用意されています。

Phar のトランザクションは、アーカイブ単位で管理されます。 Phar アーカイブ foo.phar 上のトランザクションが、Phar アーカイブ bar.phar に影響をおよぼすことはありません。

例 1. Phar->begin() の例

<?php
// 確実に消しておきます
@unlink('brandnewphar.phar');
try {
    
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar');
}
catch (Exception $e) {
    echo
'phar を作成できません:', $e;
}
echo
'新しい phar のエントリ数は ' . $p->count() . " です\n";
$p->begin();
$p['file.txt'] = 'hi';
$p['file2.txt'] = 'there';
$p['file2.txt']->setCompressedGZ();
$p['file3.txt'] = 'babyface';
$p['file3.txt']->setMetaData(42);
$p->setStub("<?php
function __autoload($class)
{
    include 'phar://' . str_replace('_', '/', $class);
}
Phar::mapPhar('myphar.phar');
include 'phar://myphar.phar/startup.php';
__HALT_COMPILER();"
);
$p->commit();
?>

参考

Phar->commit()
Phar->getStub()