Verzeichnisstruktur phpBB-3.2.0
- Veröffentlicht
- 06.01.2017
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
base_extractor.php
001 <?php
002 /**
003 *
004 * This file is part of the phpBB Forum Software package.
005 *
006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
007 * @license GNU General Public License, version 2 (GPL-2.0)
008 *
009 * For full copyright and license information, please see
010 * the docs/CREDITS.txt file.
011 *
012 */
013
014 namespace phpbb\db\extractor;
015
016 use phpbb\db\extractor\exception\invalid_format_exception;
017 use phpbb\db\extractor\exception\extractor_not_initialized_exception;
018
019 /**
020 * Abstract base class for database extraction
021 */
022 abstract class base_extractor implements extractor_interface
023 {
024 /**
025 * @var string phpBB root path
026 */
027 protected $phpbb_root_path;
028
029 /**
030 * @var \phpbb\request\request_interface
031 */
032 protected $request;
033
034 /**
035 * @var \phpbb\db\driver\driver_interface
036 */
037 protected $db;
038
039 /**
040 * @var bool
041 */
042 protected $download;
043
044 /**
045 * @var bool
046 */
047 protected $store;
048
049 /**
050 * @var int
051 */
052 protected $time;
053
054 /**
055 * @var string
056 */
057 protected $format;
058
059 /**
060 * @var resource
061 */
062 protected $fp;
063
064 /**
065 * @var string
066 */
067 protected $write;
068
069 /**
070 * @var string
071 */
072 protected $close;
073
074 /**
075 * @var bool
076 */
077 protected $run_comp;
078
079 /**
080 * @var bool
081 */
082 protected $is_initialized;
083
084 /**
085 * Constructor
086 *
087 * @param string $phpbb_root_path
088 * @param \phpbb\request\request_interface $request
089 * @param \phpbb\db\driver\driver_interface $db
090 */
091 public function __construct($phpbb_root_path, \phpbb\request\request_interface $request, \phpbb\db\driver\driver_interface $db)
092 {
093 $this->phpbb_root_path = $phpbb_root_path;
094 $this->request = $request;
095 $this->db = $db;
096 $this->fp = null;
097
098 $this->is_initialized = false;
099 }
100
101 /**
102 * {@inheritdoc}
103 */
104 public function init_extractor($format, $filename, $time, $download = false, $store = false)
105 {
106 $this->download = $download;
107 $this->store = $store;
108 $this->time = $time;
109 $this->format = $format;
110
111 switch ($format)
112 {
113 case 'text':
114 $ext = '.sql';
115 $open = 'fopen';
116 $this->write = 'fwrite';
117 $this->close = 'fclose';
118 $mimetype = 'text/x-sql';
119 break;
120 case 'bzip2':
121 $ext = '.sql.bz2';
122 $open = 'bzopen';
123 $this->write = 'bzwrite';
124 $this->close = 'bzclose';
125 $mimetype = 'application/x-bzip2';
126 break;
127 case 'gzip':
128 $ext = '.sql.gz';
129 $open = 'gzopen';
130 $this->write = 'gzwrite';
131 $this->close = 'gzclose';
132 $mimetype = 'application/x-gzip';
133 break;
134 default:
135 throw new invalid_format_exception();
136 break;
137 }
138
139 if ($download === true)
140 {
141 $name = $filename . $ext;
142 header('Cache-Control: private, no-cache');
143 header("Content-Type: $mimetype; name=\"$name\"");
144 header("Content-disposition: attachment; filename=$name");
145
146 switch ($format)
147 {
148 case 'bzip2':
149 ob_start();
150 break;
151
152 case 'gzip':
153 if (strpos($this->request->header('Accept-Encoding'), 'gzip') !== false && strpos(strtolower($this->request->header('User-Agent')), 'msie') === false)
154 {
155 ob_start('ob_gzhandler');
156 }
157 else
158 {
159 $this->run_comp = true;
160 }
161 break;
162 }
163 }
164
165 if ($store === true)
166 {
167 $file = $this->phpbb_root_path . 'store/' . $filename . $ext;
168
169 $this->fp = $open($file, 'w');
170
171 if (!$this->fp)
172 {
173 trigger_error('FILE_WRITE_FAIL', E_USER_ERROR);
174 }
175 }
176
177 $this->is_initialized = true;
178 }
179
180 /**
181 * {@inheritdoc}
182 */
183 public function write_end()
184 {
185 static $close;
186
187 if (!$this->is_initialized)
188 {
189 throw new extractor_not_initialized_exception();
190 }
191
192 if ($this->store)
193 {
194 if ($close === null)
195 {
196 $close = $this->close;
197 }
198 $close($this->fp);
199 }
200
201 // bzip2 must be written all the way at the end
202 if ($this->download && $this->format === 'bzip2')
203 {
204 $c = ob_get_clean();
205 echo bzcompress($c);
206 }
207 }
208
209 /**
210 * {@inheritdoc}
211 */
212 public function flush($data)
213 {
214 static $write;
215
216 if (!$this->is_initialized)
217 {
218 throw new extractor_not_initialized_exception();
219 }
220
221 if ($this->store === true)
222 {
223 if ($write === null)
224 {
225 $write = $this->write;
226 }
227 $write($this->fp, $data);
228 }
229
230 if ($this->download === true)
231 {
232 if ($this->format === 'bzip2' || $this->format === 'text' || ($this->format === 'gzip' && !$this->run_comp))
233 {
234 echo $data;
235 }
236
237 // we can write the gzip data as soon as we get it
238 if ($this->format === 'gzip')
239 {
240 if ($this->run_comp)
241 {
242 echo gzencode($data);
243 }
244 else
245 {
246 ob_flush();
247 flush();
248 }
249 }
250 }
251 }
252 }
253