Файл: mefos.ru/kolhoz/libzip.dat
Строк: 124
<?PHP
class createZip
{
public $compressedData = array();
public
$centralDirectory = array(); // central directory
public
$endOfCentralDirectory = "\x50\x4b\x05\x06\x00\x00\x00\x00";
//end of Central directory record
public $oldOffset = 0;
public
function addDirectory($directoryName)
{
$directoryName =
str_replace("\\", "/", $directoryName);
$feedArrayRow = "\x50\x4b\x03\x04";
$feedArrayRow .=
"\x0a\x00";
$feedArrayRow .=
"\x00\x00";
$feedArrayRow .=
"\x00\x00";
$feedArrayRow .=
"\x00\x00\x00\x00";
$feedArrayRow .=
pack("V",0);
$feedArrayRow .=
pack("V",0);
$feedArrayRow .=
pack("V",0);
$feedArrayRow .= pack("v",
strlen($directoryName) );
$feedArrayRow .= pack("v", 0
);
$feedArrayRow .= $directoryName;
$feedArrayRow .=
pack("V",0);
$feedArrayRow .= pack("V",0);
$feedArrayRow .= pack("V",0);
$this -> compressedData[] =
$feedArrayRow;
$newOffset = strlen(implode("",
$this->compressedData));
$addCentralRecord =
"\x50\x4b\x01\x02";
$addCentralRecord
.="\x00\x00";
$addCentralRecord
.="\x0a\x00";
$addCentralRecord
.="\x00\x00";
$addCentralRecord
.="\x00\x00";
$addCentralRecord
.="\x00\x00\x00\x00";
$addCentralRecord .=
pack("V",0);
$addCentralRecord .=
pack("V",0);
$addCentralRecord .=
pack("V",0);
$addCentralRecord .= pack("v",
strlen($directoryName) );
$addCentralRecord .= pack("v", 0
);
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .=
pack("v", 0 );
$addCentralRecord .= pack("v", 0
);
$ext = "\x00\x00\x10\x00";
$ext =
"\xff\xff\xff\xff";
$addCentralRecord .= pack("V", 16
);
$addCentralRecord .= pack("V", $this -> oldOffset
);
$this -> oldOffset = $newOffset;
$addCentralRecord .=
$directoryName;
$this -> centralDirectory[] =
$addCentralRecord;
}
public function addFile($data,
$directoryName)
{
$directoryName = str_replace("\\",
"/", $directoryName);
$feedArrayRow =
"\x50\x4b\x03\x04";
$feedArrayRow .=
"\x14\x00";
$feedArrayRow .=
"\x00\x00";
$feedArrayRow .=
"\x08\x00";
$feedArrayRow .=
"\x00\x00\x00\x00";
$uncompressedLength =
strlen($data);
$compression = crc32($data);
$gzCompressedData =
gzcompress($data);
$gzCompressedData = substr( substr($gzCompressedData,
0, strlen($gzCompressedData) - 4), 2);
$compressedLength =
strlen($gzCompressedData);
$feedArrayRow .=
pack("V",$compression);
$feedArrayRow .=
pack("V",$compressedLength);
$feedArrayRow .=
pack("V",$uncompressedLength);
$feedArrayRow .=
pack("v", strlen($directoryName) );
$feedArrayRow .=
pack("v", 0 );
$feedArrayRow .= $directoryName;
$feedArrayRow
.= $gzCompressedData;
$feedArrayRow .=
pack("V",$compression);
$feedArrayRow .=
pack("V",$compressedLength);
$feedArrayRow .=
pack("V",$uncompressedLength);
$this -> compressedData[] =
$feedArrayRow;
$newOffset = strlen(implode("",
$this->compressedData));
$addCentralRecord =
"\x50\x4b\x01\x02";
$addCentralRecord
.="\x00\x00";
$addCentralRecord
.="\x14\x00";
$addCentralRecord
.="\x00\x00";
$addCentralRecord
.="\x08\x00";
$addCentralRecord
.="\x00\x00\x00\x00";
$addCentralRecord .=
pack("V",$compression);
$addCentralRecord .=
pack("V",$compressedLength);
$addCentralRecord .=
pack("V",$uncompressedLength);
$addCentralRecord .=
pack("v", strlen($directoryName) );
$addCentralRecord .=
pack("v", 0 );
$addCentralRecord .= pack("v", 0
);
$addCentralRecord .= pack("v", 0 );
$addCentralRecord .=
pack("v", 0 );
$addCentralRecord .= pack("V", 32
);
$addCentralRecord .= pack("V", $this -> oldOffset
);
$this -> oldOffset = $newOffset;
$addCentralRecord .=
$directoryName;
$this -> centralDirectory[] = $addCentralRecord;
}
public function getZippedfile()
{
$data =
implode("", $this -> compressedData);
$controlDirectory =
implode("", $this ->
centralDirectory);
return
$data.
$controlDirectory.
$this ->
endOfCentralDirectory.
pack("v", sizeof($this ->
centralDirectory)).
pack("v", sizeof($this ->
centralDirectory)).
pack("V",
strlen($controlDirectory)).
pack("V",
strlen($data)).
"\x00\x00";
}
public function
forceDownload($archiveName)
{
$headerInfo =
'';
if(ini_get('zlib.output_compression')){ini_set('zlib.output_compression',
'Off');}
// Security checks
if($archiveName == ""){
echo
"<html><title>Public Photo Directory - Download
</title><body><BR><B>ERROR:</B> The download
file was NOT SPECIFIED.</body></html>";
exit;
}elseif( !
file_exists( $archiveName ) ) {
echo "<html><title>Public
Photo Directory - Download
</title><body><BR><B>ERROR:</B> File not
found.</body></html>";
exit;
}
header("Pragma:
public");
header("Expires:
0");
header("Cache-Control: must-revalidate, post-check=0,
pre-check=0");
header("Cache-Control:
private",false);
header("Content-Type:
application/zip");
header("Content-Disposition: attachment;
filename=".basename($archiveName).";"
);
header("Content-Transfer-Encoding:
binary");
header("Content-Length:
".filesize($archiveName));
readfile("$archiveName");
}
}
?>