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 | <html> | 3 | <html> |
2 | <head> | 4 | <head> |
3 | <title>Meine ersten Ajax Erfahrungen</title> | 5 | <title>Meine ersten Ajax Erfahrungen</title> |
@@ -27,11 +29,10 @@ | @@ -27,11 +29,10 @@ | ||
27 | german_field.value = translation.german; | 29 | german_field.value = translation.german; |
28 | french_field.value = translation.french.val1; | 30 | french_field.value = translation.french.val1; |
29 | } | 31 | } |
30 | - break; | 32 | + return true; |
31 | 33 | ||
32 | default: | 34 | default: |
33 | return false; | 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