[core] parse CACHE_DSN using parse_url, and support username / password for redis, fixes #1000

This commit is contained in:
Shish
2024-01-07 23:28:15 +00:00
parent 8a82a3348f
commit 63b479592a

View File

@ -102,24 +102,26 @@ class EventTracingCache implements CacheInterface
function loadCache(?string $dsn): CacheInterface function loadCache(?string $dsn): CacheInterface
{ {
$matches = [];
$c = null; $c = null;
if ($dsn && preg_match("#(.*)://(.*)#", $dsn, $matches) && !isset($_GET['DISABLE_CACHE'])) { if ($dsn && !isset($_GET['DISABLE_CACHE'])) {
if ($matches[1] == "memcached" || $matches[1] == "memcache") { $url = parse_url($dsn);
$hp = explode(":", $matches[2]); if($url) {
$memcache = new \Memcached(); if ($url['scheme'] == "memcached" || $url['scheme'] == "memcache") {
$memcache->addServer($hp[0], (int)$hp[1]); $memcache = new \Memcached();
$c = new \Sabre\Cache\Memcached($memcache); $memcache->addServer($url['host'], $url['port']);
} elseif ($matches[1] == "apc") { $c = new \Sabre\Cache\Memcached($memcache);
$c = new \Sabre\Cache\Apcu(); } elseif ($url['scheme'] == "apc") {
} elseif ($matches[1] == "redis") { $c = new \Sabre\Cache\Apcu();
$hp = explode(":", $matches[2]); } elseif ($url['scheme'] == "redis") {
$redis = new \Predis\Client([ $redis = new \Predis\Client([
'scheme' => 'tcp', 'scheme' => 'tcp',
'host' => $hp[0], 'host' => $url['host'],
'port' => (int)$hp[1] 'port' => $url['port'],
], ['prefix' => 'shm:']); 'username' => $url['user'],
$c = new \Naroga\RedisCache\Redis($redis); 'password' => $url['pass'],
], ['prefix' => 'shm:']);
$c = new \Naroga\RedisCache\Redis($redis);
}
} }
} }
if(is_null($c)) { if(is_null($c)) {