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.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

memory.php

Zuletzt modifiziert: 09.10.2024, 12:54 - Dateigröße: 5.14 KiB


 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\cache\driver;
 015   
 016  /**
 017  * ACM Abstract Memory Class
 018  */
 019  abstract class memory extends \phpbb\cache\driver\base
 020  {
 021      var $key_prefix;
 022   
 023      /**
 024      * Set cache path
 025      */
 026      function __construct()
 027      {
 028          global $phpbb_root_path, $dbname, $table_prefix, $phpbb_container;
 029   
 030          $this->cache_dir    = $phpbb_container->getParameter('core.cache_dir');
 031          $this->key_prefix    = substr(md5($dbname . $table_prefix), 0, 8) . '_';
 032   
 033          if (!isset($this->extension) || !extension_loaded($this->extension))
 034          {
 035              global $acm_type;
 036   
 037              trigger_error("Could not find required extension [{$this->extension}] for the ACM module $acm_type.", E_USER_ERROR);
 038          }
 039   
 040          if (isset($this->function) && !function_exists($this->function))
 041          {
 042              global $acm_type;
 043   
 044              trigger_error("The required function [{$this->function}] is not available for the ACM module $acm_type.", E_USER_ERROR);
 045          }
 046      }
 047   
 048      /**
 049      * {@inheritDoc}
 050      */
 051      function load()
 052      {
 053          // grab the global cache
 054          $this->vars = $this->_read('global');
 055   
 056          if ($this->vars !== false)
 057          {
 058              return true;
 059          }
 060   
 061          return false;
 062      }
 063   
 064      /**
 065      * {@inheritDoc}
 066      */
 067      function save()
 068      {
 069          if (!$this->is_modified)
 070          {
 071              return;
 072          }
 073   
 074          $this->_write('global', $this->vars, 2592000);
 075   
 076          $this->is_modified = false;
 077      }
 078   
 079      /**
 080      * {@inheritDoc}
 081      */
 082      function tidy()
 083      {
 084          global $config;
 085   
 086          // cache has auto GC, no need to have any code here :)
 087          $config->set('cache_last_gc', time(), false);
 088      }
 089   
 090      /**
 091      * {@inheritDoc}
 092      */
 093      function get($var_name)
 094      {
 095          if ($var_name[0] == '_')
 096          {
 097              if (!$this->_exists($var_name))
 098              {
 099                  return false;
 100              }
 101   
 102              return $this->_read($var_name);
 103          }
 104          else
 105          {
 106              return ($this->_exists($var_name)) ? $this->vars[$var_name] : false;
 107          }
 108      }
 109   
 110      /**
 111      * {@inheritDoc}
 112      */
 113      function put($var_name, $var, $ttl = 2592000)
 114      {
 115          if ($var_name[0] == '_')
 116          {
 117              $this->_write($var_name, $var, $ttl);
 118          }
 119          else
 120          {
 121              $this->vars[$var_name] = $var;
 122              $this->is_modified = true;
 123          }
 124      }
 125   
 126      /**
 127      * {@inheritDoc}
 128      */
 129      function destroy($var_name, $table = '')
 130      {
 131          if ($var_name == 'sql' && !empty($table))
 132          {
 133              if (!is_array($table))
 134              {
 135                  $table = array($table);
 136              }
 137   
 138              foreach ($table as $table_name)
 139              {
 140                  // gives us the md5s that we want
 141                  $temp = $this->_read('sql_' . $table_name);
 142   
 143                  if ($temp === false)
 144                  {
 145                      continue;
 146                  }
 147   
 148                  // delete each query ref
 149                  foreach ($temp as $md5_id => $void)
 150                  {
 151                      $this->_delete('sql_' . $md5_id);
 152                  }
 153   
 154                  // delete the table ref
 155                  $this->_delete('sql_' . $table_name);
 156              }
 157   
 158              return;
 159          }
 160   
 161          if (!$this->_exists($var_name))
 162          {
 163              return;
 164          }
 165   
 166          if ($var_name[0] == '_')
 167          {
 168              $this->_delete($var_name);
 169          }
 170          else if (isset($this->vars[$var_name]))
 171          {
 172              $this->is_modified = true;
 173              unset($this->vars[$var_name]);
 174   
 175              // We save here to let the following cache hits succeed
 176              $this->save();
 177          }
 178      }
 179   
 180      /**
 181      * {@inheritDoc}
 182      */
 183      function _exists($var_name)
 184      {
 185          if ($var_name[0] == '_')
 186          {
 187              return $this->_isset($var_name);
 188          }
 189          else
 190          {
 191              if (!sizeof($this->vars))
 192              {
 193                  $this->load();
 194              }
 195   
 196              return isset($this->vars[$var_name]);
 197          }
 198      }
 199   
 200      /**
 201      * {@inheritDoc}
 202      */
 203      function sql_save(\phpbb\db\driver\driver_interface $db, $query, $query_result, $ttl)
 204      {
 205          // Remove extra spaces and tabs
 206          $query = preg_replace('/[\n\r\s\t]+/', ' ', $query);
 207          $query_id = md5($query);
 208   
 209          // determine which tables this query belongs to
 210          // Some queries use backticks, namely the get_database_size() query
 211          // don't check for conformity, the SQL would error and not reach here.
 212          if (!preg_match_all('/(?:FROM \\(?(`?\\w+`?(?: \\w+)?(?:, ?`?\\w+`?(?: \\w+)?)*)\\)?)|(?:JOIN (`?\\w+`?(?: \\w+)?))/', $query, $regs, PREG_SET_ORDER))
 213          {
 214              // Bail out if the match fails.
 215              return $query_result;
 216          }
 217   
 218          $tables = array();
 219          foreach ($regs as $match)
 220          {
 221              if ($match[0][0] == 'F')
 222              {
 223                  $tables = array_merge($tables, array_map('trim', explode(',', $match[1])));
 224              }
 225              else
 226              {
 227                  $tables[] = $match[2];
 228              }
 229          }
 230   
 231          foreach ($tables as $table_name)
 232          {
 233              // Remove backticks
 234              $table_name = ($table_name[0] == '`') ? substr($table_name, 1, -1) : $table_name;
 235   
 236              if (($pos = strpos($table_name, ' ')) !== false)
 237              {
 238                  $table_name = substr($table_name, 0, $pos);
 239              }
 240   
 241              $temp = $this->_read('sql_' . $table_name);
 242   
 243              if ($temp === false)
 244              {
 245                  $temp = array();
 246              }
 247   
 248              $temp[$query_id] = true;
 249   
 250              // This must never expire
 251              $this->_write('sql_' . $table_name, $temp, 0);
 252          }
 253   
 254          // store them in the right place
 255          $this->sql_rowset[$query_id] = array();
 256          $this->sql_row_pointer[$query_id] = 0;
 257   
 258          while ($row = $db->sql_fetchrow($query_result))
 259          {
 260              $this->sql_rowset[$query_id][] = $row;
 261          }
 262          $db->sql_freeresult($query_result);
 263   
 264          $this->_write('sql_' . $query_id, $this->sql_rowset[$query_id], $ttl);
 265   
 266          return $query_id;
 267      }
 268   
 269      /**
 270      * Check if a cache var exists
 271      *
 272      * @access protected
 273      * @param string $var Cache key
 274      * @return bool True if it exists, otherwise false
 275      */
 276      function _isset($var)
 277      {
 278          // Most caches don't need to check
 279          return true;
 280      }
 281  }
 282