New cache system with subdirectories

This commit is contained in:
Michael Vogel 2012-11-17 00:50:39 +01:00
parent e67062d9cf
commit f17377e6de
7 changed files with 83 additions and 86 deletions

View file

@ -1847,3 +1847,54 @@ function random_digits($digits) {
} }
return $rn; return $rn;
} }
function get_cachefile($file, $writemode = true) {
$cache = get_config("system","itemcache");
if ($cache == "")
return("");
if (!is_dir($cache))
return("");
$subfolder = $cache."/".substr($file, 0, 2);
$cachepath = $subfolder."/".$file;
if ($writemode) {
if (!is_dir($subfolder)) {
mkdir($subfolder);
chmod($subfolder, 0777);
}
}
return($cachepath);
}
function clear_cache($basepath = "", $path = "") {
if ($path == "") {
$basepath = get_config('system','itemcache');
$path = $basepath;
}
if (($path == "") OR (!is_dir($path)))
return;
if (substr(realpath($path), 0, strlen($basepath)) != $basepath)
return;
$cachetime = (int)get_config('system','itemcache_duration');
if ($cachetime == 0)
$cachetime = 86400;
if ($dh = opendir($path)) {
while (($file = readdir($dh)) !== false) {
$fullpath = $path."/".$file;
if ((filetype($fullpath) == "dir") and ($file != ".") and ($file != ".."))
clear_cache($basepath, $fullpath);
if ((filetype($fullpath) == "file") and filectime($fullpath) < (time() - $cachetime))
unlink($fullpath);
}
closedir($dh);
}
}

View file

@ -823,15 +823,13 @@ function scale_external_images($s, $include_link = true, $scale_replace = false)
$scaled = $mtch[1]; $scaled = $mtch[1];
$i = fetch_url($scaled); $i = fetch_url($scaled);
$cache = get_config('system','itemcache'); $cachefile = get_cachefile(hash("md5", $scaled));
if (($cache != '') and is_dir($cache)) { if ($cachefile != '')
$cachefile = $cache."/".hash("md5", $scaled);
file_put_contents($cachefile, $i); file_put_contents($cachefile, $i);
}
// guess mimetype from headers or filename // guess mimetype from headers or filename
$type = guess_image_type($mtch[1],true); $type = guess_image_type($mtch[1],true);
if($i) { if($i) {
$ph = new Photo($i, $type); $ph = new Photo($i, $type);
if($ph->is_valid()) { if($ph->is_valid()) {

View file

@ -102,18 +102,8 @@ function poller_run(&$argv, &$argc){
// clear old cache // clear old cache
Cache::clear(); Cache::clear();
// clear item cache files if they are older than one day // clear old item cache files
$cache = get_config('system','itemcache'); clear_cache();
if (($cache != '') and is_dir($cache)) {
if ($dh = opendir($cache)) {
while (($file = readdir($dh)) !== false) {
$fullpath = $cache."/".$file;
if ((filetype($fullpath) == "file") and filectime($fullpath) < (time() - 86400))
unlink($fullpath);
}
closedir($dh);
}
}
$manual_id = 0; $manual_id = 0;
$generation = 0; $generation = 0;
@ -128,7 +118,7 @@ function poller_run(&$argv, &$argc){
$restart = true; $restart = true;
$generation = intval($argv[2]); $generation = intval($argv[2]);
if(! $generation) if(! $generation)
killme(); killme();
} }
if(($argc > 1) && intval($argv[1])) { if(($argc > 1) && intval($argv[1])) {

View file

@ -962,13 +962,11 @@ if(! function_exists('prepare_body')) {
function prepare_body($item,$attach = false) { function prepare_body($item,$attach = false) {
$a = get_app(); $a = get_app();
call_hooks('prepare_body_init', $item); call_hooks('prepare_body_init', $item);
$cache = get_config('system','itemcache'); $cachefile = get_cachefile($item["guid"]."-".strtotime($item["edited"])."-".hash("crc32", $item['body']));
if (($cache != '')) {
$cachefile = $cache."/".$item["guid"]."-".strtotime($item["edited"])."-".hash("crc32", $item['body']);
if (($cachefile != '')) {
if (file_exists($cachefile)) if (file_exists($cachefile))
$s = file_get_contents($cachefile); $s = file_get_contents($cachefile);
else { else {

View file

@ -4,30 +4,7 @@ require_once('include/security.php');
require_once('include/Photo.php'); require_once('include/Photo.php');
function photo_init(&$a) { function photo_init(&$a) {
global $_SERVER;
// To-Do:
// - checking with realpath
// - checking permissions
/*
$cache = get_config('system','itemcache');
if (($cache != '') and is_dir($cache)) {
$cachefile = $cache."/".$a->argc."-".$a->argv[1]."-".$a->argv[2]."-".$a->argv[3];
if (file_exists($cachefile)) {
$data = file_get_contents($cachefile);
if(function_exists('header_remove')) {
header_remove('Pragma');
header_remove('pragma');
}
header("Content-type: image/jpeg");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT");
header("Cache-Control: max-age=" . (3600*24));
echo $data;
killme();
// NOTREACHED
}
}*/
$prvcachecontrol = false; $prvcachecontrol = false;
@ -50,6 +27,22 @@ function photo_init(&$a) {
// NOTREACHED // NOTREACHED
} }
// strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= filemtime($localFileName)) {
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
header('HTTP/1.1 304 Not Modified');
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
header('Etag: '.$_SERVER['HTTP_IF_NONE_MATCH']);
header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
header("Cache-Control: max-age=31536000");
if(function_exists('header_remove')) {
header_remove('Last-Modified');
header_remove('Expires');
header_remove('Cache-Control');
}
exit;
}
$default = 'images/person-175.jpg'; $default = 'images/person-175.jpg';
if(isset($type)) { if(isset($type)) {
@ -203,10 +196,10 @@ function photo_init(&$a) {
} }
else { else {
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT"); header('Etag: "'.md5($data).'"');
header("Cache-Control: max-age=" . (3600*24)); header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
header("Cache-Control: max-age=31536000");
} }
echo $data; echo $data;
killme(); killme();

View file

@ -1,33 +0,0 @@
<h3>$header</h3>
<div id="prvmail-wrapper" >
<form id="prvmail-form" action="message" method="post" >
$parent
<div id="prvmail-to-label">$to</div>
$select
<div id="prvmail-subject-label">$subject</div>
<input type="text" size="64" maxlength="255" id="prvmail-subject" name="subject" value="$subjtxt" $readonly tabindex="11" />
<div id="prvmail-message-label">$yourmessage</div>
<textarea rows="8" cols="72" class="prvmail-text" id="prvmail-text" name="body" tabindex="12">$text</textarea>
<div id="prvmail-submit-wrapper" >
<input type="submit" id="prvmail-submit" name="submit" value="$submit" tabindex="13" />
<div id="prvmail-upload-wrapper" >
<div id="prvmail-upload" title="$upload" ><i class="icon-camera-retro icon-large"></i></div>
</div>
<div id="prvmail-link-wrapper" >
<div id="prvmail-link" title="$insert" onclick="jotGetLink();" ><i class="icon-link icon-large"></i></div>
</div>
<div id="prvmail-rotator-wrapper" >
<img id="prvmail-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
</div>
</div>
<div id="prvmail-end"></div>
</form>
</div>

View file

@ -887,8 +887,8 @@ aside #search-text {
margin: 0px 2px 2px 0px; margin: 0px 2px 2px 0px;
} }
#contact-block .contact-block-link img { #contact-block .contact-block-link img {
widht: 48px; width: 48px;
height: 58px; height: 48px;
} }
.group_selected { .group_selected {
background: url("../../../view/theme/diabook/icons/selected.png") no-repeat left center; background: url("../../../view/theme/diabook/icons/selected.png") no-repeat left center;