<?php
try {
// 既存の phar をオープンします
$p = new Phar('coollibrary.phar', 0);
// Phar は SPL の DirectoryIterator クラスを継承しています
foreach (new RecursiveIteratorIterator($p) as $file) {
// $file は PharFileInfo クラスで、これは SplFileInfo を継承しています
echo $file->getFileName() . "\n";
echo file_get_contents($file->getPathName()) . "\n"; // 内容を表示します
}
if (isset($p['internal/file.php'])) {
var_dump($p['internal/file.php']->getMetadata());
}
// 新しい phar の作成 - php.ini で phar.readonly を 0 にしておく必要があります。
// phar.readonly は、セキュリティ上の理由によってデフォルトで有効になっています。
// 実際の運用サーバーでは、決して Phar を作成する必要はないはずで、
// 単に実行できるだけでよいはずです。
if (Phar::canWrite()) {
$p = new Phar('newphar.tar.phar', 0, 'newphar.tar.phar');
// tar 形式の phar アーカイブを作成し、gzip で圧縮します (.tar.gz)
$p = $p->convertToExecutable(Phar::TAR, Phar::GZ);
// トランザクションの作成 - newphar.phar には、
// stopBuffering() がコールされるまで (一時的なストレージが必要となっても) なにも書き込まれません
$p->startBuffering();
// すべてのファイルを /path/to/project に追加し、プレフィックス "project" で phar に保存します
$p->buildFromIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/path/to/project')), '/path/to/');
// 配列形式の API で新しいファイルを追加します
$p['file1.txt'] = 'Information';
$fp = fopen('hugefile.dat', 'rb');
// すべてのデータをストリームからコピーします
$p['data/hugefile.dat'] = $fp;
if (Phar::canCompress(Phar::GZ)) {
$p['data/hugefile.dat']->compress(Phar::GZ);
}
$p['images/wow.jpg'] = file_get_contents('images/wow.jpg');
// ファイルのメタデータには任意の値を保存できます
$p['images/wow.jpg']->setMetadata(array('mime-type' => 'image/jpeg'));
$p['index.php'] = file_get_contents('index.php');
$p->setMetadata(array('bootstrap' => 'index.php'));
// phar アーカイブをディスクに保存します
$p->stopBuffering();
}
} catch (Exception $e) {
echo 'Phar をオープンできません: ', $e;
}
?>