function dir($name) { $name = str_replace("\\", "/", $name); $name = ereg_replace("^/|^//", "", $name); $name = ereg_replace("/\$|//\$", "", $name); self::$last_dir = $name; $fr = "PK"; $fr .= "\n"; // ver needed to extract $fr .= ""; // gen purpose bit flag $fr .= ""; // compression method $fr .= ""; // last mod time and date $fr .= pack("V", 0); // crc32 $fr .= pack("V", 0); //compressed filesize $fr .= pack("V", 0); //uncompressed filesize $fr .= pack("v", strlen($name)); //length of pathname $fr .= pack("v", 0); //extra field length $fr .= $name; // end of "local file header" segment // no "file data" segment for path // "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 self::$datasec[] = $fr; $new_offset = strlen(implode("", self::$datasec)); // ext. file attributes mirrors MS-DOS directory attr byte, detailed // at http://support.microsoft.com/support/kb/articles/Q125/0/19.asp // now add to central record $cdrec = "PK"; $cdrec .= ""; // version made by $cdrec .= "\n"; // version needed to extract $cdrec .= ""; // gen purpose bit flag $cdrec .= ""; // compression method $cdrec .= ""; // last mod time & date $cdrec .= pack("V", 0); // crc32 $cdrec .= pack("V", 0); //compressed filesize $cdrec .= pack("V", 0); //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 $ext = ""; $ext = "����"; $cdrec .= pack("V", 16); //external file attributes - 'directory' bit set $cdrec .= pack("V", self::$old_offset); //relative offset of local header self::$old_offset = $new_offset; $cdrec .= $name; // optional extra field, file comment goes here // save to array self::$ctrl_dir[] = $cdrec; }