Showing
3 changed files
with
1102 additions
and
2 deletions
| 1 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |
| 2 | + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
| 1 | 3 | <html> |
| 2 | 4 | <head> |
| 3 | 5 | <title>Meine ersten Ajax Erfahrungen</title> |
| ... | ... | @@ -27,11 +29,10 @@ |
| 27 | 29 | german_field.value = translation.german; |
| 28 | 30 | french_field.value = translation.french.val1; |
| 29 | 31 | } |
| 30 | - break; | |
| 32 | + return true; | |
| 31 | 33 | |
| 32 | 34 | default: |
| 33 | 35 | return false; |
| 34 | - break; | |
| 35 | 36 | } |
| 36 | 37 | } |
| 37 | 38 | ... | ... |
lock.php
0 → 100644
| 1 | +<? | |
| 2 | +//------------------------------------------- | |
| 3 | +// | |
| 4 | +// ocs_user_add - last update 2006-10-23 | |
| 5 | +// | |
| 6 | +// based on: | |
| 7 | +// | |
| 8 | +// Adressupdate - last update wgi 2006-05-23 | |
| 9 | +// | |
| 10 | +//------------------------------------------- | |
| 11 | + | |
| 12 | +header("Content-Type: text/html; charset=UTF-8"); | |
| 13 | +$basepath="/data/www/localhost/htdocs/inc"; | |
| 14 | + | |
| 15 | + | |
| 16 | +include "$basepath/mkhead.php"; | |
| 17 | + | |
| 18 | + | |
| 19 | +function load_users () | |
| 20 | +{ | |
| 21 | + $localFile = "/var/www/localhost/htdocs/osc_user_add/xfer/web-useradd"; | |
| 22 | + | |
| 23 | + exec ("scp webuseradd@vam-osc5:/etc/web-useradd ".$localFile." 2>&1", | |
| 24 | + $out, $ret); | |
| 25 | + | |
| 26 | + if ($ret != 0) | |
| 27 | + { | |
| 28 | + print "scp returns: ".$ret."<BR>\n"; | |
| 29 | + print "Output was:<BR><PRE>\n"; | |
| 30 | + | |
| 31 | + print_r ($out); | |
| 32 | + | |
| 33 | + print "</PRE>\n"; | |
| 34 | + } | |
| 35 | + else | |
| 36 | + { | |
| 37 | + $fh = fopen ($localFile, "r"); | |
| 38 | + | |
| 39 | + $line = fgets ($fh); | |
| 40 | + while (! feof ($fh)) | |
| 41 | + { | |
| 42 | + $buf = explode (":", trim ($line)); | |
| 43 | + if ($buf[1] == "") | |
| 44 | + $buf[1] = "no-change"; | |
| 45 | + if ($buf[4] != "delete") | |
| 46 | + $users[$buf[0]] = array ($buf[1], $buf[2], $buf[3], $buf[4]); | |
| 47 | + | |
| 48 | + $line = fgets ($fh); | |
| 49 | + } | |
| 50 | + | |
| 51 | + fclose ($fh); | |
| 52 | + } | |
| 53 | + | |
| 54 | + exec ("scp webuseradd@vam-osc6:/etc/web-useradd ".$localFile." 2>&1", | |
| 55 | + $out, $ret); | |
| 56 | + | |
| 57 | + if ($ret != 0) | |
| 58 | + { | |
| 59 | + print "scp returns: ".$ret."<BR>\n"; | |
| 60 | + print "Output was:<BR><PRE>\n"; | |
| 61 | + | |
| 62 | + print_r ($out); | |
| 63 | + | |
| 64 | + print "</PRE>\n"; | |
| 65 | + } | |
| 66 | + else | |
| 67 | + { | |
| 68 | + $fh = fopen ($localFile, "r"); | |
| 69 | + | |
| 70 | + $line = fgets ($fh); | |
| 71 | + while (! feof ($fh)) | |
| 72 | + { | |
| 73 | + $buf = explode (":", trim ($line)); | |
| 74 | + if ($buf[1] == "") | |
| 75 | + if ($users[$buf[0]] && $users[$buf[0]][0] != "") | |
| 76 | + $buf[1] = $users[$buf[0]][0]; | |
| 77 | + else | |
| 78 | + $buf[1] = "no-change"; | |
| 79 | + if ($buf[4] != "delete") | |
| 80 | + $users[$buf[0]] = array ($buf[1], $buf[2], $buf[3], $buf[4]); | |
| 81 | + | |
| 82 | + $line = fgets ($fh); | |
| 83 | + } | |
| 84 | + | |
| 85 | + fclose ($fh); | |
| 86 | + } | |
| 87 | + | |
| 88 | + exec ("rm ".$localFile." 2>&1", $out, $ret); | |
| 89 | + | |
| 90 | + return $users; | |
| 91 | +} | |
| 92 | + | |
| 93 | +function load_cats () | |
| 94 | +{ | |
| 95 | + /* | |
| 96 | + * OK, ich hole dir verfügbaren Rubriken anhand der existierenden | |
| 97 | + * Verzeichniss unter /vol1/www/bhi_upload. Will man also eine | |
| 98 | + * Rubrik hinzufügen, so muß man dort nur das Verzeichnis anlegen. | |
| 99 | + */ | |
| 100 | + exec ("ssh -l webuseradd vam-osc5 ". | |
| 101 | + "\"ls -p /vol1/www/bhi_upload | sed '/\/$/p;d'\" ". | |
| 102 | + "2>/dev/null", | |
| 103 | + $out, $ret); | |
| 104 | + | |
| 105 | + foreach ($out as $key=>$line) | |
| 106 | + $out[$key] = preg_replace ("/^(.*)\/$/", "\\1", $line); | |
| 107 | + | |
| 108 | + return $out; | |
| 109 | + /* return array ("kfz", "immo", "trauer"); */ | |
| 110 | +} | |
| 111 | + | |
| 112 | +function update_users ($users) | |
| 113 | +{ | |
| 114 | + $fh = fopen ("/tmp/web-useradd", "w"); | |
| 115 | + | |
| 116 | + foreach ($users as $key => $value) | |
| 117 | + { | |
| 118 | + fputs ($fh, $key.":".$value[0].":".$value[1].":". | |
| 119 | + $value[2].":".$value[3]."\n"); | |
| 120 | + } | |
| 121 | + | |
| 122 | + fclose ($fh); | |
| 123 | + | |
| 124 | + exec ("scp /tmp/web-useradd webuseradd@vam-osc5:/etc/web-useradd 2>&1", | |
| 125 | + $out, $ret); | |
| 126 | + | |
| 127 | + if ($ret != 0) | |
| 128 | + { | |
| 129 | + print "scp to vam-osc5 returns: ".$ret."<BR>\n"; | |
| 130 | + print "Output was:<BR><PRE>\n"; | |
| 131 | + | |
| 132 | + print_r ($out); | |
| 133 | + | |
| 134 | + print "</PRE>\n"; | |
| 135 | + } | |
| 136 | + | |
| 137 | + exec ("scp /tmp/web-useradd webuseradd@vam-osc6:/etc/web-useradd 2>&1", | |
| 138 | + $out, $ret); | |
| 139 | + | |
| 140 | + if ($ret != 0) | |
| 141 | + { | |
| 142 | + print "scp to vam-osc6 returns: ".$ret."<BR>\n"; | |
| 143 | + print "Output was:<BR><PRE>\n"; | |
| 144 | + | |
| 145 | + print_r ($out); | |
| 146 | + | |
| 147 | + print "</PRE>\n"; | |
| 148 | + } | |
| 149 | + | |
| 150 | + exec ("rm /tmp/web-useradd 2>&1", $out, $ret); | |
| 151 | +} | |
| 152 | + | |
| 153 | + | |
| 154 | +function show_users ($users) | |
| 155 | +{ | |
| 156 | + print "<H1>User auf vam-osc5 und vam-osc6</H1>\n"; | |
| 157 | + | |
| 158 | + if ($_SESSION['editable'] == TRUE) | |
| 159 | + { | |
| 160 | + print "<A href=\"".$SCRIPT_NAME."?action=add\">"; | |
| 161 | + print "Benutzer hinzufügen</A>"; | |
| 162 | + } | |
| 163 | + else | |
| 164 | + { | |
| 165 | + print "<A href=\"".$SCRIPT_NAME."?action=startedit\">"; | |
| 166 | + print "Benutzer bearbeiten</A>"; | |
| 167 | + } | |
| 168 | + | |
| 169 | + print "<TABLE border=\"0\">"; | |
| 170 | + | |
| 171 | + $rownum = 0; | |
| 172 | + | |
| 173 | + if (isset ($users)) | |
| 174 | + { | |
| 175 | + foreach ($users as $name => $data) | |
| 176 | + { | |
| 177 | + if (($rownum % 2) != 0) | |
| 178 | + { | |
| 179 | + $bg="#EEEEEE"; // leight | |
| 180 | + } | |
| 181 | + else | |
| 182 | + { | |
| 183 | + $bg="#CCCCCC"; // dark | |
| 184 | + } | |
| 185 | + | |
| 186 | + $tdStyle = ""; | |
| 187 | + $delText = "löschen"; | |
| 188 | + | |
| 189 | + if ($data[3] == "delete") | |
| 190 | + { | |
| 191 | + $tdStyle = "style=\"text-decoration: line-through;\""; | |
| 192 | + $delText = "nicht löschen"; | |
| 193 | + } | |
| 194 | + | |
| 195 | + print "<TR><TD width=70 bgcolor=".$bg." ".$tdStyle.">".$name."</TD>"; | |
| 196 | + print "<TD width=150 bgcolor=".$bg." ".$tdStyle.">".$data[1]."</TD>"; | |
| 197 | + print "<TD width=50 bgcolor=".$bg." ".$tdStyle.">".$data[2]."</TD>"; | |
| 198 | + if ($_SESSION['editable'] == TRUE) | |
| 199 | + { | |
| 200 | + if ($data[3] != "delete") | |
| 201 | + { | |
| 202 | + print "<TD><A href=\""; | |
| 203 | + print $SCRIPT_NAME."?action=edit&name=".$name."\">"; | |
| 204 | + print "bearbeiten</A></TD>"; | |
| 205 | + print "<TD><A href=\""; | |
| 206 | + } | |
| 207 | + else | |
| 208 | + print "<TD colspan=2><A href=\""; | |
| 209 | + print $SCRIPT_NAME."?action=delete&name=".$name."\">"; | |
| 210 | + print $delText."</A></TD>"; | |
| 211 | + } | |
| 212 | + print "</TR>\n"; | |
| 213 | + | |
| 214 | + $rownum ++; | |
| 215 | + } | |
| 216 | + } | |
| 217 | + | |
| 218 | + if ($_SESSION['editable'] == TRUE) | |
| 219 | + { | |
| 220 | + print "<TR><TD colspan=\"3\">"; | |
| 221 | + print "<A href=\"".$SCRIPT_NAME."?action=update\">abschicken</A>"; | |
| 222 | + print " <A href=\"".$SCRIPT_NAME."?action=abort\">abbrechen</A>"; | |
| 223 | + print "</TD></TR>"; | |
| 224 | + } | |
| 225 | + print "</TABLE>\n"; | |
| 226 | +} | |
| 227 | + | |
| 228 | +function edit_user ($users, $cats, $name) | |
| 229 | +{ | |
| 230 | + print "<FORM action=\"".$SCRIPT_NAME."?".strip_tags (SID)."\">"; | |
| 231 | + print "<INPUT type=\"HIDDEN\" name=\"action\" value=\"set\">"; | |
| 232 | + print "<INPUT type=\"HIDDEN\" name=\"oldpass\" value=\"".$users[$name][0]."\">"; | |
| 233 | + print "<TABLE border=\"0\">"; | |
| 234 | + print "<TR><TD>Username: </TD>"; | |
| 235 | + print "<TD width=\"300\">"; | |
| 236 | + | |
| 237 | + if (! isset ($name)) | |
| 238 | + { | |
| 239 | + print "<INPUT type=\"text\" name=\"name\" value=\"".$name."\"></TD>"; | |
| 240 | + } | |
| 241 | + else | |
| 242 | + { | |
| 243 | + print "<INPUT type=\"hidden\" name=\"name\" value=\"".$name."\">"; | |
| 244 | + print $name."</TD>"; | |
| 245 | + } | |
| 246 | + | |
| 247 | + print "</TR>\n"; | |
| 248 | + print "<TR><TD>Rubrik: </TD>"; | |
| 249 | + print "<TD width=\"300\">"; | |
| 250 | + print "<SELECT name=\"cat\" size=\"1\">"; | |
| 251 | + | |
| 252 | + foreach ($cats as $cat) | |
| 253 | + { | |
| 254 | + print "<OPTION"; | |
| 255 | + if ($users[$name][2] == $cat) | |
| 256 | + print " SELECTED>"; | |
| 257 | + else | |
| 258 | + print ">"; | |
| 259 | + | |
| 260 | + print $cat."</OPTION>"; | |
| 261 | + } | |
| 262 | + | |
| 263 | + print "</SELECT>"; | |
| 264 | + print "</TD>"; | |
| 265 | + print "</TR>\n"; | |
| 266 | + print "<TR><TD>Vollständiger Name: </TD>"; | |
| 267 | + print "<TD width=\"300\">"; | |
| 268 | + print "<INPUT type=\"text\" name=\"full\" value=\"".$users[$name][1]."\">"; | |
| 269 | + print "</TD>"; | |
| 270 | + print "</TR>\n"; | |
| 271 | + print "<TR><TD>Passwort: </TD>"; | |
| 272 | + print "<TD width=\"300\">"; | |
| 273 | + print "<INPUT type=\"password\" name=\"pass\" value=\"".$users[$name][0]."\">"; | |
| 274 | + print "</TD>"; | |
| 275 | + print "</TR>\n"; | |
| 276 | + print "<TR><TD colspan=\"2\" align=\"right\">"; | |
| 277 | + print "<A href=\"".$SCRIPT_NAME."?action=show\">abbrechen</A>"; | |
| 278 | + print " <INPUT type=\"submit\" value=\"abschicken\">"; | |
| 279 | + print "</TABLE>\n"; | |
| 280 | + print "</FORM>"; | |
| 281 | +} | |
| 282 | + | |
| 283 | +/* | |
| 284 | + * gibt FALSE zurück falls kein Lock gesetzt werden konnte, ansonsten die | |
| 285 | + * aktuelle lockid. Diese wird bei free_lock benötigt um den lock wieder | |
| 286 | + * freizugeben. | |
| 287 | + * Folgende Fälle können eintreten: | |
| 288 | + * 1. Das Lockfile enthält keine Daten und myId ist leer. | |
| 289 | + * Das bedeutet: es existiert keine Sperre auf die Daten und wir hatten | |
| 290 | + * bisher keine Sperre auf die Daten. | |
| 291 | + * Daraufhin wird eine neue lock-id generiert und zusammen mit dem | |
| 292 | + * aktuellen Timestamp in das lockfile gegeben. Die generierte lock-id | |
| 293 | + * wird zurückgegeben. | |
| 294 | + * 2. Das Lockfile enthält eine Sperre und myId ist leer. | |
| 295 | + * Das bedeutet: es existiert eine Sperre auf die Daten, die nicht von | |
| 296 | + * dieser PHP session generiert wurde. | |
| 297 | + * 2 Faelle: | |
| 298 | + * (lockTime + 300) >= time (): Die Sperre ist nicht abgelaufen => es | |
| 299 | + * kann keine neue Sperre angelegt werden. | |
| 300 | + * (lockTime + 300) < time (): Die Sperre ist abgelaufen => neue lock-id | |
| 301 | + * generieren, in Datei eintragen und | |
| 302 | + * zurückgeben. | |
| 303 | + * 3. Das Lockfile enthält eine Sperre und myId != lockId. | |
| 304 | + * Das bedeutet: In der aktuellen PHP session wurde erfolgreich eine | |
| 305 | + * Sperre erzeugt, die aber aufgrund dessen das ein timeout | |
| 306 | + * eingetreten ist (d.h. in der aktuellen Session wurde länger | |
| 307 | + * als 5 Minuten auf keinen link mehr geklickt.) nicht mehr | |
| 308 | + * gültig war und in der zwischenzeit hat jemand anderes | |
| 309 | + * daher eine neue Sperre auf die Daten eingerichtet siehe 2. | |
| 310 | + * folgende Fälle: | |
| 311 | + * die 2 Unterfälle von 2. | |
| 312 | + * 4. Das Lockfile enthält keine Daten, aber myId ist nicht leer. | |
| 313 | + * Das bedeutet: In der aktuellen PHP session wurde ein lock eingerichtet. | |
| 314 | + * Der Timeout verstrich und jemand anderes hat änderungen | |
| 315 | + * an den Daten vorgenommen. Konsequenz: Die Daten in dieser | |
| 316 | + * PHP session sind nicht mehr aktuell. | |
| 317 | + * Da der aktuelle Lock daher komplett ungültig geworden ist wird nichts | |
| 318 | + * in die Datei eingetragen und eine leere lock-id zurückgegeben. | |
| 319 | + * An anderer Stelle (check_lock) werden anhand der Information das myId | |
| 320 | + * nich leer war, aber die zurückgegebene id leer ist alle anderen Daten | |
| 321 | + * neu initialisiert. | |
| 322 | + * 5. Das Lockfile enthält eine Sperre und myId == lockId. | |
| 323 | + * Das bedeutet: Innerhalb dieser PHP session wurde eine Sperre eingerichtet | |
| 324 | + * die auch weiterhin gültig ist. | |
| 325 | + * Die lockTime wird in der Datei aktualisiert und lockId zurückgegeben. | |
| 326 | + */ | |
| 327 | +function get_lock ($lockFile, $myId) | |
| 328 | +{ | |
| 329 | + $newId = ""; | |
| 330 | + | |
| 331 | + $lockFd = fopen ($lockFile, "a+"); | |
| 332 | + if ($lockFd != FALSE) | |
| 333 | + { | |
| 334 | + if (flock ($lockFd, LOCK_EX) != FALSE) | |
| 335 | + { | |
| 336 | + rewind ($lockFd); | |
| 337 | + $lockEntry = explode ('/', trim (fgets ($lockFd))); | |
| 338 | + $lockId = $lockEntry[0]; | |
| 339 | + $lockTime = $lockEntry[1]; | |
| 340 | + | |
| 341 | + if ($lockId == $myId || | |
| 342 | + /* lockTime nur pruefen wenn Sie in der Datei stand */ | |
| 343 | + ($lockTime != "" && ($lockTime + 300) < time ())) | |
| 344 | + { | |
| 345 | + ftruncate ($lockFd, 0); | |
| 346 | + if ($lockId != "" && $lockId == $myId) | |
| 347 | + $newId = $myId; | |
| 348 | + else | |
| 349 | + $newId = uniqid (); | |
| 350 | + fputs ($lockFd, $newId."/".time ()."\n"); | |
| 351 | + } | |
| 352 | + | |
| 353 | + fclose ($lockFd); | |
| 354 | + } | |
| 355 | + } | |
| 356 | + | |
| 357 | + return $newId; | |
| 358 | +} | |
| 359 | + | |
| 360 | +function free_lock ($lockFile, $lockId) | |
| 361 | +{ | |
| 362 | + $lockFd = fopen ($lockFile, "r+"); | |
| 363 | + if ($lockFd != FALSE) | |
| 364 | + { | |
| 365 | + if (flock ($lockFd, LOCK_EX) != FALSE) | |
| 366 | + { | |
| 367 | + $lockEntry = explode ('/', trim (fgets ($lockFd))); | |
| 368 | + $oldId = $lockEntry[0]; | |
| 369 | + | |
| 370 | + if ($lockId == $oldId) | |
| 371 | + ftruncate ($lockFd, 0); | |
| 372 | + | |
| 373 | + fclose ($lockFd); | |
| 374 | + } | |
| 375 | + } | |
| 376 | +} | |
| 377 | + | |
| 378 | +function check_lock ($lockFile, $lockId) | |
| 379 | +{ | |
| 380 | + if ($_SESSION['editable'] == TRUE) | |
| 381 | + { | |
| 382 | + $gotId = get_lock ($lockFile, $lockId); | |
| 383 | + | |
| 384 | + if ($gotId == FALSE) | |
| 385 | + { | |
| 386 | + if ($lockId == FALSE) | |
| 387 | + { | |
| 388 | + print "<TABLE BGCOLOR=\"yellow\"><TR><TD>Konnte keine Sperre zum "; | |
| 389 | + print "bearbeiten der Benutzerdaten anlegen. Jemand anderes "; | |
| 390 | + print "bearbeitet die Daten bereits. Bitte versuchen Sie es in ein "; | |
| 391 | + print "paar Minuten noch einmal.</TD></TR></TABLE>"; | |
| 392 | + } | |
| 393 | + else | |
| 394 | + { | |
| 395 | + print "<TABLE BGCOLOR=\"yellow\"><TR><TD>Ihre Sperre ist "; | |
| 396 | + print "ungültig. Vermutlich haben Sie länger als fünf "; | |
| 397 | + print "Minuten keine Modifikationen vorgenommen und jemand "; | |
| 398 | + print "anderes bearbeitet jetzt Benutzerdaten. Leider sind ihre "; | |
| 399 | + print "bisherigen Änderungen dadurch ungültig geworden. "; | |
| 400 | + print "Bitte versuchen Sie es in ein paar Minuten noch einmal."; | |
| 401 | + print "</TD></TR></TABLE>"; | |
| 402 | + } | |
| 403 | + } | |
| 404 | + | |
| 405 | + return $gotId; | |
| 406 | + } | |
| 407 | + | |
| 408 | + return ""; | |
| 409 | +} | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | +$_action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'load'; | |
| 415 | + | |
| 416 | +session_start (); | |
| 417 | + | |
| 418 | +$_SESSION['lockFile'] = | |
| 419 | + '/var/www/localhost/htdocs/osc_user_add/webuseradd.lck'; | |
| 420 | + | |
| 421 | +mkhead ("Benutzer auf vam-osc5 und vam-osc6 anlegen ...", | |
| 422 | + "bar-edvtools", | |
| 423 | + "Benutzertool vam-osc5 und vam-osc6"); | |
| 424 | + | |
| 425 | +if ($_action == "load" || $_action == "startedit") | |
| 426 | +{ | |
| 427 | + session_unregister ("users"); | |
| 428 | + session_unregister ("cats"); | |
| 429 | +} | |
| 430 | + | |
| 431 | +if (! isset ($_SESSION['users'])) | |
| 432 | + $_SESSION['users'] = load_users (); | |
| 433 | + | |
| 434 | +if (! isset ($_SESSION['cats'])) | |
| 435 | + $_SESSION['cats'] = load_cats (); | |
| 436 | + | |
| 437 | +if (! isset ($_SESSION['editable'])) | |
| 438 | + $_SESSION['editable'] = FALSE; | |
| 439 | + | |
| 440 | +if ($_action == 'startedit') | |
| 441 | + $_SESSION['editable'] = TRUE; | |
| 442 | + | |
| 443 | +$_SESSION['lockId'] = check_lock ($_SESSION['lockFile'], $_SESSION['lockId']); | |
| 444 | +if ($_SESSION['lockId'] == FALSE) | |
| 445 | +{ | |
| 446 | + $_SESSION['editable'] = FALSE; | |
| 447 | + | |
| 448 | + show_users ($_SESSION['users']); | |
| 449 | +} | |
| 450 | +else | |
| 451 | +{ | |
| 452 | + switch ($_action) | |
| 453 | + { | |
| 454 | + case 'edit': | |
| 455 | + edit_user ($_SESSION['users'], $_SESSION['cats'], $_REQUEST['name']); | |
| 456 | + break; | |
| 457 | + case 'set': | |
| 458 | + $pass = $_REQUEST['pass']=="no-change"?$_REQUEST['pass']: | |
| 459 | + $_REQUEST['oldpass']==$_REQUEST['pass']?$_REQUEST['pass']: | |
| 460 | + crypt ($_REQUEST['pass'], $_REQUEST['name']); | |
| 461 | + | |
| 462 | + $_SESSION['users'][$_REQUEST['name']] = | |
| 463 | + array ($pass, | |
| 464 | + $_REQUEST['full'], | |
| 465 | + $_REQUEST['cat'], | |
| 466 | + time ()); | |
| 467 | + show_users ($_SESSION['users']); | |
| 468 | + break; | |
| 469 | + case 'update': | |
| 470 | + update_users ($_SESSION['users']); | |
| 471 | + print "<TABLE><TR><TD bgcolor=\"yellow\">Daten wurden aktualisiert. "; | |
| 472 | + print "Es kann einige Minuten dauern bis das System die "; | |
| 473 | + print "Änderung übernimmt.</TD></TR></TABLE>\n"; | |
| 474 | + case 'abort': | |
| 475 | + free_lock ($_SESSION['lockFile'], $_SESSION['lockId']); | |
| 476 | + $_SESSION['lockId'] = ""; | |
| 477 | + $_SESSION['editable'] = FALSE; | |
| 478 | + show_users ($_SESSION['users']); | |
| 479 | + break; | |
| 480 | + case 'add': | |
| 481 | + edit_user ($_SESSION['users'], $_SESSION['cats'], $_REQUEST['name']); | |
| 482 | + break; | |
| 483 | + case 'delete': | |
| 484 | + if ($_SESSION['users'][$_REQUEST['name']][3] != "delete") | |
| 485 | + $_SESSION['users'][$_REQUEST['name']][3] = "delete"; | |
| 486 | + else | |
| 487 | + $_SESSION['users'][$_REQUEST['name']][3] = time (); | |
| 488 | + show_users ($_SESSION['users']); | |
| 489 | + break; | |
| 490 | + case 'show': | |
| 491 | + default: | |
| 492 | + show_users ($_SESSION['users']); | |
| 493 | + } | |
| 494 | +} | |
| 495 | +?> | |
| 496 | +</td> | |
| 497 | +</tr> | |
| 498 | +<tr> | |
| 499 | +</tr> | |
| 500 | +</table> | |
| 501 | +<PRE> | |
| 502 | +</PRE> | |
| 503 | +</body> | |
| 504 | +</html> | ... | ... |
utils_cache.php
0 → 100644
| 1 | +<?php | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * Mit der Funktion printCachedPage kann ein Script/Modul seinen dynamisch | |
| 5 | + * erzeugten HTML-Inhalt cachen und als statisches HTML einbinden. Die | |
| 6 | + * erzeugten HTML-Dateien liegen unter CACHEDIR/<subclientid>/<script-path>/ | |
| 7 | + * <scriptname>?md5(<request-parameter-liste>).html | |
| 8 | + * | |
| 9 | + * Es wird für jede Seite und jeden Request-Parameter-Kombination, der in | |
| 10 | + * $allowed_req_params angegeben ist, eine Seite im Cache angelegt. | |
| 11 | + * | |
| 12 | + * Parameter: | |
| 13 | + * - $auto_update: erzeugt bei Scriptaufruf eine neue Cache-Datei, wenn: | |
| 14 | + * a) die Cachedatei älter ist als die Scriptdatei oder | |
| 15 | + * b) die Cachedatei älter ist als eine per include/require eingebunden | |
| 16 | + * Scriptdatei | |
| 17 | + * - $update_interval: eine Erneuerung der Cachedatei wird vorgenommen, wenn | |
| 18 | + * die Cachedatei älter als $update_interval ist. | |
| 19 | + * - $script-file: das Script, dessen Inhalt gecached werden soll, i.d.R | |
| 20 | + * __FILE__ | |
| 21 | + * - $allowed_req_params: Liste der erlaubten Request-Parameter, dient zur | |
| 22 | + * Bildung des Cachedateinamens | |
| 23 | + * - $debug: erzeugt Debug-Ausgaben | |
| 24 | + * | |
| 25 | + * Die Einbindung in ein Script erfolgt nach Einbindung per include/require | |
| 26 | + * der zusätzlich erforderlichen Bibliothen mit: | |
| 27 | + * | |
| 28 | + * if (printCachedPage($auto_update,$update_interval,__FILE__)) | |
| 29 | + * return; | |
| 30 | + * | |
| 31 | + * Der mit printCachedPage erzeugte HTML-Bereich wird mit HTML-Kommentaren | |
| 32 | + * umrandet und kann so im Gesamt-Quelltext identifiziert werden. | |
| 33 | + */ | |
| 34 | + | |
| 35 | +define ('MAX_CACHE_WAIT_SECS',1); | |
| 36 | + | |
| 37 | +function printCachedPage ( | |
| 38 | + $script_file, | |
| 39 | + $auto_update = true, | |
| 40 | + $update_interval = 86400, | |
| 41 | + $allowed_req_params = -1, | |
| 42 | + $debug = 0) | |
| 43 | +{ | |
| 44 | + if (USE_SCRIPT_CACHE == 0) | |
| 45 | + return 0; | |
| 46 | + | |
| 47 | + $em_parameter = ""; | |
| 48 | + if (isset ($_REQUEST["em_parameter"])) | |
| 49 | + $em_parameter = $_REQUEST["em_parameter"]; | |
| 50 | + if (!empty($em_parameter)) | |
| 51 | + $GLOBALS["em_parameter"] = $em_parameter; | |
| 52 | + if (!empty($GLOBALS["em_parameter"])) | |
| 53 | + $em_parameter = $GLOBALS["em_parameter"]; | |
| 54 | + | |
| 55 | + $content = ""; | |
| 56 | + if (isset($_REQUEST["NOCACHE"])) | |
| 57 | + { | |
| 58 | + if (isset($_REQUEST["PHP_SELF"])) | |
| 59 | + { | |
| 60 | + $_SERVER["PHP_SELF"]=$_REQUEST["PHP_SELF"]; | |
| 61 | + | |
| 62 | + // --- DEBUG OUTPUT ------- | |
| 63 | + if ($debug) | |
| 64 | + echo "<br />PHP_SELF wurde gesetzt: " . $_SERVER["PHP_SELF"]; | |
| 65 | + // --- END DEBUG OUTPUT --- | |
| 66 | + | |
| 67 | + } | |
| 68 | + return 0; | |
| 69 | + } | |
| 70 | + | |
| 71 | + // --- DEBUG OUTPUT ------- | |
| 72 | + $t1 = NULL; | |
| 73 | + | |
| 74 | + if ($debug) | |
| 75 | + $t1 = getMilliSeconds (); | |
| 76 | + | |
| 77 | + if ($debug) | |
| 78 | + { | |
| 79 | + echo "<br />Startzeit: ".strftime("%H:%M:%S"); | |
| 80 | + echo "<br />Script-Datei: ".$script_file; | |
| 81 | + echo "<br />PHP_SELF: ".$_SERVER["PHP_SELF"]; | |
| 82 | + echo "<br />Erlaubte Cache-Dateien pro Verzeichnis: " . | |
| 83 | + MAX_FILES_IN_CACHE_DIR; | |
| 84 | + } | |
| 85 | + // --- END DEBUG OUTPUT --- | |
| 86 | + | |
| 87 | + $subclient_id = getSubclientIDByUrl(); | |
| 88 | + | |
| 89 | + $len = strlen ($_SERVER["DOCUMENT_ROOT"]); | |
| 90 | + $script_name = substr ($script_file, $len); | |
| 91 | + | |
| 92 | + // --- DEBUG OUTPUT ------- | |
| 93 | + if ($debug) | |
| 94 | + echo "<br>DOCUMENT ROOT: " . $_SERVER["DOCUMENT_ROOT"]; | |
| 95 | + | |
| 96 | + if ($debug) | |
| 97 | + echo "<br />Script-Name: $script_name"; | |
| 98 | + // --- END DEBUG OUTPUT --- | |
| 99 | + | |
| 100 | + $cache_file = realpath (CACHEDIR) . "/" . $subclient_id . "/" . | |
| 101 | + substr(dirname($script_name),1) . "/" . basename($script_name) . "/" . | |
| 102 | + basename($script_name,".php"); | |
| 103 | + | |
| 104 | + $params = ""; | |
| 105 | + $query_string = ""; | |
| 106 | + | |
| 107 | + foreach ($_REQUEST as $key => $val) | |
| 108 | + { | |
| 109 | + if (is_array ($allowed_req_params) && | |
| 110 | + in_array ($key,$allowed_req_params)) | |
| 111 | + { | |
| 112 | + $val = urlencode (trim($val)); | |
| 113 | + $key = urlencode (trim($key)); | |
| 114 | + | |
| 115 | + // --- DEBUG OUTPUT ------- | |
| 116 | + if ($debug) | |
| 117 | + echo "<br />Hänge Request-Parameter an: _$key-$val"; | |
| 118 | + // --- END DEBUG OUTPUT --- | |
| 119 | + | |
| 120 | + $params .= "_". $key . "-" . $val; | |
| 121 | + $query_string .= $key . "=" . $val . "&"; | |
| 122 | + } | |
| 123 | + } | |
| 124 | + | |
| 125 | + if (!empty ($em_parameter)) | |
| 126 | + { | |
| 127 | + $params .= "_" . $em_parameter; | |
| 128 | + $query_string .= "em_parameter=" . $em_parameter; | |
| 129 | + } | |
| 130 | + | |
| 131 | + if (!empty ($params)) | |
| 132 | + $cache_file = $cache_file . "_" . md5($params) . ".html"; | |
| 133 | + else | |
| 134 | + $cache_file = $cache_file . ".html"; | |
| 135 | + | |
| 136 | + $url = getProtocol () . "://" . $_SERVER["SERVER_NAME"] . $script_name . | |
| 137 | + "?" . $query_string; | |
| 138 | + $cached_dir = dirname($cache_file); | |
| 139 | + | |
| 140 | + // --- DEBUG OUTPUT ------- | |
| 141 | + if ($debug) | |
| 142 | + { | |
| 143 | + echo "<br />Cache-Datei: $cache_file"; | |
| 144 | + echo "<br />Script-Datei: $script_file"; | |
| 145 | + echo "<br />URL: ".htmlspecialchars($url); | |
| 146 | + echo "<br />Cache Dir: $cached_dir"; | |
| 147 | + } | |
| 148 | + // --- END DEBUG OUTPUT --- | |
| 149 | + | |
| 150 | + if (!is_dir ($cached_dir)) | |
| 151 | + { | |
| 152 | + if (!is_dir (CACHEDIR . $subclient_id)) | |
| 153 | + mkdir (CACHEDIR . $subclient_id); | |
| 154 | + $cachedir = CACHEDIR . $subclient_id; | |
| 155 | + | |
| 156 | + $dir_arr = explode ("/", dirname($script_name) . "/" . | |
| 157 | + basename($script_name)); | |
| 158 | + | |
| 159 | + foreach ($dir_arr as $dir) | |
| 160 | + { | |
| 161 | + if (!is_dir($cachedir . "/" . $dir)) | |
| 162 | + { | |
| 163 | + mkdir ($cachedir. "/" . $dir); | |
| 164 | + chmod ($cachedir. "/" . $dir, 0777); | |
| 165 | + | |
| 166 | + // --- DEBUG OUTPUT ------- | |
| 167 | + if ($debug) | |
| 168 | + echo "<br />Erzeuge Verzeichnis: $cachedir/$dir"; | |
| 169 | + // --- END DEBUG OUTPUT --- | |
| 170 | + } | |
| 171 | + $cachedir .= "/" . $dir; | |
| 172 | + } | |
| 173 | + } | |
| 174 | + | |
| 175 | + $is_updated = 0; | |
| 176 | + if (!file_exists ($cache_file)) | |
| 177 | + { | |
| 178 | + $file_count = count (scandir ($cached_dir)) - 2; | |
| 179 | + | |
| 180 | + // --- DEBUG OUTPUT ------- | |
| 181 | + if ($debug) | |
| 182 | + echo "<br />Es sind $file_count im Cacheverzeichnis. " . | |
| 183 | + "Erlaubt sind " . MAX_FILES_IN_CACHE_DIR. "."; | |
| 184 | + // --- END DEBUG OUTPUT --- | |
| 185 | + | |
| 186 | + if ($file_count <= MAX_FILES_IN_CACHE_DIR) | |
| 187 | + { | |
| 188 | + $content = makeCacheFile ($cache_file, $url, $debug); | |
| 189 | + $is_updated = 1; | |
| 190 | + | |
| 191 | + // --- DEBUG OUTPUT ------- | |
| 192 | + if ($debug) | |
| 193 | + echo "<br />Cache-Datei wurde erzeugt, " . | |
| 194 | + "weil diese nicht existierte."; | |
| 195 | + // --- END DEBUG OUTPUT --- | |
| 196 | + } | |
| 197 | + else | |
| 198 | + { | |
| 199 | + // --- DEBUG OUTPUT ------- | |
| 200 | + if ($debug) | |
| 201 | + { | |
| 202 | + echo "<br />Es sind mehr Dateien im Cacheverzeichnis als " . | |
| 203 | + "erlaubt: " . $file_count . | |
| 204 | + "<br />Die Seite kann daher nicht gecached werden."; | |
| 205 | + } | |
| 206 | + // --- END DEBUG OUTPUT --- | |
| 207 | + } | |
| 208 | + } | |
| 209 | + else | |
| 210 | + { | |
| 211 | + if ($auto_update) | |
| 212 | + { | |
| 213 | + $do_update=0; | |
| 214 | + | |
| 215 | + if (filemtime($cache_file) < filemtime($script_file)) | |
| 216 | + { | |
| 217 | + $do_update = 1; | |
| 218 | + | |
| 219 | + // --- DEBUG OUTPUT ------- | |
| 220 | + if ($debug) | |
| 221 | + echo "<br />Cache-Datei wird erzeugt, weil die Cache-Datei " . | |
| 222 | + "älter als die Script-Datei ist."; | |
| 223 | + // --- END DEBUG OUTPUT --- | |
| 224 | + } | |
| 225 | + else | |
| 226 | + { | |
| 227 | + $includes = get_included_files (); | |
| 228 | + | |
| 229 | + foreach($includes as $inc) | |
| 230 | + { | |
| 231 | + if (strstr ($inc, realpath (HOME . "/../"))) | |
| 232 | + { | |
| 233 | + // --- DEBUG OUTPUT ------- | |
| 234 | + if ($debug) | |
| 235 | + echo "<br />Untersuche Abhängigkeiten von $inc"; | |
| 236 | + // --- END DEBUG OUTPUT --- | |
| 237 | + | |
| 238 | + if (filemtime($inc) > filemtime($cache_file)) | |
| 239 | + { | |
| 240 | + $do_update=1; | |
| 241 | + | |
| 242 | + // --- DEBUG OUTPUT ------- | |
| 243 | + if ($debug) | |
| 244 | + echo "<br />Cache-Datei wird erzeugt, weil " . | |
| 245 | + $inc . "verändert wurde."; | |
| 246 | + // --- END DEBUG OUTPUT --- | |
| 247 | + | |
| 248 | + break; | |
| 249 | + } | |
| 250 | + } | |
| 251 | + } | |
| 252 | + } | |
| 253 | + | |
| 254 | + if (!$do_update) | |
| 255 | + { | |
| 256 | + $content = getCacheContent ($cache_file, $debug); | |
| 257 | + } | |
| 258 | + else | |
| 259 | + { | |
| 260 | + $content = makeCacheFile ($cache_file, $url, $debug); | |
| 261 | + $is_updated = 1; | |
| 262 | + | |
| 263 | + // --- DEBUG OUTPUT ------- | |
| 264 | + if ($debug) | |
| 265 | + echo "<br />Cache-Datei wurde erzeugt: Auto-Update"; | |
| 266 | + // --- END DEBUG OUTPUT --- | |
| 267 | + } | |
| 268 | + } | |
| 269 | + | |
| 270 | + if ($update_interval >= 10 && !$is_updated) | |
| 271 | + { | |
| 272 | + $diff = time() - filemtime($cache_file); | |
| 273 | + | |
| 274 | + // --- DEBUG OUTPUT ------- | |
| 275 | + if ($debug) | |
| 276 | + echo "<br />Noch " . $update_interval - $diff . | |
| 277 | + " Sekunden bis zum nächsten Interval-Update"; | |
| 278 | + // --- END DEBUG OUTPUT --- | |
| 279 | + | |
| 280 | + if ($diff > $update_interval) | |
| 281 | + { | |
| 282 | + $content = makeCacheFile($cache_file, $url, $debug); | |
| 283 | + $is_updated=1; | |
| 284 | + | |
| 285 | + // --- DEBUG OUTPUT ------- | |
| 286 | + if ($debug) | |
| 287 | + echo "<br />Cache-Datei wurde erzeugt: Interval-Update"; | |
| 288 | + // --- END DEBUG OUTPUT --- | |
| 289 | + } | |
| 290 | + else | |
| 291 | + { | |
| 292 | + $content = getCacheContent($cache_file, $debug); | |
| 293 | + } | |
| 294 | + } | |
| 295 | + } | |
| 296 | + | |
| 297 | + // --- DEBUG OUTPUT ------- | |
| 298 | + if ($debug) | |
| 299 | + echo "<hr />"; | |
| 300 | + // --- END DEBUG OUTPUT --- | |
| 301 | + | |
| 302 | + if (!empty($content)) | |
| 303 | + echo "\n<!-- Cache-Bereich Anfang: ".basename($script_name)." -->\n"; | |
| 304 | + echo $content; | |
| 305 | + if (!empty($content)) | |
| 306 | + echo "\n<!-- Cache-Bereich Ende: ".basename($script_name)." -->\n"; | |
| 307 | + | |
| 308 | + // --- DEBUG OUTPUT ------- | |
| 309 | + if ($debug) | |
| 310 | + echo "<hr /><p />Gecachter Content wurde ausgeliefert."; | |
| 311 | + if ($debug) | |
| 312 | + echo "<br />Verarbeitungsdauer (in ms): ".(intval(getMilliSeconds()-$t1)); | |
| 313 | + // --- END DEBUG OUTPUT --- | |
| 314 | + | |
| 315 | + if (empty($content)) | |
| 316 | + return 0; | |
| 317 | + else | |
| 318 | + return 1; | |
| 319 | +} | |
| 320 | + | |
| 321 | +function makeCacheFile($cache_file, $url, $debug) | |
| 322 | +{ | |
| 323 | + if (preg_match("/^http.*\?.*/",$url)) | |
| 324 | + $url = $url."&NOCACHE=1&PHP_SELF=".urlencode($_SERVER["PHP_SELF"]); | |
| 325 | + else | |
| 326 | + $url = $url."?NOCACHE=1&PHP_SELF=".urlencode($_SERVER["PHP_SELF"]); | |
| 327 | + | |
| 328 | + if ($debug) | |
| 329 | + echo "<br />Encoded URL: $url"; | |
| 330 | + | |
| 331 | + // --- DEBUG OUTPUT ------- | |
| 332 | + $t1 = ''; | |
| 333 | + if ($debug) | |
| 334 | + $t1=getMilliSeconds(); | |
| 335 | + // --- END DEBUG OUTPUT --- | |
| 336 | + | |
| 337 | + $content = file_get_contents($url); | |
| 338 | + | |
| 339 | + // --- DEBUG OUTPUT ------- | |
| 340 | + if ($debug) | |
| 341 | + echo "<br />Laden der Seite ohne Cache dauerte: " . | |
| 342 | + getMilliSeconds() - $t1 . " ms"; | |
| 343 | + flush(); | |
| 344 | + | |
| 345 | + if ($debug) | |
| 346 | + { | |
| 347 | + echo "<br />Cache-Datei ist gesperrt: "; | |
| 348 | + var_dump (is_file ($cache_file.".LCK")); | |
| 349 | + } | |
| 350 | + // --- END DEBUG OUTPUT --- | |
| 351 | + | |
| 352 | + $ctr = 0; | |
| 353 | + while (cacheFileIsLocked ($cache_file)) | |
| 354 | + { | |
| 355 | + usleep (100000); | |
| 356 | + $ctr++; | |
| 357 | + if ($debug) | |
| 358 | + { | |
| 359 | + echo "<br />Cache-Datei ist gesperrt ..."; | |
| 360 | + flush(); | |
| 361 | + } | |
| 362 | + if ($ctr>(MAX_CACHE_WAIT_SECS*10)) | |
| 363 | + return $content; | |
| 364 | + clearstatcache(); | |
| 365 | + } | |
| 366 | + $is_locked = lockCacheFile($cache_file); | |
| 367 | + if ($is_locked) | |
| 368 | + { | |
| 369 | + $fp = fopen($cache_file, "w"); | |
| 370 | + if ($fp) | |
| 371 | + { | |
| 372 | + fwrite($fp,$content); | |
| 373 | + | |
| 374 | + // for ($x=0;$x<25;$x++) | |
| 375 | + // { | |
| 376 | + // echo "<br />Test sleep ... $x"; | |
| 377 | + // flush(); | |
| 378 | + // sleep(1); | |
| 379 | + // } | |
| 380 | + | |
| 381 | + fclose($fp); | |
| 382 | + chmod($cache_file,0777); | |
| 383 | + } | |
| 384 | + } else | |
| 385 | + if ($debug) | |
| 386 | + echo "<br />Cache-Datei konnte nicht geschrieben werden, " . | |
| 387 | + "weil die Lock-Datei nicht gesperrt werden konnte"; | |
| 388 | + if ($is_locked) | |
| 389 | + unlockCacheFile($cache_file); | |
| 390 | + return $content; | |
| 391 | +} | |
| 392 | + | |
| 393 | +function lockCacheFile($cache_file) | |
| 394 | +{ | |
| 395 | + $lock_file = $cache_file.".LCK"; | |
| 396 | + if (is_file($lock_file)) | |
| 397 | + { | |
| 398 | + if (is_writable($lock_file)) | |
| 399 | + { | |
| 400 | + chmod($lock_file,0555); | |
| 401 | + clearstatcache(); | |
| 402 | + return 1; | |
| 403 | + } | |
| 404 | + else | |
| 405 | + return 0; | |
| 406 | + } else | |
| 407 | + { | |
| 408 | + $fp = fopen($lock_file,'w'); | |
| 409 | + if ($fp) | |
| 410 | + { | |
| 411 | + fclose($fp); | |
| 412 | + chmod($lock_file,0555); | |
| 413 | + clearstatcache(); | |
| 414 | + return 1; | |
| 415 | + } else | |
| 416 | + return 0; | |
| 417 | + } | |
| 418 | +} | |
| 419 | + | |
| 420 | +function unlockCacheFile($cache_file) | |
| 421 | +{ | |
| 422 | + $lock_file = $cache_file.".LCK"; | |
| 423 | + chmod($lock_file,0777); | |
| 424 | + if (is_file($lock_file)) | |
| 425 | + { | |
| 426 | + unlink($lock_file); | |
| 427 | + clearstatcache(); | |
| 428 | + } | |
| 429 | +} | |
| 430 | + | |
| 431 | +function cacheFileIsLocked($cache_file) | |
| 432 | +{ | |
| 433 | + $lock_file = $cache_file.".LCK"; | |
| 434 | + $is_locked = is_file($lock_file); | |
| 435 | + | |
| 436 | + if ($is_locked) | |
| 437 | + return 1; | |
| 438 | + return 0; | |
| 439 | +} | |
| 440 | + | |
| 441 | +function getProtocol() | |
| 442 | +{ | |
| 443 | + $proto = $_SERVER["SERVER_PROTOCOL"]; | |
| 444 | + if (preg_match("/^HTTP\/.*$/",$proto)) | |
| 445 | + return 'http'; | |
| 446 | + if (preg_match("/^HTTPS\/.*$/",$proto)) | |
| 447 | + return 'https'; | |
| 448 | +} | |
| 449 | + | |
| 450 | +function getCacheContent($cache_file, $debug) | |
| 451 | +{ | |
| 452 | + $ctr = 0; | |
| 453 | + while (cacheFileIsLocked($cache_file)) | |
| 454 | + { | |
| 455 | + usleep(100000); | |
| 456 | + $ctr++; | |
| 457 | + if ($debug) | |
| 458 | + { | |
| 459 | + echo "<br />Kann Content nicht ausliefern, da Cache-Datei gesperrt ist ..."; | |
| 460 | + flush(); | |
| 461 | + } | |
| 462 | + if ($ctr>(MAX_CACHE_WAIT_SECS*10)) | |
| 463 | + return ""; | |
| 464 | + clearstatcache(); | |
| 465 | + } | |
| 466 | + return file_get_contents($cache_file); | |
| 467 | +} | |
| 468 | + | |
| 469 | +function cleanupCache() | |
| 470 | +{ | |
| 471 | + $log = "<h3>Cleanup Cache Script</h3>\n<ul>"; | |
| 472 | + $def_vars = get_defined_constants(); | |
| 473 | + | |
| 474 | + if (!array_key_exists('CACHE_CLEANUP_TIME',$def_vars)) | |
| 475 | + { | |
| 476 | + $log .= "<li>Konstante CACHE_CLEANUP_TIME ist nicht definiert - breche Cleanup-Skript ab.</li></ul>"; | |
| 477 | + return $log; | |
| 478 | + } else if (!array_key_exists('CACHECLEANUPFILE',$def_vars)) | |
| 479 | + { | |
| 480 | + $log .= "<li>Konstante CACHECLEANUPFILE ist nicht definiert - breche Cleanup-Skript ab.</li></ul>"; | |
| 481 | + return $log; | |
| 482 | + } else | |
| 483 | + if (!preg_match("/^([0-9][0-9]:[0-9][0-9],{0,1})*$/",CACHE_CLEANUP_TIME)) | |
| 484 | + { | |
| 485 | + $log .= "<li>Konstante CACHE_CLEANUP_TIME '".CACHE_CLEANUP_TIME."' ist im falschen Format - breche Cleanup-Skript ab.</li></ul>"; | |
| 486 | + return $log; | |
| 487 | + } | |
| 488 | + | |
| 489 | + $cachecleanup_file = CACHEDIR.CACHECLEANUPFILE; | |
| 490 | + $cleanup = 0; | |
| 491 | + $err_reporting = ini_get("error_reporting"); | |
| 492 | + ini_set("error_reporting",0); | |
| 493 | + | |
| 494 | + if (file_exists($cachecleanup_file)) | |
| 495 | + { | |
| 496 | + $lastmodified = filemtime($cachecleanup_file); | |
| 497 | + $cachecleanup_file = realpath($cachecleanup_file); | |
| 498 | + $log .= "<li>Cache-Cleanup-Datei $cachecleanup_file existiert.</li>"; | |
| 499 | + $log .= "<li>Cache-Cleanup-Datei $cachecleanup_file wurde letzmals aktualisiert am: ".strftime("%d.%m.%Y %H:%M:%S",$lastmodified)." Uhr</li>"; | |
| 500 | + | |
| 501 | + } | |
| 502 | + else | |
| 503 | + $lastmodified = -1; | |
| 504 | + $cleanuptime_arr = explode(",",CACHE_CLEANUP_TIME); | |
| 505 | + foreach($cleanuptime_arr as $cleanup_time) | |
| 506 | + { | |
| 507 | + $log .= "<li><b>Checke Cleanup-Time $cleanup_time Uhr</b><ul>"; | |
| 508 | + $ct_arr = explode(":",$cleanup_time); | |
| 509 | + if (count($ct_arr)>=2) | |
| 510 | + { | |
| 511 | + $hour = $ct_arr[0]; | |
| 512 | + $minute = $ct_arr[1]; | |
| 513 | + $today = getdate(); | |
| 514 | + $cleanup_timestamp = mktime($hour,$minute,0,$today["mon"],$today["mday"],$today["year"]); | |
| 515 | + $now = time(); | |
| 516 | + $diff1 = $now-$cleanup_timestamp; | |
| 517 | + $log .= "<li>Untersuche Differenz: now()-$cleanup_time=$diff1 Sekunden</li>"; | |
| 518 | + if ($diff1>0) | |
| 519 | + { | |
| 520 | + $log .= "<li>Cleanup-Zeitpunkt ist überschritten</li>"; | |
| 521 | + if ($cleanup_timestamp>$lastmodified) | |
| 522 | + { | |
| 523 | + $cleanup=1; | |
| 524 | + $log .= "<li>Cleanup-Zeitpunkt muss durchgeführt werden.</li>"; | |
| 525 | + } else | |
| 526 | + $log .= "<li>Kein Cleanup erforderlich, weil ".basename($cachecleanup_file)." nach der Cleanup-Zeit" . | |
| 527 | + " $cleanup_time Uhr verändert wurde."; | |
| 528 | + } else | |
| 529 | + $log .= "<li>Kein Cleanup erforderlich. Es dauert noch ".(-$diff1)." Sekunden bis zum nächsten Cleanup.</li>"; | |
| 530 | + } | |
| 531 | + $log .= "</ul></li>"; | |
| 532 | + } | |
| 533 | + | |
| 534 | + if ($cleanup) | |
| 535 | + { | |
| 536 | + $log .= "<li><b>Führe jetzt Cleanup durch ...</b>"; | |
| 537 | + $files = scandir(CACHEDIR); | |
| 538 | + | |
| 539 | + foreach($files as $key=>$file) | |
| 540 | + { | |
| 541 | + if ($file=='.' || | |
| 542 | + $file=='..' || | |
| 543 | + $file=='.svn' || | |
| 544 | + $file==LASTLOGFILE || | |
| 545 | + $file==CACHECLEANUPFILE) | |
| 546 | + unset($files[$key]); | |
| 547 | + } | |
| 548 | + | |
| 549 | + if (count($files)==0) | |
| 550 | + $log .= "<li>Cache ist leer.</li>"; | |
| 551 | + foreach($files as $file) | |
| 552 | + { | |
| 553 | + $file = realpath(CACHEDIR.$file); | |
| 554 | + $success = 0; | |
| 555 | + if (is_file($file)) | |
| 556 | + { | |
| 557 | + $log .= "<li>lösche Datei $file : "; | |
| 558 | + $success = unlink($file); | |
| 559 | + } else if (is_dir($file)) | |
| 560 | + { | |
| 561 | + $log .= "<li>lösche Verzeichnis $file : "; | |
| 562 | + | |
| 563 | + delTree($file); | |
| 564 | + if (!is_dir($file)) | |
| 565 | + $success = 1; | |
| 566 | + } | |
| 567 | + | |
| 568 | + if ($success) | |
| 569 | + $log .= " gelöscht.</li>"; | |
| 570 | + else | |
| 571 | + $log .= " <b style=\"color:red\">Löschen fehlgeschlagen.</b></li>"; | |
| 572 | + } | |
| 573 | + $fp = fopen($cachecleanup_file,"w"); | |
| 574 | + fclose($fp); | |
| 575 | + } | |
| 576 | + $log .= "\n</ul>\nCleanup beendet."; | |
| 577 | + ini_set($err_reporting); | |
| 578 | + return $log; | |
| 579 | +} | |
| 580 | + | |
| 581 | +function delTree($path) { | |
| 582 | + if (is_dir($path)) { | |
| 583 | + $entries = scandir($path); | |
| 584 | + foreach ($entries as $entry) { | |
| 585 | + if ($entry != '.' && $entry != '..') { | |
| 586 | + deltree($path.DIRECTORY_SEPARATOR.$entry); | |
| 587 | + } | |
| 588 | + } | |
| 589 | + rmdir($path); | |
| 590 | + } else { | |
| 591 | + unlink($path); | |
| 592 | + } | |
| 593 | +} | |
| 594 | + | |
| 595 | +?> | ... | ... |
Please
register
or
login
to post a comment