settings.inc.php
11.4 KB
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
<?php
/*
This is phpSitemapNG, a php script that creates your personal google sitemap
It can be downloaded from http://enarion.net/google/
License: GPL
Tobias Kluge, enarion.net
*/
/**
* show settings
* if settings are empty, set them to usable values
*/
function viewSetup($resetSettings = FALSE) {
global $SETTINGS, $LAYOUT;
$LAYOUT->setTitle('Edit settings');
if($resetSettings === TRUE) {
$SETTINGS = array();
}
$page_root = substr($_SERVER['SCRIPT_FILENAME'],0,strpos($_SERVER['SCRIPT_FILENAME'],$_SERVER['SCRIPT_NAME']));
if (is_null($SETTINGS[PSNG_PAGEROOT])) $SETTINGS[PSNG_PAGEROOT] = ($page_root != '')?$page_root : $_SERVER[DOCUMENT_ROOT];
if (is_null($SETTINGS[PSNG_WEBSITE])) $SETTINGS[PSNG_WEBSITE] = "http://".$_SERVER[HTTP_HOST];
if (is_null($SETTINGS[PSNG_CRAWLER_URL])) $SETTINGS[PSNG_CRAWLER_URL] = $SETTINGS[PSNG_WEBSITE];
if (is_null($SETTINGS[PSNG_SITEMAP_FILE])) $SETTINGS[PSNG_SITEMAP_FILE] = "/sitemap.xml";
if (is_null($SETTINGS[PSNG_TXTSITEMAP_FILE])) $SETTINGS[PSNG_TXTSITEMAP_FILE] = "/sitemap.txt";
// if (is_null($SETTINGS[PSNG_SITEMAP_FILE])) $SETTINGS[PSNG_SITEMAP_FILE] = $SETTINGS[PSNG_PAGEROOT] . "/sitemap.xml";
// if (is_null($SETTINGS[PSNG_SITEMAP_URL])) $SETTINGS[PSNG_SITEMAP_URL] = $SETTINGS[PSNG_WEBSITE] ."/sitemap.xml";
if (is_null($SETTINGS[PSNG_TEMP_DIR])) $SETTINGS[PSNG_TEMP_DIR] = dirname(__FILE__) . "/temp/";
if (is_null($SETTINGS[PSNG_PUBLIC_URL])) $SETTINGS[PSNG_PUBLIC_URL] = $SETTINGS[PSNG_PAGEROOT] . "/phpsitemapng.php";
if (is_null($SETTINGS[PSNG_SCAN_LOCAL])) $SETTINGS[PSNG_SCAN_LOCAL] = TRUE;
if (is_null($SETTINGS[PSNG_SCAN_WEBSITE])) $SETTINGS[PSNG_SCAN_WEBSITE] = TRUE;
if (is_null($SETTINGS[PSNG_PINGGOOGLE])) $SETTINGS[PSNG_PINGGOOGLE] = TRUE;
if (is_null($SETTINGS[PSNG_EDITRESULT])) $SETTINGS[PSNG_EDITRESULT] = PSNG_EDITRESULT_TRUE;
if (is_null($SETTINGS[PSNG_STORE_FILELIST])) $SETTINGS[PSNG_STORE_FILELIST] = TRUE;
// if (!isset($SETTINGS[PSNG_TIMEOUT])) $SETTINGS[PSNG_TIMEOUT] = PSNG_TIMEOUT_AUTOMATIC; //($SETTINGS[PSNG_TIMEOUT_AUTOMATIC] == TRUE)?PSNG_TIMEOUT_AUTOMATIC:PSNG_TIMEOUT_NONE;
if (!isset($SETTINGS[PSNG_TIMEOUT])) $SETTINGS[PSNG_TIMEOUT] = PSNG_TIMEOUT_FORCE;
if (!isset($SETTINGS[PSNG_TIMEOUT_TIME_DURATION])) $SETTINGS[PSNG_TIMEOUT_TIME_DURATION] =
(ini_get('max_execution_time') != '' && ini_get('max_execution_time') > 0)
? ini_get('max_execution_time')
: 30;
//is_null($SETTINGS[PSNG_TIMEOUT])
/* list of disallowed directory names */
if (is_null($SETTINGS[PSNG_DISALLOW_DIR])) {
$SETTINGS[PSNG_DISALLOW_DIR] = array();
$SETTINGS[PSNG_DISALLOW_DIR][] = "/admin/";
$SETTINGS[PSNG_DISALLOW_DIR][] = "/include/";
$SETTINGS[PSNG_DISALLOW_DIR][] = "/logs/";
$SETTINGS[PSNG_DISALLOW_DIR][] = "/cgi-bin/";
$SETTINGS[PSNG_DISALLOW_DIR][] = dirname($_SERVER['PHP_SELF']);
}
// TODO open robots.txt and add disallowed directories to our list
/* list of disallowed file names */
if (is_null($SETTINGS[PSNG_DISALLOW_FILE])) {
$SETTINGS[PSNG_DISALLOW_FILE] = array();
$SETTINGS[PSNG_DISALLOW_FILE][] = ".xml";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".inc";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".old";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".save";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".txt";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".js";
$SETTINGS[PSNG_DISALLOW_FILE][] = "~";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".LCK";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".zip";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".ZIP";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".bmp";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".BMP";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".jpg";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".jpeg";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".JPG";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".GIF";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".PNG";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".png";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".gif";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".CSV";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".csv";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".css";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".class";
$SETTINGS[PSNG_DISALLOW_FILE][] = ".jar";
}
/* list of disallowed key names */
if (is_null($SETTINGS[PSNG_DISALLOW_KEY])) {
$SETTINGS[PSNG_DISALLOW_KEY] = array(); // 'PHPSESSID', 'link', 'sid');
$SETTINGS[PSNG_DISALLOW_KEY][] = session_name();
$SETTINGS[PSNG_DISALLOW_KEY][] = 'sid';
$SETTINGS[PSNG_DISALLOW_KEY][] = 'PHPSESSID';
$SETTINGS[PSNG_DISALLOW_KEY] = array_unique($SETTINGS[PSNG_DISALLOW_KEY]);
}
debug($SETTINGS[PSNG_DISALLOW_KEY], "disallow keys");
if (is_null($SETTINGS[PSNG_CHANGEFREQ])) $SETTINGS[PSNG_CHANGEFREQ] = PSNG_CHANGEFREQ_FIXED;
if (is_null($SETTINGS[PSNG_CHANGEFREQ_FIXED])) $SETTINGS[PSNG_CHANGEFREQ_FIXED] = 'weekly';
if (is_null($SETTINGS[PSNG_PRIORITY])) $SETTINGS[PSNG_PRIORITY] = PSNG_PRIORITY_FIXED;
if (is_null($SETTINGS[PSNG_PRIORITY_FIXED])) $SETTINGS[PSNG_PRIORITY_FIXED] = 0.5;
if (is_null($SETTINGS[PSNG_LASTMOD])) $SETTINGS[PSNG_LASTMOD] = PSNG_LASTMOD_FILEDATE;
if (is_null($SETTINGS[PSNG_LASTMOD_TIMEFORMAT])) $SETTINGS[PSNG_LASTMOD_TIMEFORMAT] = PSNG_TIMEFORMAT_LONG;
require(dirname(__FILE__).'/../../'.PSNG_FILE_TEMPLATE_SETUP_EXPERT);
$LAYOUT->addText($layout, 'Current settings');
return TRUE;
}
/**
* extract settings from passed user values
*/
function getSettings() {
global $_REQUEST, $SETTINGS, $LAYOUT;
$LAYOUT->setTitle("Store settings");
// TODO check values we got from user
// put user values into settings array
$SETTINGS[PSNG_WEBSITE] = $_REQUEST[PSNG_WEBSITE];
if (substr($SETTINGS[PSNG_WEBSITE],0,4) != "http") {
// user hasn't put a http in front of the url of the website
$SETTINGS[PSNG_WEBSITE] = "http://".$SETTINGS[PSNG_WEBSITE];
}
// TODO test this, if it's working with e.g. http://enarion.net
if (substr($SETTINGS[PSNG_WEBSITE], -1) != '/' && substr($SETTINGS[PSNG_WEBSITE], -1) != "\\") $SETTINGS[PSNG_WEBSITE] .= '/';
$SETTINGS[PSNG_PAGEROOT] = addslashes($_REQUEST[PSNG_PAGEROOT]);
if (substr($SETTINGS[PSNG_PAGEROOT], -1) != '/' && substr($SETTINGS[PSNG_PAGEROOT], -1) != "\\") $SETTINGS[PSNG_PAGEROOT] .= '/';
// sitemap is the file after the website-part of the sitemap_url
/* $sitemap = str_replace($SETTINGS[PSNG_WEBSITE], '', $_REQUEST[PSNG_SITEMAP_URL]);
$SETTINGS[PSNG_SITEMAP_FILE] = substr($SETTINGS[PSNG_PAGEROOT],0,strlen($SETTINGS[PSNG_PAGEROOT])) . $sitemap;
$SETTINGS[PSNG_SITEMAP_URL] = $SETTINGS[PSNG_WEBSITE] . $sitemap;
*/
$SETTINGS[PSNG_SITEMAP_FILE] = $_REQUEST[PSNG_SITEMAP_FILE];
$SETTINGS[PSNG_TXTSITEMAP_FILE] = $_REQUEST[PSNG_TXTSITEMAP_FILE];
$SETTINGS[PSNG_SITEMAP_URL] = $_REQUEST[PSNG_SITEMAP_FILE];
if (isset($_REQUEST[PSNG_TIMEOUT])) {
$SETTINGS[PSNG_TIMEOUT] = PSNG_TIMEOUT_FORCE;
if ($_REQUEST[PSNG_TIMEOUT_TIME_DURATION] != $SETTINGS[PSNG_TIMEOUT_TIME_DURATION]) {
$SETTINGS[PSNG_TIMEOUT_TIME_DURATION] = $_REQUEST[PSNG_TIMEOUT_TIME_DURATION];
$SETTINGS[PSNG_TIMEOUT_TIME_DEADLINE] = $SETTINGS[PSNG_TIMEOUT_TIME_START] + $SETTINGS[PSNG_TIMEOUT_TIME_DURATION] - $SETTINGS[PSNG_TIMEOUT_TIME_SHUTDOWN] -1;
}
} else {
$SETTINGS[PSNG_TIMEOUT] = PSNG_TIMEOUT_NONE;
}
if (isset($_REQUEST[PSNG_CRAWLER_URL])) $SETTINGS[PSNG_CRAWLER_URL] = $_REQUEST[PSNG_CRAWLER_URL];
if (isset($_REQUEST[PSNG_SCAN_LOCAL])) $SETTINGS[PSNG_SCAN_LOCAL] = TRUE; else $SETTINGS[PSNG_SCAN_LOCAL] = FALSE;
if (isset($_REQUEST[PSNG_SCAN_WEBSITE])) $SETTINGS[PSNG_SCAN_WEBSITE] = TRUE; else $SETTINGS[PSNG_SCAN_WEBSITE] = FALSE;
if (isset($_REQUEST[PSNG_PINGGOOGLE])) $SETTINGS[PSNG_PINGGOOGLE] = TRUE; else $SETTINGS[PSNG_PINGGOOGLE] = FALSE;
if (isset($_REQUEST[PSNG_SCAN_WEBSITE])) $SETTINGS[PSNG_SCAN_WEBSITE] = TRUE; else $SETTINGS[PSNG_SCAN_WEBSITE] = FALSE;
if (isset($_REQUEST[PSNG_SCAN_WEBSITE_LEVEL])) $SETTINGS[PSNG_SCAN_WEBSITE_LEVEL] = $_REQUEST[PSNG_SCAN_WEBSITE_LEVEL]; else $SETTINGS[PSNG_SCAN_WEBSITE_LEVEL] = 0;
$SETTINGS[PSNG_EDITRESULT] = ($_REQUEST[PSNG_EDITRESULT] != '') ? PSNG_EDITRESULT_TRUE : PSNG_EDITRESULT_FALSE;
$SETTINGS[PSNG_STORE_FILELIST] = $_REQUEST[PSNG_STORE_FILELIST];
$SETTINGS[PSNG_LASTMOD] = $_REQUEST[PSNG_LASTMOD];
$SETTINGS[PSNG_LASTMOD_TIMEFORMAT] = $_REQUEST[PSNG_LASTMOD_TIMEFORMAT];
$SETTINGS[PSNG_CHANGEFREQ] = $_REQUEST[PSNG_CHANGEFREQ];
$SETTINGS[PSNG_CHANGEFREQ_FIXED] = $_REQUEST[PSNG_CHANGEFREQ_FIXED];
$SETTINGS[PSNG_PRIORITY] = $_REQUEST[PSNG_PRIORITY];
$SETTINGS[PSNG_PRIORITY_FIXED] = $_REQUEST[PSNG_PRIORITY_FIXED];
if ($_REQUEST[PSNG_DISALLOW_DIR] != "") $SETTINGS[PSNG_DISALLOW_DIR] = toArray($_REQUEST[PSNG_DISALLOW_DIR]);
if ($_REQUEST[PSNG_DISALLOW_FILE] != "") $SETTINGS[PSNG_DISALLOW_FILE] = toArray($_REQUEST[PSNG_DISALLOW_FILE]);
if ($_REQUEST[PSNG_DISALLOW_KEY] != "") $SETTINGS[PSNG_DISALLOW_KEY] = toArray($_REQUEST[PSNG_DISALLOW_KEY]);
$tmp = array();
foreach($SETTINGS[PSNG_DISALLOW_DIR] as $k => $v) {
if ($v != '') $tmp[] = $v;
}
$SETTINGS[PSNG_DISALLOW_DIR] = $tmp;
$tmp = array();
foreach($SETTINGS[PSNG_DISALLOW_FILE] as $k => $v) {
if ($v != '') $tmp[] = $v;
}
$SETTINGS[PSNG_DISALLOW_FILE] = $tmp;
$tmp = array();
foreach($SETTINGS[PSNG_DISALLOW_KEY] as $k => $v) {
if ($v != '') $tmp[] = $v;
}
$SETTINGS[PSNG_DISALLOW_KEY] = $tmp;
$SETTINGS[PSNG_COMPRESS_SITEMAP] = isset($_REQUEST[PSNG_COMPRESS_SITEMAP]) ? TRUE : FALSE;
// TODO maybe try to open sitemap file
// store settings in session
$_SESSION[PSNG_SETTINGS] = $SETTINGS;
// write settings to file
$res = storeSettings($SETTINGS, $SETTINGS[PSNG_FILE_SETTINGS], "SETTINGS");
if (!is_null($res)) {
$LAYOUT->addWarning($res, 'Settings could not be written to file ' . $SETTINGS[PSNG_FILE_SETTINGS] . '!');
} else {
$LAYOUT->addSuccess('', 'Settings written to file ' . $SETTINGS[PSNG_FILE_SETTINGS] . '!');
}
debug($SETTINGS, 'Got and computed settings');
return TRUE;
}
function checkUpdateStatus() {
global $LAYOUT, $SETTINGS;
if (array_key_exists('last_update_time', $SETTINGS) && (time() - $SETTINGS['last_update_time'] < 3600)) {
$LAYOUT->addWarning('Checking for new updates is only allowed once per hour. Last check was ' . getDateTimeISO($SETTINGS['last_update_time']));
return TRUE;
}
$SETTINGS['last_update_time'] = time();
debug(PSNG_URL_UPDATESTATUS,'Grabbing update status');
$res = file(PSNG_URL_UPDATESTATUS);
debug($res,'Result of checkUpdateStatus');
if (count($res) == 0) {
$LAYOUT->addError("Couldn't connect to check latest version");
return FALSE;
}
// current updatestatus only supports one line of response, upcoming might support more than one
$stat = explode('---', trim($res[0]));
$currentVersion = (isset($stat[0])) ? trim($stat[0]) : ''; // this is all that's needed for version_compare() mk/2005-11-13
$latestRelease = (isset($stat[1])) ? trim($stat[1]) : '';
$latestVersion = (isset($stat[2])) ? trim($stat[2]) : '';
$comparison = version_compare($currentVersion,PSNG_VERSION);
switch($comparison)
{
case +1:
// version online is lower than version of current script (should not happen!)
$LAYOUT->addSuccess('','Your version ('.PSNG_VERSION.') seems to be newer than the one online ('.$currentVersion.') - better hold on to it!'); # ;-) mk/2005-11-13
break;
case 0:
// versions are identical
$LAYOUT->addSuccess('','You have version '.PSNG_VERSION.'. There is no newer version available.');
break;
case -1:
// version online is higher than version of current script
$update_url = PSNG_URL_DOWNLOAD;
$LAYOUT->addText('Please visit the download page at <a href="'.$update_url.'">'.$update_url.'</a>');
$LAYOUT->addWarning('Latest version of this release is ' .$currentVersion,'New version available!');
}
return TRUE;
}
?>