%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /data/www_bck/varak.cloud_bck/tracker.varak.cloud/src/Legacy/Cache/
Upload File :
Create Path :
Current File : //data/www_bck/varak.cloud_bck/tracker.varak.cloud/src/Legacy/Cache/Sqlite.php

<?php
/**
 * TorrentPier – Bull-powered BitTorrent tracker engine
 *
 * @copyright Copyright (c) 2005-2018 TorrentPier (https://torrentpier.com)
 * @link      https://github.com/torrentpier/torrentpier for the canonical source repository
 * @license   https://github.com/torrentpier/torrentpier/blob/master/LICENSE MIT License
 */

namespace TorrentPier\Legacy\Cache;

use SQLite3;

/**
 * Class Sqlite
 * @package TorrentPier\Legacy\Cache
 */
class Sqlite extends Common
{
    public $used = true;
    public $db;
    public $prefix;
    public $cfg = array(
        'db_file_path' => '/path/to/cache.db.sqlite',
        'table_name' => 'cache',
        'table_schema' => 'CREATE TABLE cache (
	                cache_name        VARCHAR(255),
	                cache_expire_time INT,
	                cache_value       TEXT,
	                PRIMARY KEY (cache_name)
	        )',
        'pconnect' => true,
        'con_required' => true,
        'log_name' => 'CACHE',
    );

    public function __construct($cfg, $prefix = null)
    {
        $this->cfg = array_merge($this->cfg, $cfg);
        $this->db = new SqliteCommon($this->cfg);
        $this->prefix = $prefix;
    }

    public function get($name, $get_miss_key_callback = '', $ttl = 604800)
    {
        if (empty($name)) {
            return \is_array($name) ? array() : false;
        }
        $this->db->shard($name);
        $cached_items = array();
        $this->prefix_len = \strlen($this->prefix);
        $this->prefix_sql = SQLite3::escapeString($this->prefix);

        $name_ary = $name_sql = (array)$name;
        array_deep($name_sql, 'SQLite3::escapeString');

        // get available items
        $rowset = $this->db->fetch_rowset("
			SELECT cache_name, cache_value
			FROM " . $this->cfg['table_name'] . "
			WHERE cache_name IN('$this->prefix_sql" . implode("','$this->prefix_sql", $name_sql) . "') AND cache_expire_time > " . TIMENOW . "
			LIMIT " . \count($name) . "
		");

        $this->db->debug('start', 'unserialize()');
        foreach ($rowset as $row) {
            $cached_items[substr($row['cache_name'], $this->prefix_len)] = unserialize($row['cache_value']);
        }
        $this->db->debug('stop');

        // get miss items
        if ($get_miss_key_callback and $miss_key = array_diff($name_ary, array_keys($cached_items))) {
            foreach ($get_miss_key_callback($miss_key) as $k => $v) {
                $this->set($this->prefix . $k, $v, $ttl);
                $cached_items[$k] = $v;
            }
        }
        // return
        if (\is_array($this->prefix . $name)) {
            return $cached_items;
        }

        return $cached_items[$name] ?? false;
    }

    public function set($name, $value, $ttl = 604800)
    {
        $this->db->shard($this->prefix . $name);
        $name_sql = SQLite3::escapeString($this->prefix . $name);
        $expire = TIMENOW + $ttl;
        $value_sql = SQLite3::escapeString(serialize($value));

        $result = $this->db->query("REPLACE INTO " . $this->cfg['table_name'] . " (cache_name, cache_expire_time, cache_value) VALUES ('$name_sql', $expire, '$value_sql')");
        return (bool)$result;
    }

    public function rm($name = '')
    {
        if ($name) {
            $this->db->shard($this->prefix . $name);
            $result = $this->db->query("DELETE FROM " . $this->cfg['table_name'] . " WHERE cache_name = '" . SQLite3::escapeString($this->prefix . $name) . "'");
        } else {
            $result = $this->db->query("DELETE FROM " . $this->cfg['table_name']);
        }
        return (bool)$result;
    }

    public function gc($expire_time = TIMENOW)
    {
        $result = $this->db->query("DELETE FROM " . $this->cfg['table_name'] . " WHERE cache_expire_time < $expire_time");
        return $result ? $this->db->changes() : 0;
    }
}

Zerion Mini Shell 1.0