X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=privacy_image_cache%2Fprivacy_image_cache.php;h=f0d8e39ac55b24b2a5d4b31a1900d61911cc2bcc;hb=4437c42fd4b490cf60834b8151be14bac21c9c64;hp=d3202c4d751d9222e2b88f9e90e4495544b60cbe;hpb=6573332f7e238f0ac86989d45a2805cbc1745d1e;p=friendica-addons.git diff --git a/privacy_image_cache/privacy_image_cache.php b/privacy_image_cache/privacy_image_cache.php index d3202c4d..f0d8e39a 100644 --- a/privacy_image_cache/privacy_image_cache.php +++ b/privacy_image_cache/privacy_image_cache.php @@ -11,7 +11,8 @@ define("PRIVACY_IMAGE_CACHE_DEFAULT_TIME", 86400); // 1 Day require_once('include/security.php'); function privacy_image_cache_install() { - register_hook('bbcode', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_bbcode_hook'); + register_hook('prepare_body', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_prepare_body_hook'); + // register_hook('bbcode', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_bbcode_hook'); register_hook('display_item', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_display_item_hook'); register_hook('ping_xmlize', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_ping_xmlize_hook'); register_hook('cron', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_cron'); @@ -19,6 +20,7 @@ function privacy_image_cache_install() { function privacy_image_cache_uninstall() { + unregister_hook('prepare_body', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_prepare_body_hook'); unregister_hook('bbcode', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_bbcode_hook'); unregister_hook('display_item', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_display_item_hook'); unregister_hook('ping_xmlize', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_ping_xmlize_hook'); @@ -30,24 +32,59 @@ function privacy_image_cache_module() {} function privacy_image_cache_init() { + global $a; + if(function_exists('header_remove')) { header_remove('Pragma'); header_remove('pragma'); } $urlhash = 'pic:' . sha1($_REQUEST['url']); - $r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' LIMIT 1", $urlhash ); - if (count($r)) { - $img_str = $r[0]['data']; + // Double encoded url - happens with Diaspora + $urlhash2 = 'pic:' . sha1(urldecode($_REQUEST['url'])); + + $cache = get_config('system','itemcache'); + if (($cache != '') and is_dir($cache)) { + $cachefile = $cache."/".hash("md5", $urlhash); + if (file_exists($cachefile)) { + $img_str = file_get_contents($cachefile); + + $mime = image_type_to_mime_type(exif_imagetype($cachefile)); + + header("Content-type: $mime"); + header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT"); + header("Cache-Control: max-age=" . (3600*24)); + + echo $img_str; + + killme(); + } + } + + $r = q("SELECT * FROM `photo` WHERE `resource-id` in ('%s', '%s') LIMIT 1", $urlhash, $urlhash2); + if (count($r)) { + $img_str = $r[0]['data']; $mime = $r[0]["desc"]; if ($mime == "") $mime = "image/jpeg"; - } - else { - require_once("Photo.php"); + } else { + require_once("Photo.php"); + + // It shouldn't happen but it does - spaces in URL + $_REQUEST['url'] = str_replace(" ", "+", $_REQUEST['url']); + + $img_str = fetch_url($_REQUEST['url'],true); - $img_str = fetch_url($_REQUEST['url'],true); - if (substr($img_str, 0, 6) == "GIF89a") { - $mime = "image/gif"; + $tempfile = tempnam("", "cache"); + file_put_contents($tempfile, $img_str); + $mime = image_type_to_mime_type(exif_imagetype($tempfile)); + unlink($tempfile); + + // If there is an error then return a blank image + if ((substr($a->get_curl_code(), 0, 1) == "4") or (!$img_str)) { + $img_str = file_get_contents("images/blank.png"); + $mime = "image/png"; + //} else if (substr($img_str, 0, 6) == "GIF89a") { + } else if ($mime != "image/jpeg") { $image = @imagecreatefromstring($img_str); if($image === FALSE) die(); @@ -62,7 +99,7 @@ function privacy_image_cache_init() { dbesc(''), intval(imagesy($image)), intval(imagesx($image)), - 'image/gif', + $mime, dbesc($img_str), 100, intval(0), @@ -77,16 +114,19 @@ function privacy_image_cache_init() { } $mime = "image/jpeg"; } - } + } + // Writing in cachefile + if (isset($cachefile) && $cachefile != '') + file_put_contents($cachefile, $img_str); - header("Content-type: $mime"); - header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT"); - header("Cache-Control: max-age=" . (3600*24)); + header("Content-type: $mime"); + header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT"); + header("Cache-Control: max-age=" . (3600*24)); - echo $img_str; + echo $img_str; - killme(); + killme(); } /** @@ -109,16 +149,27 @@ function privacy_image_cache_is_local_image($url) { */ function privacy_image_cache_img_cb($matches) { // following line changed per bug #431 - if (privacy_image_cache_is_local_image($matches[2])) return $matches[1] . $matches[2] . $matches[3]; - return $matches[1] . get_app()->get_baseurl() . "/privacy_image_cache/?url=" . escape_tags(addslashes(rawurlencode($matches[2]))) . $matches[3]; + if (privacy_image_cache_is_local_image($matches[2])) + return $matches[1] . $matches[2] . $matches[3]; + + return $matches[1] . get_app()->get_baseurl() . "/privacy_image_cache/?url=" . addslashes(rawurlencode(htmlspecialchars_decode($matches[2]))) . $matches[3]; } /** * @param App $a * @param string $o */ +function privacy_image_cache_prepare_body_hook(&$a, &$o) { + $o["html"] = preg_replace_callback("/(]*src *= *[\"'])([^\"']+)([\"'][^>]*>)/siU", "privacy_image_cache_img_cb", $o["html"]); +} + +/** + * @param App $a + * @param string $o + * Function disabled because the plugin moved + */ function privacy_image_cache_bbcode_hook(&$a, &$o) { - $o = preg_replace_callback("/(]*src *= *[\"'])([^\"']+)([\"'][^>]*>)/siU", "privacy_image_cache_img_cb", $o); + //$o = preg_replace_callback("/(]*src *= *[\"'])([^\"']+)([\"'][^>]*>)/siU", "privacy_image_cache_img_cb", $o); } @@ -210,4 +261,4 @@ function privacy_image_cache_plugin_admin_post(&$a = null, &$o = null){ if (isset($_REQUEST['delete_all'])) { q('DELETE FROM `photo` WHERE `uid` = 0 AND `resource-id` LIKE "pic:%%"'); } -} \ No newline at end of file +}