Viewing file: pax.php (4.41 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * File contains the ezcArchivePaxHeader class. * * @package Archive * @version 1.4.1 * @copyright Copyright (C) 2005-2010 eZ Systems AS. All rights reserved. * @license http://ez.no/licenses/new_bsd New BSD License * @access private */
/** * The ezcArchivePaxHeader class represents the Tar Pax header. * * ezcArchivePaxHeader can read the header from an ezcArchiveBlockFile or ezcArchiveEntry. * * The values from the headers are directly accessible via the class properties, and allows * reading and writing to specific header values. * * The entire header can be appended to an ezcArchiveBlockFile again or written to an ezcArchiveFileStructure. * Information may get lost, though. * * The header is the {@link ezcArchiveUstarHeader} with extra header information described on the following webpage: * {@link http://www.opengroup.org/onlinepubs/009695399/utilities/pax.html} * * Currently, only the extended header is supported. * * @package Archive * @version 1.4.1 * @access private */ class ezcArchivePaxHeader extends ezcArchiveUstarHeader { /** * Sets the property $name to $value. * * @throws ezcBasePropertyNotFoundException if the property does not exist. * @param string $name * @param mixed $value * @return void * @ignore */ public function __set( $name, $value ) { return parent::__set( $name, $value ); }
/** * Returns the value of the property $name. * * @throws ezcBasePropertyNotFoundException if the property does not exist. * @param string $name * @return mixed * @ignore */ public function __get( $name ) { return parent::__get( $name ); }
/** * Returns an array with pax header information. * * This method reads an extended set of data from the ezcArchiveBlockFile * $file and returns the values in an array. * * @param ezcArchiveBlockFile $file * @return array(string=>string) */ protected function getPaxDecodedHeader( ezcArchiveBlockFile $file ) { $result = array();
// next block has the info. $file->next();
$data = $file->current();
$offset = 0;
while ( strcmp( $data[$offset], "\0" ) != 0 ) { $space = strpos( $data, " ", $offset );
$length = substr( $data, $offset, $space - $offset ); $equalSign = strpos( $data, "=", $space );
$keyword = substr( $data, $space + 1, $equalSign - $space - 1 );
$value = rtrim( substr( $data, $equalSign + 1, $length - $equalSign - 1 ), "\n" );
$result[ $keyword ] = $value;
$offset += $length; }
return $result; }
/** * Creates and initializes a new header. * * If the ezcArchiveBlockFile $file is null then the header will be empty. * When an ezcArchiveBlockFile is given, the block position should point to the header block. * This header block will be read from the file and initialized in this class. * * @param ezcArchiveBlockFile $file */ public function __construct( ezcArchiveBlockFile $file = null ) { if ( !is_null( $file ) ) { parent::__construct( $file );
if ( $this->type == "x" ) { $paxArray = $this->getPaxDecodedHeader( $file ); $file->next(); }
parent::__construct( $file );
// Override some fields. foreach ( $paxArray as $key => $value ) { switch ( $key ) { case "gid": $this->groupId = $value; break; // For group IDs larger than 2097151.
case "linkpath": $this->linkName = $value; break; // Long link names?
case "path": $this->fileName = $value; $this->filePrefix = ""; break; // Really long file names.
case "size": $this->size = $value; break; // For files with a size greater than 8589934591 bytes.
case "uid": $this->userId = $value; break; // For user IDs larger than 2097151. } } } } } ?>
|