diff options
-rw-r--r-- | zipstream.php | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/zipstream.php b/zipstream.php index 03fb96b..6a7b374 100644 --- a/zipstream.php +++ b/zipstream.php @@ -24,6 +24,11 @@ class ZipStream { $cdr_ofs = 0, $ofs = 0; + function ZipStream($name = 'untitled.zip', $send_http_headers = false) { + $this->output_name = $name; + $this->need_headers = $send_http_headers; + } + # # add_file - add a file to the archive # @@ -73,7 +78,7 @@ class ZipStream { $this->add_to_cdr($name, $time, $crc, $zlen, $len, $full_len); # print data - echo $ret; + $this->send($ret); } # @@ -94,12 +99,18 @@ class ZipStream { $this->clear(); } - function clear() { - $this->files = array(0; - $this->ofs = 0; - $this->cdr_ofs = 0; - } + function send_http_headers($name = 'untitled.zip') { + $headers = array( + 'Content-Type' => 'application/x-zip', + 'Content-Disposition' => "attachment; filename=\"{$name}\"", + 'Pragma' => 'public', + 'Cache-Control' => 'public, must-revalidate', + 'Content-Transfer-Encoding' => 'binary', + ); + foreach ($headers as $key => $val) + header("$key: $val"); + } ################### # PRIVATE METHODS # @@ -135,6 +146,8 @@ class ZipStream { # pack fields and append name $ret = $this->pack_fields($fields) . $name; + $this->send($ret); + # increment cdr offset $this->cdr_ofs += strlen($ret); } @@ -162,6 +175,20 @@ class ZipStream { $this->add_cdr_eof(); } + function clear() { + $this->files = array(); + $this->ofs = 0; + $this->cdr_ofs = 0; + } + + function send($str) { + if ($this->need_headers) + $this->send_http_headers($this->output_name); + $this->need_headers = false; + + echo $str; + } + function pack_fields($fields) { # populate format string and argument list list ($pack_fmt, $args) = array('', array()); |