Phar->commit
(no version information, might be only in CVS)
Phar->commit -- Phar の変更トランザクションを終了し、Phar アーカイブをディスクに書き込む
説明
void
Phar->commit ( void )
技術的には必須ではありませんが、begin()
メソッドを使用すると、大量のファイルを含む Phar
アーカイブの作成や変更が非常に高速になります。
通常は、Phar アーカイブ内のファイルが作成あるいは変更されるたびに
Phar アーカイブ全体を改めて作り直します。
これによって、アーカイブが常に最新の状態となります。
しかし、単に新しい Phar アーカイブを作りたいときや
アーカイブ全体を一度に書き出したいときなどは、これは不要です。
同様に、いくつかの変更を行うときに、
すべての変更がうまくいったことを確認してから実際にディスクに書き込みたい
ということもあるでしょう。
これは、ちょうどデータベースのトランザクションの概念と同じようなものです。
begin()/commit()
の両メソッドが、このような場合のために用意されています。
Phar のトランザクションは、アーカイブ単位で管理されます。
Phar アーカイブ foo.phar
上のトランザクションが、Phar アーカイブ bar.phar
に影響をおよぼすことはありません。
エラー / 例外
変更をディスクに書き出す際に何らかの問題が発生した場合は
PharException がスローされます。
例
例 1. Phar->commit() の例
<?php $p = new Phar(dirname(__FILE__) . '/brandnewphar.phar', 0, 'brandnewphar.phar'); $p['file1.txt'] = 'hi'; $p->commit(); var_dump($p->getStub()); $p->setStub("<?php function __autoload(\$class) { include 'phar://' . str_replace('_', '/', \$class); } Phar::mapPhar('brandnewphar.phar'); include 'phar://brandnewphar.phar/startup.php'; __HALT_COMPILER();"); $p->commit(); var_dump($p->getStub()); ?>
|
上の例の出力は以下となります。 string(24) "<?php __HALT_COMPILER();"
string(195) "<?php
function __autoload($class)
{
include 'phar://' . str_replace('_', '/', $class);
}
Phar::mapPhar('brandnewphar.phar');
include 'phar://brandnewphar.phar/startup.php';
__HALT_COMPILER();" |
|