ArchiveZip.class.php
gehe zur Dokumentation dieser Datei00001 <?php
00002
00003
00008 class ArchiveZip
00009 {
00010 var $datasec = array();
00011 var $ctrl_dir = array();
00012 var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
00013 var $old_offset = 0;
00014
00015
00016 function add_file($data, $name)
00017 {
00018 $name = str_replace("\\", "/", $name);
00019 $unc_len = strlen($data);
00020 $crc = crc32($data);
00021 $zdata = gzcompress($data);
00022 $zdate = substr ($zdata, 2, -4);
00023 $c_len = strlen($zdata);
00024
00025
00026
00027 $fr = "\x50\x4b\x03\x04";
00028 $fr .= "\x14\x00";
00029 $fr .= "\x00\x00";
00030 $fr .= "\x08\x00";
00031 $fr .= "\x00\x00\x00\x00";
00032 $fr .= pack("V",$crc);
00033 $fr .= pack("V",$c_len);
00034 $fr .= pack("V",$unc_len);
00035 $fr .= pack("v", strlen($name) );
00036 $fr .= pack("v", 0 );
00037 $fr .= $name;
00038 $fr .= $zdata;
00039 $fr .= pack("V",$crc);
00040 $fr .= pack("V",$c_len);
00041 $fr .= pack("V",$unc_len);
00042
00043 $this -> datasec[] = $fr;
00044
00045
00046
00047 $new_offset = strlen(implode("", $this->datasec));
00048
00049 $cdrec = "\x50\x4b\x01\x02";
00050 $cdrec .="\x00\x00";
00051 $cdrec .="\x14\x00";
00052 $cdrec .="\x00\x00";
00053 $cdrec .="\x08\x00";
00054 $cdrec .="\x00\x00\x00\x00";
00055 $cdrec .= pack("V",$crc);
00056 $cdrec .= pack("V",$c_len);
00057 $cdrec .= pack("V",$unc_len);
00058 $cdrec .= pack("v", strlen($name) );
00059 $cdrec .= pack("v", 0 );
00060 $cdrec .= pack("v", 0 );
00061 $cdrec .= pack("v", 0 );
00062 $cdrec .= pack("v", 0 );
00063 $cdrec .= pack("V", 32 );
00064 $cdrec .= pack("V", $this -> old_offset );
00065
00066 $this -> old_offset = $new_offset;
00067
00068 $cdrec .= $name;
00069 $this -> ctrl_dir[] = $cdrec;
00070 }
00071
00072
00073 function file() {
00074 $data = implode("", $this -> datasec);
00075 $ctrldir = implode("", $this -> ctrl_dir);
00076
00077 return
00078 $data.
00079 $ctrldir.
00080 $this -> eof_ctrl_dir.
00081 pack("v", sizeof($this -> ctrl_dir)).
00082 pack("v", sizeof($this -> ctrl_dir)).
00083 pack("V", strlen($ctrldir)).
00084 pack("V", strlen($data)).
00085 "\x00\x00";
00086 }
00087 }
00088
00089 ?>