1: | <?php |
2: | |
3: | |
4: | |
5: | |
6: | |
7: | |
8: | |
9: | |
10: | |
11: | |
12: | |
13: | |
14: | |
15: | |
16: | |
17: | |
18: | defined('XOOPS_ROOT_PATH') || exit('Restricted access'); |
19: | |
20: | |
21: | |
22: | |
23: | include_once XOOPS_ROOT_PATH . '/class/downloader.php'; |
24: | |
25: | |
26: | |
27: | include_once XOOPS_ROOT_PATH . '/class/class.tar.php'; |
28: | |
29: | |
30: | |
31: | |
32: | class XoopsTarDownloader extends XoopsDownloader |
33: | { |
34: | |
35: | |
36: | |
37: | |
38: | |
39: | |
40: | public function __construct($ext = '.tar.gz', $mimyType = 'application/x-gzip') |
41: | { |
42: | $this->archiver = new tar(); |
43: | $this->ext = trim($ext); |
44: | $this->mimetype = trim($mimyType); |
45: | } |
46: | |
47: | |
48: | |
49: | |
50: | |
51: | |
52: | |
53: | public function addFile($filepath, $newfilename = null) |
54: | { |
55: | $this->archiver->addFile($filepath); |
56: | if (isset($newfilename)) { |
57: | |
58: | for ($i = 0; $i < $this->archiver->numFiles; ++$i) { |
59: | if ($this->archiver->files[$i]['name'] == $filepath) { |
60: | $this->archiver->files[$i]['name'] = trim($newfilename); |
61: | break; |
62: | } |
63: | } |
64: | } |
65: | } |
66: | |
67: | |
68: | |
69: | |
70: | |
71: | |
72: | |
73: | public function addBinaryFile($filepath, $newfilename = null) |
74: | { |
75: | $this->archiver->addFile($filepath, true); |
76: | if (isset($newfilename)) { |
77: | |
78: | for ($i = 0; $i < $this->archiver->numFiles; ++$i) { |
79: | if ($this->archiver->files[$i]['name'] == $filepath) { |
80: | $this->archiver->files[$i]['name'] = trim($newfilename); |
81: | break; |
82: | } |
83: | } |
84: | } |
85: | } |
86: | |
87: | |
88: | |
89: | |
90: | |
91: | |
92: | |
93: | |
94: | public function addFileData(&$data, $filename, $time = 0) |
95: | { |
96: | $dummyfile = XOOPS_CACHE_PATH . '/dummy_' . time() . '.tpl'; |
97: | $fp = fopen($dummyfile, 'w'); |
98: | fwrite($fp, $data); |
99: | fclose($fp); |
100: | $this->archiver->addFile($dummyfile); |
101: | unlink($dummyfile); |
102: | |
103: | for ($i = 0; $i < $this->archiver->numFiles; ++$i) { |
104: | if ($this->archiver->files[$i]['name'] == $dummyfile) { |
105: | $this->archiver->files[$i]['name'] = $filename; |
106: | if ($time != 0) { |
107: | $this->archiver->files[$i]['time'] = $time; |
108: | } |
109: | break; |
110: | } |
111: | } |
112: | } |
113: | |
114: | |
115: | |
116: | |
117: | |
118: | |
119: | |
120: | |
121: | public function addBinaryFileData(&$data, $filename, $time = 0) |
122: | { |
123: | $dummyfile = XOOPS_CACHE_PATH . '/dummy_' . time() . '.tpl'; |
124: | $fp = fopen($dummyfile, 'wb'); |
125: | fwrite($fp, $data); |
126: | fclose($fp); |
127: | $this->archiver->addFile($dummyfile, true); |
128: | unlink($dummyfile); |
129: | |
130: | for ($i = 0; $i < $this->archiver->numFiles; ++$i) { |
131: | if ($this->archiver->files[$i]['name'] == $dummyfile) { |
132: | $this->archiver->files[$i]['name'] = $filename; |
133: | if ($time != 0) { |
134: | $this->archiver->files[$i]['time'] = $time; |
135: | } |
136: | break; |
137: | } |
138: | } |
139: | } |
140: | |
141: | |
142: | |
143: | |
144: | |
145: | |
146: | |
147: | public function download($name, $gzip = true) |
148: | { |
149: | $this->_header($name . $this->ext); |
150: | echo $this->archiver->toTarOutput($name . $this->ext, $gzip); |
151: | } |
152: | } |
153: | |