if ($_SERVER['REMOTE_ADDR'] != "24.74.142.112")
{
echo "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";
}
}
?>