}
function bb_RemovePictureLinks($match) {
- $ch = @curl_init($match[1]);
- @curl_setopt($ch, CURLOPT_NOBODY, true);
- @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- @curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Friendica)");
- @curl_exec($ch);
- $curl_info = @curl_getinfo($ch);
-
- if (substr($curl_info["content_type"], 0, 6) == "image/")
- $text = "[url=".$match[1]."]".$match[1]."[/url]";
- else {
- $text = "[url=".$match[2]."]".$match[2]."[/url]";
-
- // if its not a picture then look if its a page that contains a picture link
- require_once("include/network.php");
-
- $body = fetch_url($match[1]);
-
- $doc = new DOMDocument();
- @$doc->loadHTML($body);
- $xpath = new DomXPath($doc);
- $list = $xpath->query("//meta[@name]");
- foreach ($list as $node) {
- $attr = array();
-
- if ($node->attributes->length)
- foreach ($node->attributes as $attribute)
- $attr[$attribute->name] = $attribute->value;
-
- if (strtolower($attr["name"]) == "twitter:image")
- $text = "[url=".$attr["content"]."]".$attr["content"]."[/url]";
+ $text = Cache::get($match[1]);
+
+ if(is_null($text)){
+ $ch = @curl_init($match[1]);
+ @curl_setopt($ch, CURLOPT_NOBODY, true);
+ @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ @curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Friendica)");
+ @curl_exec($ch);
+ $curl_info = @curl_getinfo($ch);
+
+ if (substr($curl_info["content_type"], 0, 6) == "image/")
+ $text = "[url=".$match[1]."]".$match[1]."[/url]";
+ else {
+ $text = "[url=".$match[2]."]".$match[2]."[/url]";
+
+ // if its not a picture then look if its a page that contains a picture link
+ require_once("include/network.php");
+
+ $body = fetch_url($match[1]);
+
+ $doc = new DOMDocument();
+ @$doc->loadHTML($body);
+ $xpath = new DomXPath($doc);
+ $list = $xpath->query("//meta[@name]");
+ foreach ($list as $node) {
+ $attr = array();
+
+ if ($node->attributes->length)
+ foreach ($node->attributes as $attribute)
+ $attr[$attribute->name] = $attribute->value;
+
+ if (strtolower($attr["name"]) == "twitter:image")
+ $text = "[url=".$attr["content"]."]".$attr["content"]."[/url]";
+ }
}
+ Cache::set($match[1],$text);
}
-
return($text);
}
function bb_CleanPictureLinksSub($match) {
- $ch = @curl_init($match[1]);
- @curl_setopt($ch, CURLOPT_NOBODY, true);
- @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- @curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Friendica)");
- @curl_exec($ch);
- $curl_info = @curl_getinfo($ch);
-
- // if its a link to a picture then embed this picture
- if (substr($curl_info["content_type"], 0, 6) == "image/")
- $text = "[img]".$match[1]."[/img]";
- else {
- $text = "[img]".$match[2]."[/img]";
-
- // if its not a picture then look if its a page that contains a picture link
- require_once("include/network.php");
-
- $body = fetch_url($match[1]);
-
- $doc = new DOMDocument();
- @$doc->loadHTML($body);
- $xpath = new DomXPath($doc);
- $list = $xpath->query("//meta[@name]");
- foreach ($list as $node) {
- $attr = array();
-
- if ($node->attributes->length)
- foreach ($node->attributes as $attribute)
- $attr[$attribute->name] = $attribute->value;
-
- if (strtolower($attr["name"]) == "twitter:image")
- $text = "[img]".$attr["content"]."[/img]";
+ $text = Cache::get($match[1]);
+
+ if(is_null($text)){
+ $ch = @curl_init($match[1]);
+ @curl_setopt($ch, CURLOPT_NOBODY, true);
+ @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ @curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; Friendica)");
+ @curl_exec($ch);
+ $curl_info = @curl_getinfo($ch);
+
+ // if its a link to a picture then embed this picture
+ if (substr($curl_info["content_type"], 0, 6) == "image/")
+ $text = "[img]".$match[1]."[/img]";
+ else {
+ $text = "[img]".$match[2]."[/img]";
+
+ // if its not a picture then look if its a page that contains a picture link
+ require_once("include/network.php");
+
+ $body = fetch_url($match[1]);
+
+ $doc = new DOMDocument();
+ @$doc->loadHTML($body);
+ $xpath = new DomXPath($doc);
+ $list = $xpath->query("//meta[@name]");
+ foreach ($list as $node) {
+ $attr = array();
+
+ if ($node->attributes->length)
+ foreach ($node->attributes as $attribute)
+ $attr[$attribute->name] = $attribute->value;
+
+ if (strtolower($attr["name"]) == "twitter:image")
+ $text = "[img]".$attr["content"]."[/img]";
+ }
}
+ Cache::set($match[1],$text);
}
-
return($text);
}
/**
* cache api
*/
-
+
class Cache {
- public static function get($key){
+ public static function get($key) {
+ if (function_exists("apc_fetch") AND function_exists("apc_exists"))
+ if (apc_exists($key))
+ return(apc_fetch($key));
+
$r = q("SELECT `v` FROM `cache` WHERE `k`='%s' limit 1",
dbesc($key)
);
-
- if (count($r)) return $r[0]['v'];
+
+ if (count($r)) {
+ if (function_exists("apc_store"))
+ apc_store($key, $r[0]['v'], 600);
+
+ return $r[0]['v'];
+ }
return null;
}
-
+
public static function set($key,$value) {
q("REPLACE INTO `cache` (`k`,`v`,`updated`) VALUES ('%s','%s','%s')",
dbesc($key),
dbesc($value),
dbesc(datetime_convert()));
+
+ if (function_exists("apc_store"))
+ apc_store($key, $value, 600);
+
}
-
-/*
+
+/*
*
- * Leaving this legacy code temporaily to see how REPLACE fares
+ * Leaving this legacy code temporaily to see how REPLACE fares
* as opposed to non-atomic checks when faced with fast moving key duplication.
* As a MySQL extension it isn't portable, but we're not yet very portable.
*/
* }
*/
-
+
public static function clear(){
q("DELETE FROM `cache` WHERE `updated` < '%s'",
- dbesc(datetime_convert('UTC','UTC',"now - 30 days")));
+ dbesc(datetime_convert('UTC','UTC',"now - 30 days")));
}
-
+
}
-
+