The following examples demonstrate how to use the Archive component.
The Tar format has more than one standard. The most common formats are:
The Archive component can extract from any of these formats. Appending entries
to the archive is only available for the Unix V7 and Ustar formats.
Extracting entries can occur in two ways:
An ezcArchive object can be used like an iterator. After opening the file, it
points to the first entry. The iterator can be moved using ezcArchive->next()
and ezcArchive->rewind() to move to the next entry or go back to the first
entry.
The next example demonstrates how to extract an entire archive file-by-file:
- <?php
-
- require_once 'tutorial_autoload.php';
- date_default_timezone_set( "UTC" );
-
- // Open the gzipped TAR archive.
- $archive = ezcArchive::open( "compress.zlib:///tmp/my_archive.tar.gz" );
-
- while( $archive->valid() )
- {
- // Returns the current entry (ezcArchiveEntry).
- $entry = $archive->current();
-
- // ezcArchiveEntry has an __toString() method.
- echo $entry, "\n";
-
- // Extract the current archive entry to /tmp/target_location/
- $archive->extractCurrent( "/tmp/target_location/" );
-
- $archive->next();
- }
-
- ?>
First, tutorial_autoload.php is included. The included file loads the
correct php files for the Archive package. Hereafter the time zone is set to
"UTC". The Archive component uses some date functions and might therefore
produce warnings if the time zone is not specified.
The gzipped Tar archive is opened using the zlib stream. The while() method
iterates over each entry, showing the name and extracting the entry itself.
The Archive component extends from the PHP Iterator class, thus the above
example can be rewritten as follows:
- <?php
- require_once 'tutorial_autoload.php';
-
- $archive = ezcArchive::open( "compress.zlib:///tmp/my_archive.tar.gz" );
-
- // The foreach method calls internally the iterator methods.
- foreach( $archive as $entry )
- {
- echo $entry, "\n";
-
- $archive->extractCurrent( "/tmp/target_location/" );
- }
- ?>
Please by aware that by default archive files are opened in read/write mode. In
order to prevent that, you can set an option to open the archive in read-only
mode. This also prevents the modify and create timestamps of the file to be
preserved. The following example shows that:
- <?php
- require_once 'tutorial_autoload.php';
-
- $options = new ezcArchiveOptions( array( 'readOnly' => true ) );
- $archive = ezcArchive::open(
- "compress.zlib:///tmp/my_archive.tar.gz", null, $options );
-
- // The foreach method calls internally the iterator methods.
- foreach( $archive as $entry )
- {
- echo $entry, "\n";
-
- $archive->extractCurrent( "/tmp/target_location/" );
- }
- ?>
Unfortunately, it is not yet possible to directly append files to a gzipped or
bzipped Tar archive. The ZLib and BZip2 libraries do not support opening a file
for reading and writing.
ezcArchive has two methods for appending files:
To replace the first file as well, use ezcArchive->truncate(). The
next example replaces all entries from an existing Zip archive with the files
file1.txt and file2.txt:
- <?php
-
- require_once 'tutorial_autoload.php';
- date_default_timezone_set( "UTC" );
-
- $archive = ezcArchive::open( "/tmp/my_archive.zip" );
- $archive->truncate();
-
- $filesToAppend[] = "/tmp/file1.txt";
- $filesToAppend[] = "/tmp/file2.txt";
-
- // The second parameter specifies prefix. The prefix is normally not included
- // in the archive.
- $archive->appendToCurrent( $filesToAppend, "/tmp/" );
-
- ?>