phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / cron.php

History | View | Annotate | Download (4.4 kB)

1 5476 naderman
<?php
2 8146 acydburn
/**
3 5136 acydburn
*
4 5136 acydburn
* @package phpBB3
5 5136 acydburn
* @version $Id$
6 8146 acydburn
* @copyright (c) 2005 phpBB Group
7 8146 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 5136 acydburn
*
9 5136 acydburn
*/
10 5136 acydburn
11 5136 acydburn
/**
12 5136 acydburn
*/
13 5136 acydburn
define('IN_PHPBB', true);
14 5136 acydburn
define('IN_CRON', true);
15 7954 acydburn
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
16 5136 acydburn
$phpEx = substr(strrchr(__FILE__, '.'), 1);
17 5929 acydburn
include($phpbb_root_path . 'common.' . $phpEx);
18 5136 acydburn
19 6048 acydburn
// Do not update users last page entry
20 6048 acydburn
$user->session_begin(false);
21 5957 acydburn
$auth->acl($user->data);
22 5957 acydburn
23 5136 acydburn
$cron_type = request_var('cron_type', '');
24 5136 acydburn
25 6317 acydburn
// Output transparent gif
26 6317 acydburn
header('Cache-Control: no-cache');
27 6317 acydburn
header('Content-type: image/gif');
28 6317 acydburn
header('Content-length: 43');
29 6317 acydburn
30 6317 acydburn
echo base64_decode('R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');
31 6317 acydburn
32 11052 git-gate
// Flush here to prevent browser from showing the page as loading while running cron.
33 11052 git-gate
flush();
34 6317 acydburn
35 8022 acydburn
if (!isset($config['cron_lock']))
36 8022 acydburn
{
37 8022 acydburn
        set_config('cron_lock', '0', true);
38 8022 acydburn
}
39 8022 acydburn
40 7947 naderman
// make sure cron doesn't run multiple times in parallel
41 7947 naderman
if ($config['cron_lock'])
42 7947 naderman
{
43 7947 naderman
        // if the other process is running more than an hour already we have to assume it
44 7947 naderman
        // aborted without cleaning the lock
45 7947 naderman
        $time = explode(' ', $config['cron_lock']);
46 7947 naderman
        $time = $time[0];
47 7947 naderman
48 7947 naderman
        if ($time + 3600 >= time())
49 7947 naderman
        {
50 7947 naderman
                exit;
51 7947 naderman
        }
52 7947 naderman
}
53 7947 naderman
54 7947 naderman
define('CRON_ID', time() . ' ' . unique_id());
55 7947 naderman
56 7947 naderman
$sql = 'UPDATE ' . CONFIG_TABLE . "
57 7947 naderman
        SET config_value = '" . $db->sql_escape(CRON_ID) . "'
58 7947 naderman
        WHERE config_name = 'cron_lock' AND config_value = '" . $db->sql_escape($config['cron_lock']) . "'";
59 7947 naderman
$db->sql_query($sql);
60 7947 naderman
61 7947 naderman
// another cron process altered the table between script start and UPDATE query so exit
62 7947 naderman
if ($db->sql_affectedrows() != 1)
63 7947 naderman
{
64 7947 naderman
        exit;
65 7947 naderman
}
66 7947 naderman
67 5272 acydburn
/**
68 5272 acydburn
* Run cron-like action
69 5272 acydburn
* Real cron-based layer will be introduced in 3.2
70 5272 acydburn
*/
71 5136 acydburn
switch ($cron_type)
72 5136 acydburn
{
73 5136 acydburn
        case 'queue':
74 5929 acydburn
75 5929 acydburn
                if (time() - $config['queue_interval'] <= $config['last_queue_run'] || !file_exists($phpbb_root_path . 'cache/queue.' . $phpEx))
76 5929 acydburn
                {
77 5929 acydburn
                        break;
78 5929 acydburn
                }
79 5929 acydburn
80 5929 acydburn
                include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
81 5136 acydburn
                $queue = new queue();
82 5929 acydburn
83 11052 git-gate
                $queue->process();
84 5929 acydburn
85 5272 acydburn
        break;
86 5136 acydburn
87 5136 acydburn
        case 'tidy_cache':
88 5929 acydburn
89 5929 acydburn
                if (time() - $config['cache_gc'] <= $config['cache_last_gc'] || !method_exists($cache, 'tidy'))
90 5929 acydburn
                {
91 5929 acydburn
                        break;
92 5929 acydburn
                }
93 5929 acydburn
94 11052 git-gate
                $cache->tidy();
95 5929 acydburn
96 5272 acydburn
        break;
97 5136 acydburn
98 5472 acydburn
        case 'tidy_search':
99 5929 acydburn
100 5476 naderman
                // Select the search method
101 5929 acydburn
                $search_type = basename($config['search_type']);
102 5472 acydburn
103 5929 acydburn
                if (time() - $config['search_gc'] <= $config['search_last_gc'] || !file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx))
104 5476 naderman
                {
105 5476 naderman
                        break;
106 5476 naderman
                }
107 5929 acydburn
108 5476 naderman
                include_once("{$phpbb_root_path}includes/search/$search_type.$phpEx");
109 5476 naderman
110 5476 naderman
                // We do some additional checks in the module to ensure it can actually be utilised
111 5476 naderman
                $error = false;
112 5476 naderman
                $search = new $search_type($error);
113 5476 naderman
114 5476 naderman
                if ($error)
115 5476 naderman
                {
116 5476 naderman
                        break;
117 5476 naderman
                }
118 5476 naderman
119 11052 git-gate
                $search->tidy();
120 5476 naderman
121 5929 acydburn
        break;
122 5929 acydburn
123 5602 grahamje
        case 'tidy_warnings':
124 5602 grahamje
125 5929 acydburn
                if (time() - $config['warnings_gc'] <= $config['warnings_last_gc'])
126 5929 acydburn
                {
127 5929 acydburn
                        break;
128 5929 acydburn
                }
129 5929 acydburn
130 5929 acydburn
                include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
131 5929 acydburn
132 11052 git-gate
                tidy_warnings();
133 5929 acydburn
134 5602 grahamje
        break;
135 5602 grahamje
136 5136 acydburn
        case 'tidy_database':
137 5136 acydburn
138 5929 acydburn
                if (time() - $config['database_gc'] <= $config['database_last_gc'])
139 5929 acydburn
                {
140 5929 acydburn
                        break;
141 5929 acydburn
                }
142 5929 acydburn
143 5929 acydburn
                include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
144 5929 acydburn
145 11052 git-gate
                tidy_database();
146 5929 acydburn
147 5272 acydburn
        break;
148 5476 naderman
149 5272 acydburn
        case 'tidy_sessions':
150 5929 acydburn
151 5929 acydburn
                if (time() - $config['session_gc'] <= $config['session_last_gc'])
152 5929 acydburn
                {
153 5929 acydburn
                        break;
154 5929 acydburn
                }
155 5929 acydburn
156 11052 git-gate
                $user->session_gc();
157 5929 acydburn
158 5272 acydburn
        break;
159 5272 acydburn
160 5272 acydburn
        case 'prune_forum':
161 5272 acydburn
162 5272 acydburn
                $forum_id = request_var('f', 0);
163 5476 naderman
164 5272 acydburn
                $sql = 'SELECT forum_id, prune_next, enable_prune, prune_days, prune_viewed, forum_flags, prune_freq
165 5272 acydburn
                        FROM ' . FORUMS_TABLE . "
166 5272 acydburn
                        WHERE forum_id = $forum_id";
167 5272 acydburn
                $result = $db->sql_query($sql);
168 5272 acydburn
                $row = $db->sql_fetchrow($result);
169 5272 acydburn
                $db->sql_freeresult($result);
170 5272 acydburn
171 5272 acydburn
                if (!$row)
172 5272 acydburn
                {
173 5272 acydburn
                        break;
174 5272 acydburn
                }
175 5272 acydburn
176 5272 acydburn
                // Do the forum Prune thang
177 5272 acydburn
                if ($row['prune_next'] < time() && $row['enable_prune'])
178 5272 acydburn
                {
179 5929 acydburn
                        include_once($phpbb_root_path . 'includes/functions_admin.' . $phpEx);
180 5272 acydburn
181 5272 acydburn
                        if ($row['prune_days'])
182 5272 acydburn
                        {
183 11052 git-gate
                                auto_prune($row['forum_id'], 'posted', $row['forum_flags'], $row['prune_days'], $row['prune_freq']);
184 5272 acydburn
                        }
185 5272 acydburn
186 5272 acydburn
                        if ($row['prune_viewed'])
187 5272 acydburn
                        {
188 11052 git-gate
                                auto_prune($row['forum_id'], 'viewed', $row['forum_flags'], $row['prune_viewed'], $row['prune_freq']);
189 5272 acydburn
                        }
190 5272 acydburn
                }
191 5272 acydburn
192 5272 acydburn
        break;
193 5136 acydburn
}
194 5136 acydburn
195 6055 acydburn
// Unloading cache and closing db after having done the dirty work.
196 11052 git-gate
unlock_cron();
197 11052 git-gate
garbage_collection();
198 6054 acydburn
199 5136 acydburn
exit;
200 5136 acydburn
201 8087 acydburn
202 8087 acydburn
/**
203 8087 acydburn
* Unlock cron script
204 8087 acydburn
*/
205 8087 acydburn
function unlock_cron()
206 8087 acydburn
{
207 8087 acydburn
        global $db;
208 8087 acydburn
209 8087 acydburn
        $sql = 'UPDATE ' . CONFIG_TABLE . "
210 8087 acydburn
                SET config_value = '0'
211 8087 acydburn
                WHERE config_name = 'cron_lock' AND config_value = '" . $db->sql_escape(CRON_ID) . "'";
212 8087 acydburn
        $db->sql_query($sql);
213 8087 acydburn
}
214 8087 acydburn
215 5136 acydburn
?>