XCL Web Application Platform
2.5.0
The XoopsCube Legacy Project
📘
Loading...
Searching...
No Matches
class.zipfile.php
1
<?php
15
16
class
zipfile
17
{
23
public
$datasec
= [];
24
30
public
$ctrl_dir
= [];
31
37
public
$eof_ctrl_dir
=
"\x50\x4b\x05\x06\x00\x00\x00\x00"
;
38
44
public
$old_offset
= 0;
45
46
57
public
function
unix2DosTime
($unixtime = 0)
58
{
59
$timearray = (0 == $unixtime) ? getdate() : getdate($unixtime);
60
61
if
($timearray[
'year'
] < 1980) {
62
$timearray[
'year'
] = 1980;
63
$timearray[
'mon'
] = 1;
64
$timearray[
'mday'
] = 1;
65
$timearray[
'hours'
] = 0;
66
$timearray[
'minutes'
] = 0;
67
$timearray[
'seconds'
] = 0;
68
}
// end if
69
70
return
(($timearray[
'year'
] - 1980) << 25) | ($timearray[
'mon'
] << 21) | ($timearray[
'mday'
] << 16) |
71
($timearray[
'hours'
] << 11) | ($timearray[
'minutes'
] << 5) | ($timearray[
'seconds'
] >> 1);
72
}
// end of the 'unix2DosTime()' method
73
74
84
public
function
addFile
($data, $name, $time = 0)
85
{
86
$name = str_replace(
'\\'
,
'/'
, $name);
87
88
$dtime = dechex($this->
unix2DosTime
($time));
89
$hexdtime =
'\x'
. $dtime[6] . $dtime[7]
90
.
'\x'
. $dtime[4] . $dtime[5]
91
.
'\x'
. $dtime[2] . $dtime[3]
92
.
'\x'
. $dtime[0] . $dtime[1];
93
eval(
'$hexdtime = \''
. $hexdtime .
'\'
;
');
94
95
$fr = "\x50\x4b\x03\x04";
96
$fr .= "\x14\x00"; // ver needed to extract
97
$fr .= "\x00\x00"; // gen purpose bit flag
98
$fr .= "\x08\x00"; // compression method
99
$fr .= $hexdtime; // last mod time and date
100
101
// "local file header" segment
102
$unc_len = strlen($data);
103
$crc = crc32($data);
104
$zdata = gzcompress($data);
105
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
106
$c_len = strlen($zdata);
107
$fr .= pack('
V
', $crc); // crc32
108
$fr .= pack('
V
', $c_len); // compressed filesize
109
$fr .= pack('
V
', $unc_len); // uncompressed filesize
110
$fr .= pack('
v
', strlen($name)); // length of filename
111
$fr .= pack('
v
', 0); // extra field length
112
$fr .= $name;
113
114
// "file data" segment
115
$fr .= $zdata;
116
117
// "data descriptor" segment (optional but necessary if archive is not
118
// served as file)
119
$fr .= pack('
V
', $crc); // crc32
120
$fr .= pack('
V
', $c_len); // compressed filesize
121
$fr .= pack('
V
', $unc_len); // uncompressed filesize
122
123
// add this entry to array
124
$this -> datasec[] = $fr;
125
$new_offset = strlen(implode('
', $this->datasec));
126
127
// now add to central directory record
128
$cdrec = "\x50\x4b\x01\x02";
129
$cdrec .= "\x00\x00"; // version made by
130
$cdrec .= "\x14\x00"; // version needed to extract
131
$cdrec .= "\x00\x00"; // gen purpose bit flag
132
$cdrec .= "\x08\x00"; // compression method
133
$cdrec .= $hexdtime; // last mod time & date
134
$cdrec .= pack('
V
', $crc); // crc32
135
$cdrec .= pack('
V
', $c_len); // compressed filesize
136
$cdrec .= pack('
V
', $unc_len); // uncompressed filesize
137
$cdrec .= pack('
v
', strlen($name)); // length of filename
138
$cdrec .= pack('
v
', 0); // extra field length
139
$cdrec .= pack('
v
', 0); // file comment length
140
$cdrec .= pack('
v
', 0); // disk number start
141
$cdrec .= pack('
v
', 0); // internal file attributes
142
$cdrec .= pack('
V
', 32); // external file attributes - '
archive
' bit set
143
144
$cdrec .= pack('
V
', $this -> old_offset); // relative offset of local header
145
$this -> old_offset = $new_offset;
146
147
$cdrec .= $name;
148
149
// optional extra field, file comment goes here
150
// save to central directory
151
$this -> ctrl_dir[] = $cdrec;
152
} // end of the '
addFile
()
' method
153
154
162
public function file()
163
{
164
$data = implode('
', $this -> datasec);
165
$ctrldir = implode('
', $this -> ctrl_dir);
166
167
return
168
$data .
169
$ctrldir .
170
$this -> eof_ctrl_dir .
171
pack('
v
', count($this -> ctrl_dir)) . // total # of entries "on this disk"
172
pack('
v
', count($this -> ctrl_dir)) . // total # of entries overall
173
pack('
V
', strlen($ctrldir)) . // size of central dir
174
pack('
V
', strlen($data)) . // offset to start of central dir
175
"\x00\x00"; // .zip file comment length
176
} // end of the '
file
()
' method
177
} // end of the '
zipfile
' class
178
;
zipfile
Definition
class.zipfile.php:17
zipfile\$old_offset
$old_offset
Definition
class.zipfile.php:44
zipfile\$datasec
$datasec
Definition
class.zipfile.php:23
zipfile\$eof_ctrl_dir
$eof_ctrl_dir
Definition
class.zipfile.php:37
zipfile\$ctrl_dir
$ctrl_dir
Definition
class.zipfile.php:30
zipfile\addFile
addFile($data, $name, $time=0)
Definition
class.zipfile.php:84
zipfile\file
file()
Definition
class.zipfile.php:162
zipfile\unix2DosTime
unix2DosTime($unixtime=0)
Definition
class.zipfile.php:57
html
class
class.zipfile.php
Generated by
1.13.2