|
|
(Next) Readers |
||||
| |
|||||
|
|||||
One possible use case of File_Archive is to dynamically generate archives that contain pictures or videos from a gallery.
The choice of the file format is important if you want an efficient generation. Let's see what are the possibilities:
Pros: Generation very efficient, constant memory usage, no need to cache
Cons: No compression (but anyway images or video can hardly be compressed), not as widely used as Zip
We will focus on Tar and Zip generation, Tgz and Tbz are too CPU expensive for an "on the fly" archive generation.
<?php
require_once "File/Archive.php";
// $files is an array of path to the files that must be added to the archive
File_Archive::extract(
$files,
File_Archive::toArchive(
'myGallery.tar',
File_Archive::toOutput()
)
);
?>
The main advantages of the Zip generation is that it is not very expensive (due to the ability to cache the result), and widely used. I think 2 viable options are to generate uncompressed Zip archives (since you don't reduce a lot the size of picture and video files by compressing them) or to generate compressed Zip archive using a cache system.
On the fly creation of an uncompressed ZIP archive
<?php
require_once "File/Archive.php";
File_Archive::setOption('zipCompressionLevel', 0);
// $files is an array of path to the files that must be added to the archive
File_Archive::extract(
$files,
File_Archive::toArchive(
'myGallery.zip',
File_Archive::toOutput()
)
);
?>
On the fly creation of a compressed ZIP archive with a cache
<?php
require_once "File/Archive.php";
require_once "Cache/Lite.php";
// See the documentation of cache lite for the meaning of the $options array
// fileNameProtection must be left to the default true value
// automaticSerialization is not required and should be left to false
$options = array('cacheDir' => 'tmp');
File_Archive::setOption('cache', new Cache_Lite($options));
File_Archive::setOption('zipCompressionLevel', 9);
// $files is an array of path to the files that must be added to the archive
File_Archive::extract(
$files,
File_Archive::toArchive(
'myGallery.zip',
File_Archive::toOutput()
)
);
?>
Since generating a zip or a tar archive is pretty much the same code, you can write a simple code that lets the user choose what format he wants. The following code is taken from a code I really use in my gallery.
Custom archive
<?php
$allowedFormats = array('tar', 'zip');
if (!in_array($_GET['type'], $allowedFormats)) {
die('Type ' . htmlspecialchars($_GET['type']) . ' is either unknown or not allowed');
}
require_once "File/Archive.php";
File_Archive::setOption('zipCompressionLevel', 0);
/**
* I skipped the generation of the $files array since it really
* depends on you gallery and what files the user requires
*/
File_Archive::extract(
$files,
File_Archive::toArchive(
'myGallery.' . $_GET['type'],
File_Archive::toOutput()
)
);
?>
|
|
(Next) Readers |
||||||||
| |
|||||||||
|
|||||||||