|
アーカイブの変更
アーカイブの変更 – ファイルの削除や追加
導入
File_Archive バージョン 1.3
では、既存のアーカイブを編集するための関数が新たに追加されました。
これらの関数を使用すると、既存のアーカイブからファイルを削除したり
アーカイブにファイルを追加したりできるようになります。
File_Archive においては
ファイルシステムは単なるリーダー/ライターであり、
変更内容を "実際の" アーカイブ (実際のファイル)
に書き込んだりネストしたアーカイブ
(別のアーカイブの内部にあるアーカイブ)
に書き込んだりすることができます。
既存のアーカイブからのファイルの削除
ファイルをアーカイブから削除するには、
File_Archive クラスの以下の関数のいずれかを使用します。
-
指定した条件を満たすすべてのファイルを
$URL から削除します。
URL は File_Archive::read() 関数と同じ形式のものです。
ネストしたアーカイブも使用することができます。
-
removeFromSource
(
&$pred
, &$source
, $URL = null
)
remove と同じですが、デフォルトのファイルシステムリーダーではなく
$source を使用します。URL を省略した場合は
$source がアーカイブでなければなりません。
ファイルはここから削除されます。
-
removeDuplicates
(
$URL
)
この関数は、$URL で指定したアーカイブから
重複しているファイルを削除します。直近のファイルのみを残します。
ファイルの更新時刻が記録されていない場合は、
一番古いものとみなします。
ふたつのファイルの更新時刻が同じ場合は、
アーカイブ内での位置がもっとも上にあるもの
(通常は一番最後に追加したもの) を残します。
-
removeDuplicatesFromSource
(
&$source
, $URL = null
)
removeDuplicate() と同じですが、
デフォルトのファイルシステムリーダーではなく
$source を使用します。URL を省略した場合は
$source がアーカイブでなければなりません。
これらの関数は、アーカイブの圧縮解除を再帰的には行わないことに注意しましょう。
zip アーカイブからの jpg、gif そして bmp ファイルの削除
<?php require_once "File/Archive.php";
File_Archive::remove( File_Archive::predExtension( array('jpg', 'jpeg', 'bmp', 'gif') ), 'archive.zip' ); ?>
<?php require_once 'File/Archive.php';
File_Archive::remove( File_Archive::predMIME( array('image/*') ), 'archive.zip/data.tgz' ); ?>
アーカイブへのファイルの追加
ファイルをアーカイブに追加するには、
File_Archive クラスの以下の関数のいずれかを使用します。
-
appender
(
$URL
, $unique = null
, $type = null
, $stat = array()
)
URL で指定したアーカイブに追加します。
unique が true の場合は、アーカイブ内に
同じ名前のファイルがあればそれが削除されます。
null の場合はデフォルト設定 (変更するには
File_Archive::setOption('appendRemoveDuplicates', true/false))
を使用します (デフォルトは false です)。
アーカイブが存在しない場合は、指定したパラメータ
(型が指定されていない場合は URL の拡張子で判断します)
と stat 配列を使用して作成します。
-
appenderFromSource
(
&$source
, $URL = null
, $unique = null
, $type = null
, $stat = array()
)
appender と同じですが、デフォルトのファイルシステムリーダーではなく
$source を使用します。
これらの関数はいずれも、ライターを返します。
これは、先ほどのように extract 関数で使用することができます。
<?php require_once "File/Archive.php";
File_Archive::extract( File_Archive::read('folder'), File_Archive::appender('archive.zip') ); ?>
ライターではなく文字列を関数で使用した場合は、
File_Archive::appender()
で文字列が変換されることに注意しましょう。
したがって、先ほどの例はこのように書き直すこともできます。
<?php require_once "File/Archive.php";
File_Archive::extract( $src = 'folder', $dest= 'archive.zip' ); ?>
|
|
|