. */ class Tar { private $outdata; public function Tar() { $this->outdata = ""; } public function add($data, $filename, $timestamp) { $filesize = strlen($data); $block_len = 512*ceil($filesize/512)-$filesize; $this->outdata .= $this->build_header($data, $filename, $timestamp); $this->outdata .= $data; $this->outdata .= pack("a".$block_len, ""); } public function close() { return $this->outdata; } private function build_header($data, $filename, $timestamp="") { if( strlen($timestamp)<1 ) $timestamp = time(); if( strlen($filename)>99 ) die('Error'); $header = pack("a100a8a8a8a12A12a8a1a100a255", $filename, sprintf("%6s ", decoct(33188)), sprintf("%6s ", decoct(1000)), sprintf("%6s ", decoct(1000)), sprintf("%11s ",decoct(strlen($data))), sprintf("%11s", decoct($timestamp)), sprintf("%8s", " "), "0", "", "" ); $checksum = 0; for( $i=0; $i<512; $i++ ) { $checksum += ord(substr($header,$i,1)); } $checksum_data = pack( "a8", sprintf("%6s ", decoct($checksum)) ); for( $i=0, $j=148; $i<7; $i++, $j++ ) $header[$j] = $checksum_data[$i]; return $header; } } ?>