$dtime = dechex($this->unix2DosTime($time)); $hexdtime = "x" . $dtime[6] . $dtime[7] . "x" . $dtime[4] . $dtime[5] . "x" . $dtime[2] . $dtime[3] . "x" . $dtime[0] . $dtime[1]; eval("$hexdtime = "" . $hexdtime . "";");
$fr = "x50x4bx03x04"; $fr .= "x14x00"; // ver needed to extract $fr .= "x00x00"; // gen purpose bit flag $fr .= "x08x00"; // compression method $fr .= $hexdtime; // last mod time and date
// "data descriptor" segment (optional but necessary if archive is not // served as file) $fr .= pack("V", $crc); // crc32 $fr .= pack("V", $c_len); // compressed filesize $fr .= pack("V", $unc_len); // uncompressed filesize
// add this entry to array $this -> datasec[] = $fr; $new_offset = strlen(implode("", $this->datasec));
// now add to central directory record $cdrec = "x50x4bx01x02"; $cdrec .= "x00x00"; // version made by $cdrec .= "x14x00"; // version needed to extract $cdrec .= "x00x00"; // gen purpose bit flag $cdrec .= "x08x00"; // compression method $cdrec .= $hexdtime; // last mod time & date $cdrec .= pack("V", $crc); // crc32 $cdrec .= pack("V", $c_len); // compressed filesize $cdrec .= pack("V", $unc_len); // uncompressed filesize $cdrec .= pack("v", strlen($name) ); // length of filename $cdrec .= pack("v", 0 ); // extra field length $cdrec .= pack("v", 0 ); // file comment length $cdrec .= pack("v", 0 ); // disk number start $cdrec .= pack("v", 0 ); // internal file attributes $cdrec .= pack("V", 32 ); // external file attributes - "archive" bit set
$cdrec .= pack("V", $this -> old_offset ); // relative offset of local header $this -> old_offset = $new_offset;
$cdrec .= $name;
// optional extra field, file comment goes here // save to central directory $this -> ctrl_dir[] = $cdrec; } function filezip(){ $data = implode("", $this -> datasec); $ctrldir = implode("", $this -> ctrl_dir);
return $data . $ctrldir . $this -> eof_ctrl_dir . pack("v", sizeof($this -> ctrl_dir)) . // total # of entries "on this disk" pack("v", sizeof($this -> ctrl_dir)) . // total # of entries overall pack("V", strlen($ctrldir)) . // size of central dir pack("V", strlen($data)) . // offset to start of central dir "x00x00"; // .zip file comment length } } ?>