From f0bd8e6531756b151c051f8ce5099d59408e71db Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 19 Mar 2013 09:25:36 +0400 Subject: rework image caching to work without permanent article content rewriting (refs #582) --- image.php | 35 ++++++++++++++++++++++++++++------- include/functions.php | 15 +++++++++++---- include/rssfuncs.php | 2 +- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/image.php b/image.php index 91490ea22..cccda64b7 100644 --- a/image.php +++ b/image.php @@ -4,14 +4,35 @@ require_once "config.php"; - $url = base64_decode($_GET['url']); + // backwards compatible wrapper for old-style image caching + /* if (isset($_GET['url'])) { + $url = base64_decode($_GET['url']); - $filename = CACHE_DIR . '/images/' . sha1($url) . '.png'; + $filename = CACHE_DIR . '/images/' . sha1($url) . '.png'; - if (file_exists($filename)) { - header("Content-type: image/png"); - echo file_get_contents($filename); - } else { - header("Location: $url"); + if (file_exists($filename)) { + header("Content-type: image/png"); + echo file_get_contents($filename); + } else { + header("Location: $url"); + } + + return; + } */ + + @$hash = basename($_GET['hash']); + + if ($hash) { + + $filename = CACHE_DIR . '/images/' . $hash . '.png'; + + if (file_exists($filename)) { + header("Content-type: image/png"); + echo file_get_contents($filename); + } else { + header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); + echo "File not found."; + } } + ?> diff --git a/include/functions.php b/include/functions.php index 43a9270eb..a7ac07b53 100644 --- a/include/functions.php +++ b/include/functions.php @@ -2590,10 +2590,17 @@ $entry->setAttribute('href', rewrite_relative_url($site_url, $entry->getAttribute('href'))); - if ($entry->hasAttribute('src')) - if (preg_match('/^image.php\?i=[a-z0-9]+$/', $entry->getAttribute('src')) == 0) - $entry->setAttribute('src', - rewrite_relative_url($site_url, $entry->getAttribute('src'))); + if ($entry->hasAttribute('src')) { + $src = rewrite_relative_url($site_url, $entry->getAttribute('src')); + + $cached_filename = CACHE_DIR . '/images/' . sha1($src) . '.png'; + + if (file_exists($cached_filename)) { + $src = SELF_URL_PATH . '/image.php?hash=' . sha1($src); + } + + $entry->setAttribute('src', $src); + } } if (strtolower($entry->nodeName) == "a") { diff --git a/include/rssfuncs.php b/include/rssfuncs.php index 1180b0adb..df1d16986 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -581,7 +581,7 @@ } if ($cache_images && is_writable(CACHE_DIR . '/images')) - $entry_content = cache_images($entry_content, $site_url, $debug_enabled); + cache_images($entry_content, $site_url, $debug_enabled); $entry_content = db_escape_string($entry_content, false); -- cgit v1.2.3