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