Readers

Readers – Récuperer les fichiers stocké dans une archive

Introduction

Un reader est un objet qui représente une liste de fichiers et répertoires. Ces fichiers peuvent être générés dynamiquement ou exister physiquement. Par exemple, il y a une classe reader pour un répertoire, ou pour chaque format d'archive gérable par File_Archive, et elles ont toute la même interface.

Pour créer un lecteur, vous devez utiliser le factory de File_Archive. La function la plus importante c'est la fonctionread():

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

Dans cette fonction l'url représente ce que vous voulez lire.

Génération de sources

<?php
require_once "File/Archive.php";

/*
Pour lire un répertoire, donnez simplement le nom
Par défaut le répertoire et ses sous-répertoires
seront parsé
(regardez $directoryDepth pour changer cela)
*/
$source File_Archive::read("Path/to/dir");

/*
Pour lire juste un fichier,
donnez simplement son nom de fichier
*/
$source File_Archive::read("Path/to/dir/file.txt");

/*
An archive will be considered as a directory if a slash follows
This example reads the directory and all the subdirectories of inner/dir
contained in archive Path/to/dir/archive.tar
This reads all the .txt files in the inner directory of the archive.tar
*/
$source File_Archive::read("Path/to/dir/archive.tar/inner/*.txt");

/*
If you want to uncompress the archive (read all its content)
Note: if you ommit the trailing /, the archive will be treated as a single file
*/
$source File_Archive::read("Path/to/dir/archive.tar/");
?>

The symbolic attribute says how the files read will be displayed for future use. Si $URL est un répertoire, $URL sera remplacé par $symbolic (ou '' si $symbolic est null). Ainsi, dans notre premier exemple, les fichires seront lu comme si le répertoire courrant était 'Path/to/dir': Since by default $symbolic is empty, Path/to/dir will be simply removed from the file. You may want to put Path/to/dir as $symbolic to keep the full path Path/to/dir.

Si $URL est un fichier, alors seul le nom de fichier sera pris, et $symbolic lui sera sera ajouté. Ensuite, dans notre second exemple, the source contains a file with symbolic name file.txt. If a symbolic name foo had been specified, the source would contain foo/file.txt.

The $uncompression parameter indicate how many files will be uncompressed while parsing the tree to files. Par défaut les fichiers ne sont pas décompressés. So, if you do File_Archive::read('archive.tar/inner/dir', 'inner/dir'), and if archive.tar contains a file called archive.tar/inner/dir/file.tgz, this second archive will appear as a file and not as a directory. It won't be uncompressed because $uncompression is 0. If $uncompression is set to 1, file.tgz would appear as a directory, but the files inside this archive would not be uncompressed. If $uncompression is set to -1, all the files would be uncompressed, regardless of the depth.

The compressed files that may appear in $URL are not taken into account by $uncompression variable.

Le paramètre $directoryDepth donne la limite du nombre de répertoire pouvant être lu par le reader.

Multi readers

En utilisant un multi reader, vous pouvez utiliser plusieurs sources comme étant unique. Vous pouvez créer un multi reader en utilisant la fonction File_Archive::readMulti().

Multi reader

<?php
//Ce reader contient le contenu d'un répertoire
//et d'une archive.tar
$source File_Archive::readMulti(
    array(
        
File_Archive::read('directory'),
        
File_Archive::read('archive.tar/')
    )
);
?>

Lire le contenu d'un reader de données

Chaque reader fourni l'interface suivante:

  • function next()

    Aller au fichier suivant dans la source. Retourne false quand on a atteint la fin de l'archive.

  • function getFilename()

    Retourne le nom de fichier de l'entrée courrante dans l'archive.

  • function getStat()

    Retourne les stat comme le fait la fonctionstat() . Cette fonction peut ne pas retourner un tableau complet, parfois c'est juste array().

  • function getDataFilename()

    For optimisation purposes: if the source is a physical file, this function returns the name of the file; otherwise it returns null.

  • function getData($length = -1)

    Lire des données dans la source. This function will return a string which size is determined by the smallest of

    • $length if $length >= 0

    • la fin du fichier.

    Si la fin de fichier est atteinte, la fonction va retourner null.

  • function skip($length)

    Equivalent to getData($length), but does not return any data. Depending on the data reader, this function can be far more efficient than getData().

  • function close()

    Should be called after having used the data reader (closes the file handles...). This function moves the object in the same state as it was before the first call to next(). After this call, you can iterate again on the data reader.

Listing the content of a data reader

<?php
$source
->close(); //Move back to the begining of the source

while($source->next()) {
    echo 
$source->getFilename() . "<br/>\n";
}
?>

Functions that use readers

All File_Archive functions that take a reader as an argument also accept strings and arrays. The strings will be automatically interpreted as a reader using File_Archive::read function. The arrays will be interpreted as a multi reader.

Since the readers are passed by reference, you will have to pass a variable and not the raw string or array.

It is thus possible to rewrite the previous example like that:

Multi reader

<?php
//This reader contains the content of directory and archive.tar
File_Archive::extract(
    array(
        
'directory',
        
'archive.tar/'
    
),
    
File_Archive::toArchive('test.zip')
);
?>
How to use File_Archive for a photo/video gallery (Previous) Sauvegarder une archive (Next)
Last updated: Sun, 29 Aug 2010 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.