Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

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

cron.php

Zuletzt modifiziert: 09.10.2024, 12:50 - Dateigröße: 5.82 KiB


 001  <?php
 002  /**
 003  *
 004  * @package phpBB3
 005  * @version $Id$
 006  * @copyright (c) 2005 phpBB Group
 007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 008  *
 009  */
 010   
 011  /**
 012  */
 013  define('IN_PHPBB', true);
 014  define('IN_CRON', true);
 015  $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
 016  $phpEx = substr(strrchr(__FILE__, '.'), 1);
 017  include($phpbb_root_path . 'common.' . $phpEx);
 018   
 019  // Do not update users last page entry
 020  $user->session_begin(false);
 021  $auth->acl($user->data);
 022   
 023  $cron_type = request_var('cron_type', '');
 024  $use_shutdown_function = (@function_exists('register_shutdown_function')) ? true : false;
 025   
 026  // Output transparent gif
 027  header('Cache-Control: no-cache');
 028  header('Content-type: image/gif');
 029  header('Content-length: 43');
 030   
 031  echo base64_decode('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');
 032   
 033  // test without flush ;)
 034  // flush();
 035   
 036  //
 037  if (!isset($config['cron_lock']))
 038  {
 039      set_config('cron_lock', '0', true);
 040  }
 041   
 042  // make sure cron doesn't run multiple times in parallel
 043  if ($config['cron_lock'])
 044  {
 045      // if the other process is running more than an hour already we have to assume it
 046      // aborted without cleaning the lock
 047      $time = explode(' ', $config['cron_lock']);
 048      $time = $time[0];
 049   
 050      if ($time + 3600 >= time())
 051      {
 052          exit;
 053      }
 054  }
 055   
 056  define('CRON_ID', time() . ' ' . unique_id());
 057   
 058  $sql = 'UPDATE ' . CONFIG_TABLE . "
 059      SET config_value = '" . $db->sql_escape(CRON_ID) . "'
 060      WHERE config_name = 'cron_lock' AND config_value = '" . $db->sql_escape($config['cron_lock']) . "'";
 061  $db->sql_query($sql);
 062   
 063  // another cron process altered the table between script start and UPDATE query so exit
 064  if ($db->sql_affectedrows() != 1)
 065  {
 066      exit;
 067  }
 068   
 069  /**
 070  * Run cron-like action
 071  * Real cron-based layer will be introduced in 3.2
 072  */
 073  switch ($cron_type)
 074  {
 075      case 'queue':
 076   
 077          if (time() - $config['queue_interval'] <= $config['last_queue_run'] || !file_exists($phpbb_root_path . 'cache/queue.' . $phpEx))
 078          {
 079              break;
 080          }
 081   
 082          // A user reported using the mail() function while using shutdown does not work. We do not want to risk that.
 083          if ($use_shutdown_function && !$config['smtp_delivery'])
 084          {
 085              $use_shutdown_function = false;
 086          }
 087   
 088          include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
 089          $queue = new queue();
 090   
 091          if ($use_shutdown_function)
 092          {
 093              register_shutdown_function(array(&$queue, 'process'));
 094          }
 095          else
 096          {
 097              $queue->process();
 098          }
 099   
 100      break;
 101   
 102      case 'tidy_cache':
 103   
 104          if (time() - $config['cache_gc'] <= $config['cache_last_gc'] || !method_exists($cache, 'tidy'))
 105          {
 106              break;
 107          }
 108   
 109          if ($use_shutdown_function)
 110          {
 111              register_shutdown_function(array(&$cache, 'tidy'));
 112          }
 113          else
 114          {
 115              $cache->tidy();
 116          }
 117   
 118      break;
 119   
 120      case 'tidy_search':
 121          
 122          // Select the search method
 123          $search_type = basename($config['search_type']);
 124   
 125          if (time() - $config['search_gc'] <= $config['search_last_gc'] || !file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx))
 126          {
 127              break;
 128          }
 129   
 130          include_once("{$phpbb_root_path}includes/search/$search_type.$phpEx");
 131   
 132          // We do some additional checks in the module to ensure it can actually be utilised
 133          $error = false;
 134          $search = new $search_type($error);
 135   
 136          if ($error)
 137          {
 138              break;
 139          }
 140   
 141          if ($use_shutdown_function)
 142          {
 143              register_shutdown_function(array(&$search, 'tidy'));
 144          }
 145          else
 146          {
 147              $search->tidy();
 148          }
 149   
 150      break;
 151   
 152      case 'tidy_warnings':
 153   
 154          if (time() - $config['warnings_gc'] <= $config['warnings_last_gc'])
 155          {
 156              break;
 157          }
 158   
 159          include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
 160   
 161          if ($use_shutdown_function)
 162          {
 163              register_shutdown_function('tidy_warnings');
 164          }
 165          else
 166          {
 167              tidy_warnings();
 168          }
 169   
 170      break;
 171   
 172      case 'tidy_database':
 173   
 174          if (time() - $config['database_gc'] <= $config['database_last_gc'])
 175          {
 176              break;
 177          }
 178   
 179          include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
 180   
 181          if ($use_shutdown_function)
 182          {
 183              register_shutdown_function('tidy_database');
 184          }
 185          else
 186          {
 187              tidy_database();
 188          }
 189   
 190      break;
 191   
 192      case 'tidy_sessions':
 193   
 194          if (time() - $config['session_gc'] <= $config['session_last_gc'])
 195          {
 196              break;
 197          }
 198   
 199          if ($use_shutdown_function)
 200          {
 201              register_shutdown_function(array(&$user, 'session_gc'));
 202          }
 203          else
 204          {
 205              $user->session_gc();
 206          }
 207   
 208      break;
 209   
 210      case 'prune_forum':
 211   
 212          $forum_id = request_var('f', 0);
 213   
 214          $sql = 'SELECT forum_id, prune_next, enable_prune, prune_days, prune_viewed, forum_flags, prune_freq
 215              FROM ' . FORUMS_TABLE . "
 216              WHERE forum_id = $forum_id";
 217          $result = $db->sql_query($sql);
 218          $row = $db->sql_fetchrow($result);
 219          $db->sql_freeresult($result);
 220   
 221          if (!$row)
 222          {
 223              break;
 224          }
 225   
 226          // Do the forum Prune thang
 227          if ($row['prune_next'] < time() && $row['enable_prune'])
 228          {
 229              include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
 230   
 231              if ($row['prune_days'])
 232              {
 233                  if ($use_shutdown_function)
 234                  {
 235                      register_shutdown_function('auto_prune', $row['forum_id'], 'posted', $row['forum_flags'], $row['prune_days'], $row['prune_freq']);
 236                  }
 237                  else
 238                  {
 239                      auto_prune($row['forum_id'], 'posted', $row['forum_flags'], $row['prune_days'], $row['prune_freq']);
 240                  }
 241              }
 242   
 243              if ($row['prune_viewed'])
 244              {
 245                  if ($use_shutdown_function)
 246                  {
 247                      register_shutdown_function('auto_prune', $row['forum_id'], 'viewed', $row['forum_flags'], $row['prune_viewed'], $row['prune_freq']);
 248                  }
 249                  else
 250                  {
 251                      auto_prune($row['forum_id'], 'viewed', $row['forum_flags'], $row['prune_viewed'], $row['prune_freq']);
 252                  }
 253              }
 254          }
 255   
 256      break;
 257  }
 258   
 259  // Unloading cache and closing db after having done the dirty work.
 260  if ($use_shutdown_function)
 261  {
 262      register_shutdown_function('unlock_cron');
 263      register_shutdown_function('garbage_collection');
 264  }
 265  else
 266  {
 267      unlock_cron();
 268      garbage_collection();
 269  }
 270   
 271  exit;
 272   
 273   
 274  /**
 275  * Unlock cron script
 276  */
 277  function unlock_cron()
 278  {
 279      global $db;
 280   
 281      $sql = 'UPDATE ' . CONFIG_TABLE . "
 282          SET config_value = '0'
 283          WHERE config_name = 'cron_lock' AND config_value = '" . $db->sql_escape(CRON_ID) . "'";
 284      $db->sql_query($sql);
 285  }
 286   
 287  ?>