COMPUTER AT ".$_SERVER['REMOTE_ADDR']." IS NOT AUTHORIZED TO ACCESS THIS PAGE"; exit(); } $zipfile = new zipfile; $basedir = "files"; $dirs = array(); $filelist = scandir($basedir); unset($filelist[array_search('.', $filelist)],$filelist[array_search('..', $filelist)]); filelist($filelist); echo "Directories:
"; foreach ($dirs as $dir) { echo "$dir
"; } echo "
Files:
"; foreach ($files as $file) { echo "$file
"; } foreach ($dirs as $dir) { $zipfile->add_dir("$dir"); } foreach ($files as $file) { $zipfile->add_file(file_get_contents("$file", "r"), "$file"); } $zipped = $zipfile->file(); $file = "download.zip"; $fp = fopen($file,"w"); fwrite($fp, $zipped); fclose($fp); echo "
Click to Download"; // // FUNCTIONS // /*function scandir($dir) { if ((is_dir($dir)) && ($dir != "./")) { if ($d = opendir($dir)) { while (($file = readdir($d)) !== FALSE) { if (($file == "..") || ($file == ".")) continue; $files[] = $file; } } } return $files; }*/ function filelist($filelist, $dir = "") { global $basedir, $files, $dirs; if ($dir == "") { $dir = "$basedir"; } foreach ($filelist as $k => $f) { if (($f == "..") || ($f == ".")) continue; if (is_dir("$dir/$f")) { unset ($filelist[$k]); $dirs[] = "$dir/$f"; $filelist2 = scandir("$dir/$f"); unset($filelist[array_search('.', $filelist)],$filelist[array_search('..', $filelist)]); filelist($filelist2, "$dir/$f"); continue; } $files[] = "$dir/$f"; } } class zipfile { var $datasec = array(); var $ctrl_dir = array(); var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $old_offset = 0; var $filecount = 0; function add_dir($name) { $name = str_replace("\\", "/", $name); $fr = "\x50\x4b\x03\x04"; $fr .= "\x0a\x00"; $fr .= "\x00\x00"; $fr .= "\x00\x00"; $fr .= "\x00\x00\x00\x00"; $fr .= pack("V",0); $fr .= pack("V",0); $fr .= pack("V",0); $fr .= pack("v", strlen($name) ); $fr .= pack("v", 0 ); $fr .= $name; $fr .= pack("V", 0); $fr .= pack("V", 0); $fr .= pack("V", 0); $this -> datasec[] = $fr; $new_offset = strlen(implode("", $this->datasec)); $cdrec = "\x50\x4b\x01\x02"; $cdrec .="\x00\x00"; $cdrec .="\x0a\x00"; $cdrec .="\x00\x00"; $cdrec .="\x00\x00"; $cdrec .="\x00\x00\x00\x00"; $cdrec .= pack("V",0); $cdrec .= pack("V",0); $cdrec .= pack("V",0); $cdrec .= pack("v", strlen($name) ); $cdrec .= pack("v", 0 ); $cdrec .= pack("v", 0 ); $cdrec .= pack("v", 0 ); $cdrec .= pack("v", 0 ); $ext = "\x00\x00\x10\x00"; $ext = "\xff\xff\xff\xff"; $cdrec .= pack("V", 16 ); $cdrec .= pack("V", $this -> old_offset ); $cdrec .= $name; $this -> ctrl_dir[] = $cdrec; $this -> old_offset = $new_offset; return; } function add_file($data, $name) { $name = str_replace("\\", "/", $name); $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $zdata = substr ($zdata, 2, -4); $c_len = strlen($zdata); $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; $fr .= "\x00\x00"; $fr .= "\x08\x00"; $fr .= "\x00\x00\x00\x00"; $fr .= pack("V",$crc); $fr .= pack("V",$c_len); $fr .= pack("V",$unc_len); $fr .= pack("v", strlen($name) ); $fr .= pack("v", 0 ); $fr .= $name; $fr .= $zdata; $fr .= pack("V",$crc); $fr .= pack("V",$c_len); $fr .= pack("V",$unc_len); $this -> datasec[] = $fr; $new_offset = strlen(implode("", $this->datasec)); $cdrec = "\x50\x4b\x01\x02"; $cdrec .="\x00\x00"; $cdrec .="\x14\x00"; $cdrec .="\x00\x00"; $cdrec .="\x08\x00"; $cdrec .="\x00\x00\x00\x00"; $cdrec .= pack("V",$crc); $cdrec .= pack("V",$c_len); $cdrec .= pack("V",$unc_len); $cdrec .= pack("v", strlen($name) ); $cdrec .= pack("v", 0 ); $cdrec .= pack("v", 0 ); $cdrec .= pack("v", 0 ); $cdrec .= pack("v", 0 ); $cdrec .= pack("V", 32 ); $cdrec .= pack("V", $this -> old_offset ); $this -> old_offset = $new_offset; $cdrec .= $name; $this -> ctrl_dir[] = $cdrec; } function file() { $data = implode("", $this -> datasec); $ctrldir = implode("", $this -> ctrl_dir); return $data. $ctrldir. $this -> eof_ctrl_dir. pack("v", sizeof($this -> ctrl_dir)). pack("v", sizeof($this -> ctrl_dir)). pack("V", strlen($ctrldir)). pack("V", strlen($data)). "\x00\x00"; } } ?>