[ Index ]

PHP Cross Reference of phpBB-3.2.8-deutsch

title

Body

[close]

/phpbb/db/extractor/ -> base_extractor.php (source)

   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  }


Generated: Tue Apr 7 19:42:26 2020 Cross-referenced by PHPXref 0.7.1