リーダー

リーダー -- アーカイブへのファイルの取得

導入

リーダーは、ファイルやディレクトリの一覧を表すオブジェクトです。 これらのファイルは動的に作成することもできますし、 既存の物理ファイルを使用することもできます。 たとえば、ディレクトリ用のリーダークラスや File_Archive がサポートする各種アーカイブ形式を処理するためのリーダーがあります。 そして、それぞれが同じインターフェイスを持っています。

リーダーを作成するには File_Archive ファクトリを使用します。 重要な関数は read() 関数です。

read (string $url [, string $symbolic = null [, integer $uncompression = 0 [, integer $directoryDepth = -0]]])

この関数の URL が、読み込みたい内容を表します。

symbolic 属性は、 読み込んだファイルを後でどのように表示するかを表します。 $URL がディレクトリの場合は、$URL$symbolic ($symbolicnull の場合は '') で置き換えられます。 したがって、最初の例では、カレントディレクトリが 'Path/to/dir' であるかのようにファイルが表示されます。 デフォルトでは $symbolic は空なので、 Path/to/dir がファイル名から取り除かれます。 Path/to/dir$symbolic に設定すれば、フルパス Path/to/dir を保持できます。

$URL がファイルの場合は、ファイル名のみが保持されて $symbolic がそこに付け加えられます。 つまり、2 番目の例では、元ファイル名は file.txt となります。 シンボリック名 foo を指定すると、 これは foo/file.txt となります。

$uncompression パラメータは、 ツリーをファイルにパースする際に何個のファイルを伸長するかを表します。 デフォルトでは伸長は行いません。したがって、 File_Archive::read('archive.tar/inner/dir', 'inner/dir') を実行した際に archive.tar の中にもし archive.tar/inner/dir/file.tgz というファイルがあれば、 この第二のアーカイブはディレクトリではなくファイルとして扱われます。 $uncompression0 であるため、このアーカイブは伸長されないのです。 $uncompression1 にすると、 file.tgz はディレクトリとして扱われます。 しかし、このアーカイブの中のファイルは伸長されません。 $uncompression-1 にすると、 何段階でもすべてのファイルを伸長します。

注意 $URL で指定された圧縮ファイルについては、 $uncompression 変数の対象とはなりません。

$directoryDepth パラメータは、 そのリーダーが読み込むディレクトリ数の制限値を指定します。

マルチリーダー

マルチリーダーを使用すると、複数のソースをひとつにまとめることができます。 マルチリーダーを作成するには File_Archive::readMulti() 関数を使用します。

データリーダーの中身の読み込み

すべてのリーダーは、次のようなインターフェイスを提供しています。

リーダーを使用する関数

引数としてリーダーを受け取る File_Archive のすべての関数は、文字列および配列の両方の形式を受け付けます。 文字列は、File_Archive::read 関数を用いて自動的にリーダーとして解釈されます。 配列はマルチリーダーと解釈されます。

リーダーは参照渡しとなるので、生の文字列や配列ではなく変数を渡す必要があります。

したがって、先ほどの例は次のように書き換えることもできます。