= $NAME_FIELD_SIZE) return FALSE; $header = $file; $header = str_pad($header, $NAME_FIELD_SIZE, "\0"); if (!$stat) return FALSE; // mode $mode = decoct($stat['mode']); $header .= str_pad($mode, $MODE_FIELD_SIZE-1, "0", STR_PAD_LEFT)."\0"; // uid $uid = decoct($stat['uid']); $header .= str_pad($uid, $UID_FIELD_SIZE-1, "0", STR_PAD_LEFT)."\0"; // gid $gid = decoct($stat['gid']); $header .= str_pad($gid, $GID_FIELD_SIZE-1, "0", STR_PAD_LEFT)."\0"; // size $size = decoct($stat['size']); $header .= str_pad($size, $SIZE_FIELD_SIZE-1, "0", STR_PAD_LEFT)."\0"; // mtime $mtime = decoct($stat['mtime']); $header .= str_pad($mtime, $MTIME_FIELD_SIZE-1, "0", STR_PAD_LEFT)."\0"; // save the part of the header which is before the checksum $header_before_checksum = $header; $header = ""; // chksum : zero (will be set later) // typeflag $header .= "0"; // linkname $header .= str_pad("", $LINKNAME_FIELD_SIZE, "\0"); // magic $header .= "ustar \0"; // uname $header .= str_pad("", $UNAME_FIELD_SIZE, "\0"); // gname $header .= str_pad("", $GNAME_FIELD_SIZE, "\0"); // devmajor $header .= str_pad("", $DEV_FIELD_SIZE, "\0"); // devminor $header .= str_pad("", $DEV_FIELD_SIZE, "\0"); // prefix : nothing $checksum = do_checksum("$header_before_checksum"." "."$header"); $checksum = decoct($checksum); $checksum = str_pad($checksum, $CHKSUM_FIELD_SIZE-1, "0", STR_PAD_LEFT)."\0"; $header = $header_before_checksum.$checksum.$header; return str_pad($header, BLOCK_SIZE, "\0"); } function make_tar_body($file) { $body = file_get_contents($file); $number_of_blocks = floor(strlen($body) / BLOCK_SIZE); $number_of_blocks ++; $body = str_pad($body, $number_of_blocks*BLOCK_SIZE, "\0"); return $body; } function do_checksum($str) { $l = strlen($str); $sum = 0; for ($i=0; $i<$l; $i++) { $sum += ord($str[$i]); } return $sum; } ?>