| eZ publish Enterprise Component: Archive, Design |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Introduction |
| ============ |
| |
| Purpose of the Archive package |
| ------------------------------ |
| |
| The archive package takes care of the different archive and compression |
| formats and handles them universally. Archive provides the basic |
| implementation to extract and create the whole or a part of the archive. |
| |
| Some research will be done during the design phase whether the PHP stream |
| wrapper classes can be used to provide a common interface. |
| |
| |
| Current implementation |
| ---------------------- |
| |
| The current implementation implements only the Tar archive. The implemented |
| algorithm doesn't support many (or if possible all) Tar archive-types. |
| Furthermore, a clean up of the design and code will be done to provide a |
| better interface. |
| |
| |
| Requirements |
| ============ |
| |
| Design goals |
| ------------ |
| |
| The Archive package should (at least) provide a low-level interface where |
| simply (a part of) the files can be extracted to a specific location or an |
| archive can be extended with new files. On top of this interface a part of a |
| virtual file system can be build. In another package? |
| |
| |
| Design |
| ====== |
| |
| Introduction |
| ------------ |
| |
| In the design we make a distinction between archivers and compression |
| libraries. If a format supports both, it is categorized as an archiver. |
| |
| The compression libraries, if not available in PHP, will be implemented as a |
| stream. The stream functions from PHP have a different resource handler for |
| files and directories. Therefore they are hard to combine and makes it |
| impractical to use them in an archive (which is streamed). |
| |
| |
| Supported file formats |
| ---------------------- |
| |
| Archivers: |
| Tar, is a pure archive format. |
| Zip, is an archive plus compression algorithm. |
| |
| Compressions: |
| gzip, implemented as stream in PHP (zlib). |
| bzip2, implemented as stream in PHP (bzip2). |
| |
| |
| Since the most common compression formats are already available in PHP, we can |
| simple use the stream functions to access them. (And use them directly in the |
| archiver). |
| |