[ Index ] |
PHP Cross Reference of phpBB-3.3.14-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * This file is part of the phpBB Forum Software package. 5 * 6 * @copyright (c) phpBB Limited <https://www.phpbb.com> 7 * @license GNU General Public License, version 2 (GPL-2.0) 8 * 9 * For full copyright and license information, please see 10 * the docs/CREDITS.txt file. 11 * 12 */ 13 14 namespace phpbb\db\extractor; 15 16 use phpbb\db\extractor\exception\invalid_format_exception; 17 use phpbb\db\extractor\exception\extractor_not_initialized_exception; 18 19 /** 20 * Abstract base class for database extraction 21 */ 22 abstract class base_extractor implements extractor_interface 23 { 24 /** 25 * @var string phpBB root path 26 */ 27 protected $phpbb_root_path; 28 29 /** 30 * @var \phpbb\request\request_interface 31 */ 32 protected $request; 33 34 /** 35 * @var \phpbb\db\driver\driver_interface 36 */ 37 protected $db; 38 39 /** 40 * @var bool 41 */ 42 protected $download; 43 44 /** 45 * @var bool 46 */ 47 protected $store; 48 49 /** 50 * @var int 51 */ 52 protected $time; 53 54 /** 55 * @var string 56 */ 57 protected $format; 58 59 /** 60 * @var resource 61 */ 62 protected $fp; 63 64 /** 65 * @var string 66 */ 67 protected $write; 68 69 /** 70 * @var string 71 */ 72 protected $close; 73 74 /** 75 * @var bool 76 */ 77 protected $run_comp; 78 79 /** 80 * @var bool 81 */ 82 protected $is_initialized; 83 84 /** 85 * Constructor 86 * 87 * @param string $phpbb_root_path 88 * @param \phpbb\request\request_interface $request 89 * @param \phpbb\db\driver\driver_interface $db 90 */ 91 public function __construct($phpbb_root_path, \phpbb\request\request_interface $request, \phpbb\db\driver\driver_interface $db) 92 { 93 $this->phpbb_root_path = $phpbb_root_path; 94 $this->request = $request; 95 $this->db = $db; 96 $this->fp = null; 97 98 $this->is_initialized = false; 99 } 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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Nov 25 19:05:08 2024 | Cross-referenced by PHPXref 0.7.1 |