X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fconfig.php;h=e9da8e7b3d43372e5d1453cccbf050f278910fd1;hb=30efb0c1e641b0b9d3aa40a5a79897c6d06ac3ef;hp=60cd00cf6466bf606787a433ac4214e86b2af0f5;hpb=f9a40ccbdea69fc7ffcbdc87356d535c67371210;p=friendica.git diff --git a/include/config.php b/include/config.php index 60cd00cf64..e9da8e7b3d 100644 --- a/include/config.php +++ b/include/config.php @@ -18,17 +18,20 @@ if(! function_exists('load_config')) { function load_config($family) { global $a; + + // To-Do: How to integrate APC here? + $r = q("SELECT * FROM `config` WHERE `cat` = '%s'", dbesc($family)); if(count($r)) { foreach($r as $rr) { $k = $rr['k']; - if ($rr['cat'] === 'config') { + if ($family === 'config') { $a->config[$k] = $rr['v']; } else { $a->config[$family][$k] = $rr['v']; } } - } else if (isset($rr) && ($rr['cat'] != 'config')) { + } else if ($family != 'config') { // Negative caching $a->config[$family] = "!!"; } @@ -62,18 +65,54 @@ function get_config($family, $key, $instore = false) { return $a->config[$family][$key]; } } + + // If APC is enabled then fetch the data from there, else try XCache + if (function_exists("apc_fetch") AND function_exists("apc_exists")) + if (apc_exists($family."|".$key)) { + $val = apc_fetch($family."|".$key); + $a->config[$family][$key] = $val; + + if ($val === '!!') + return false; + else + return $val; + } + elseif (function_exists("xcache_fetch") AND function_exists("xcache_isset")) + if (xcache_isset($family."|".$key)) { + $val = xcache_fetch($family."|".$key); + $a->config[$family][$key] = $val; + + if ($val === '!!') + return false; + else + return $val; + } + $ret = q("SELECT `v` FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1", dbesc($family), dbesc($key) ); if(count($ret)) { // manage array value - $val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']); + $val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']); $a->config[$family][$key] = $val; + + // If APC is enabled then store the data there, else try XCache + if (function_exists("apc_store")) + apc_store($family."|".$key, $val, 600); + elseif (function_exists("xcache_set")) + xcache_set($family."|".$key, $val, 600); + return $val; } else { $a->config[$family][$key] = '!!'; + + // If APC is enabled then store the data there, else try XCache + if (function_exists("apc_store")) + apc_store($family."|".$key, '!!', 600); + elseif (function_exists("xcache_set")) + xcache_set($family."|".$key, '!!', 600); } return false; }} @@ -85,6 +124,15 @@ function get_config($family, $key, $instore = false) { if(! function_exists('set_config')) { function set_config($family,$key,$value) { global $a; + + // If $a->config[$family] has been previously set to '!!', then + // $a->config[$family][$key] will evaluate to $a->config[$family][0], and + // $a->config[$family][$key] = $value will be equivalent to + // $a->config[$family][0] = $value[0] (this causes infuriating bugs), + // so unset the family before assigning a value to a family's key + if($a->config[$family] === '!!') + unset($a->config[$family]); + // manage array value $dbvalue = (is_array($value)?serialize($value):$value); $dbvalue = (is_bool($dbvalue) ? intval($dbvalue) : $dbvalue); @@ -100,7 +148,7 @@ function set_config($family,$key,$value) { return $ret; } - $ret = q("UPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1", + $ret = q("UPDATE `config` SET `v` = '%s' WHERE `cat` = '%s' AND `k` = '%s'", dbesc($dbvalue), dbesc($family), dbesc($key) @@ -108,6 +156,12 @@ function set_config($family,$key,$value) { $a->config[$family][$key] = $value; + // If APC is enabled then store the data there, else try XCache + if (function_exists("apc_store")) + apc_store($family."|".$key, $value, 600); + elseif (function_exists("xcache_set")) + xcache_set($family."|".$key, $value, 600); + if($ret) return $value; return $ret; @@ -126,7 +180,7 @@ function load_pconfig($uid,$family) { $k = $rr['k']; $a->config[$uid][$family][$k] = $rr['v']; } - } else if ($rr['cat'] != 'config') { + } else if ($family != 'config') { // Negative caching $a->config[$uid][$family] = "!!"; } @@ -155,6 +209,29 @@ function get_pconfig($uid,$family, $key, $instore = false) { } } + // If APC is enabled then fetch the data from there, else try XCache + if (function_exists("apc_fetch") AND function_exists("apc_exists")) + if (apc_exists($uid."|".$family."|".$key)) { + $val = apc_fetch($uid."|".$family."|".$key); + $a->config[$uid][$family][$key] = $val; + + if ($val === '!!') + return false; + else + return $val; + } + elseif (function_exists("xcache_get") AND function_exists("xcache_isset")) + if (xcache_isset($uid."|".$family."|".$key)) { + $val = xcache_get($uid."|".$family."|".$key); + $a->config[$uid][$family][$key] = $val; + + if ($val === '!!') + return false; + else + return $val; + } + + $ret = q("SELECT `v` FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1", intval($uid), dbesc($family), @@ -162,12 +239,25 @@ function get_pconfig($uid,$family, $key, $instore = false) { ); if(count($ret)) { - $val = (preg_match("|^a:[0-9]+:{.*}$|", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']); + $val = (preg_match("|^a:[0-9]+:{.*}$|s", $ret[0]['v'])?unserialize( $ret[0]['v']):$ret[0]['v']); $a->config[$uid][$family][$key] = $val; + + // If APC is enabled then store the data there, else try XCache + if (function_exists("apc_store")) + apc_store($uid."|".$family."|".$key, $val, 600); + elseif (function_exists("xcache_set")) + xcache_set($uid."|".$family."|".$key, $val, 600); + return $val; } else { $a->config[$uid][$family][$key] = '!!'; + + // If APC is enabled then store the data there, else try XCache + if (function_exists("apc_store")) + apc_store($uid."|".$family."|".$key, '!!', 600); + elseif (function_exists("xcache_set")) + xcache_set($uid."|".$family."|".$key, '!!', 600); } return false; }} @@ -178,10 +268,16 @@ function del_config($family,$key) { global $a; if(x($a->config[$family],$key)) unset($a->config[$family][$key]); - $ret = q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1", + $ret = q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s'", dbesc($family), dbesc($key) ); + // If APC is enabled then delete the data from there, else try XCache + if (function_exists("apc_delete")) + apc_delete($family."|".$key); + elseif (function_exists("xcache_unset")) + xcache_unset($family."|".$key); + return $ret; }} @@ -210,7 +306,7 @@ function set_pconfig($uid,$family,$key,$value) { return $value; return $ret; } - $ret = q("UPDATE `pconfig` SET `v` = '%s' WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1", + $ret = q("UPDATE `pconfig` SET `v` = '%s' WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s'", dbesc($dbvalue), intval($uid), dbesc($family), @@ -219,6 +315,13 @@ function set_pconfig($uid,$family,$key,$value) { $a->config[$uid][$family][$key] = $value; + // If APC is enabled then store the data there, else try XCache + if (function_exists("apc_store")) + apc_store($uid."|".$family."|".$key, $value, 600); + elseif (function_exists("xcache_set")) + xcache_set($uid."|".$family."|".$key, $value, 600); + + if($ret) return $value; return $ret; @@ -230,7 +333,7 @@ function del_pconfig($uid,$family,$key) { global $a; if(x($a->config[$uid][$family],$key)) unset($a->config[$uid][$family][$key]); - $ret = q("DELETE FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1", + $ret = q("DELETE FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s'", intval($uid), dbesc($family), dbesc($key)