File_Archive では、 ソースからファイルを選択する際にフィルタの概念を使用します。 フィルタとはリーダーの一種であり、 File_Archive::filter() 関数で作成することができます。 この関数には、述語を指定する必要があります。 述語を作成するには File_Archive::pred* 関数を使用します。
標準の論理述語は次のとおりです。
predTrue(): つねに true と評価されます
predFalse(): つねに false と評価されます
predAnd($p1, $p2, ...):
$p1 && $p2 && ...
と評価されます
predOr($p1, $p2, ...):
$p1 || $p2 || ...
と評価されます
predNot($p): !$p
と評価されます
ファイルのフィルタリング用に、その他の述語も用意されています。
predMinSize($size): サイズが
>= $size
(バイト単位) であるファイルのみを残します
predMinTime($time): 最終更新時刻が $time (unix タイムスタンプ) 以降であるファイルのみを残します
predMaxDepth($depth): 公開名のディレクトリ階層が
$depth
より少ないファイルのみを残します
predExtension($list): 指定した拡張子のファイルのみを残します。
$list
は拡張子の配列、あるいはカンマ区切り文字列となります
predEreg($ereg): 公開名が指定した正規表現にマッチするファイルのみを残します
predEregi($ereg): predEreg() と同じですが、大文字小文字を区別しません
predMIME($mimes): 指定した MIME タイプのファイルを選択します。 配列あるいは文字列で指定することができ、ワイルドカードを使用することも可能です。
フィルタの例
<?php
// パスあるいはファイル名の中に 'a' を含むすべてのファイルを
// tar アーカイブから取り出します
File_Archive::extract(
File_Archive::filter(
File_Archive::predEreg('a'),
File_Archive::read(
'archive.tar/',
'folder'
)
),
File_Archive::toFiles()
);
// ディレクトリを zip 圧縮します。サイズが 1MB より小さくて
// 直近の 1 時間以内に更新されているファイルのみを圧縮します
File_Archive::extract(
File_Archive::filter(
File_Archive::predAnd(
File_Archive::predNot(
File_Archive::predMinSize(1024 * 1024)
),
File_Archive::predMinTime(time()-3600)
),
File_Archive::read('directory')
),
File_Archive::toArchive(
'directory.zip',
File_Archive::toFiles()
)
);
?>