-
Notifications
You must be signed in to change notification settings - Fork 0
/
cron.php
125 lines (116 loc) · 4.47 KB
/
cron.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
/**
* Phyneapple!
*
* LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@phyneapple.com so we can send you a copy immediately.
*
*/
namespace PHY;
/*
* Define these default $_SERVER values if this is being run from the command line.
*/
if (array_key_exists('PWD', $_SERVER)) {
$_SERVER['DOCUMENT_ROOT'] = $_SERVER['PWD'];
$_SERVER['SERVER_ADDR'] = '127.0.0.1';
define('PLAIN_TEXT', true);
} else {
define('PLAIN_TEXT', false);
}
/*
* Initiates Phyneapple's core files.
*/
require '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
/**
* This can be called via command line or browser. Runs Cron tasks that
* match the time expressions.
*
* @package PHY
* @category PHY\Phyneapple
* @copyright Copyright (c) 2013 Phyneapple! (http://www.phyneapple.com/)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* @author John Mullanaphy <hi@john.mu>
*/
call_user_func(function () {
/*
* Make sure we're on PHP5.4+
*/
if (version_compare(phpversion(), '5.4.0', '<') === true) {
echo '<html><head><title>Fiddlesticks...</title></head><body><div><h3>Sorry Mate!</h3><p>PHY 2.0 supports PHP 5.4+.</p></div></body></html>';
exit;
}
/*
* Setup our app, add a debugger, and start profiling.
*/
$app = new App;
$debugger = new Debugger;
$debugger->profile(true);
$app->setDebugger($debugger);
/*
* Now add a path object for routing files.
*/
$path = new Path([
'base' => dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR
]);
$app->setPath($path);
/*
* Setup our site and debugging.
*/
$app->setNamespace(array_key_exists('PHY_NAMESPACE', $_SERVER)
? $_SERVER['PHY_NAMESPACE']
: 'default');
if (!($tasks = $app->get('cache/core/cron/tasks'))) {
$tasks = [];
$files = glob('config' . $app->getNamespace() . DIRECTORY_SEPARATOR . 'cron' . DIRECTORY_SEPARATOR . '*.json');
foreach ($files as $file) {
$FILE = fopen($file, 'r');
if ($FILE) {
$content = fread($FILE, filesize($file));
$content = @json_decode($content);
if ($content) {
if (is_array($content)) {
$tasks = array_merge($tasks, $content);
} else {
$tasks[] = $content;
}
}
}
}
$app->set('cache/core/cron/tasks', $tasks);
}
if ($tasks) {
$Cron = new Cron;
$Cron->setTasks($tasks);
$run = 0;
foreach ($Cron as $task) {
$lock = Cron::lock($task->get('label'));
if (!is_file($lock)) {
$LOCK = fopen($lock, 'w');
fwrite($LOCK, date('Y-m-d H:i:s'));
fclose($LOCK);
$task->run();
$run += (int)REST::success($task->response());
@unlink($lock);
}
}
if (!PLAIN_TEXT) {
echo '<!DOCTYPE html><html><head><title>Cron</title><style type="text/css">*{border:0;margin:0;padding:0;}body,html{background:#000;color:#72f90c;font-family:monaco,lucida console,courier new,monotype;font-size:13px;line-height:130%;padding:5px;}</style></head><body><pre>';
} else {
echo PHP_EOL;
}
$message = 'Ran ' . $run . ' out of a possible ' . count($Cron) . ' tasks';
echo $message, PHP_EOL, '--------------------------------------------------', PHP_EOL, 'RUNTIME: ', $app->profile();
if (!PLAIN_TEXT) {
echo '</pre></body></html>';
} else {
echo PHP_EOL, PHP_EOL;
}
}
});