Usage
Reading and extraction
-
Open the file with automatic detection of a format by name or content. In case of successful, an
UnifiedArchive
object will be returned. In case of failure - null will be returned.require 'vendor/autoload.php'; use wapmorgan\UnifiedArchive\Abilities; use wapmorgan\UnifiedArchive\UnifiedArchive; $archive = UnifiedArchive::open('filename.rar'); // or $archive = UnifiedArchive::open('filename.zip', null, 'password'); // or $archive = UnifiedArchive::open('filename.tar', [ Abilities::EXTRACT_CONTENT, Abilities::STREAM_CONTENT, Abilities::APPEND, ]); // or $archive = UnifiedArchive::open('filename.7z', null, 'password');
-
Read the list of files of archive or check that file is in archive.
foreach($archive->getFiles() as $filename) { // ['file', 'file2', 'file3', ...] // ... } foreach($archive->getFiles('*.txt') as $filename) { // ['README.txt', 'doc.txt', ...] // ... } foreach ($archive as $filename) { // ... } if ($archive->hasFile('README.md')) { // some operations }
-
To get common information about concrete file use
getFileData()
method. This method returns anArchiveEntry
instance. To get raw file contents usegetFileContent()
method, to get stream for file usegetFileStream()
method.// file meta $file_data = $archive->getFileData('README.md')); // ArchiveEntry with file information echo 'Original size is ' . $file_data->uncompressedSize . PHP_EOL; echo 'Modification datetime is ' . date('r', $file_data->modificationTime) . PHP_EOL; // raw file content $file_content = $archive->getFileContent('README.md')); // string // pass stream to standard output fpassthru($archive->getFileStream('README.md'));
-
Unpack all archive or specific files on a disk -
extract()
.// to unpack all contents of archive to "output" folder $archive->extract(__DIR__ . '/output'); // to unpack specific files (README.md and composer.json) from archive to "output" folder $archive->extract(__DIR__ . '/output', ['README.md', 'composer.json']); // to unpack the "src" catalog with all content from archive into the "sources" catalog on a disk $archive->extract(__DIR__ . '/output', 'src/', true);
Archive modification
Only few archive formats support modification: (zip, 7z, tar) - it depends on low-level driver - see Formats page for details.
-
Delete files from archive
// Delete a single file $archive->delete('README.md'); // Delete multiple files $archive->delete(['README.md', 'MANIFEST.MF']); // Delete directory with full content $archive->delete('src/', true);
In case of success the number of successfully deleted files will be returned.
-
Add files to archive
// Add a catalog with all contents with full paths $archive->add('/var/log/'); // To add one file (will be stored as one file "/var/log/syslog") $archive->add('/var/log/syslog'); // To add some files or catalogs (all catalogs structure in paths will be kept) $archive->add([$directory, $file, $file2, ...]);
Archiving
Only few archive formats support modification: zip, 7z, tar (with restrictions).
To pack completely the catalog with all attached files and subdirectories in new archive:
# archive all folder content (with original full name)
UnifiedArchive::create('/var/log', 'Archive.zip');
# archive one file (with original full name)
UnifiedArchive::create('/var/log/syslog', 'Archive.zip');
# archive few files / folders
UnifiedArchive::create([$directory, $file, $file2, ...], 'Archive.zip');
Also, there is extended syntax for add()
and create()
:
UnifiedArchive::create([
'/var/www/original/name.log', // file **/var/www/original/name.log** will be store with its original name
'/var/www/site/runtime/logs', // directory contents will be stored as '/var/www/site/runtime/logs', with its original name
'insideArchiveName.log' => '/var/www/original/name.log', // file /var/www/original/name.log will be stored as insideArchiveName.log in archive root
'insideArchiveDir' => '/var/www/site/runtime/logs', // directory contents will be stored in insideArchiveDir dir inside archive
'' => ['/home/user1/docs', '/home/user2/docs'], // directories user1 and user2 docs contents will be merged and stored in archive root
], 'archive.zip');