public function __construct($host, $database, $username, $password, $table = 'getid3_cache') { // Check for mysql support if (!function_exists('mysql_pconnect')) { throw new \Exception('PHP not compiled with mysql support.'); } // Connect to database $this->connection = mysql_pconnect($host, $username, $password); if (!$this->connection) { throw new \Exception('mysql_pconnect() failed - check permissions and spelling.'); } // Select database if (!mysql_select_db($database, $this->connection)) { throw new \Exception('Cannot use database ' . $database); } // Set table $this->table = $table; // Create cache table if not exists $this->create_table(); // Check version number and clear cache if changed $version = ''; $SQLquery = 'SELECT `value`'; $SQLquery .= ' FROM `' . mysql_real_escape_string($this->table) . '`'; $SQLquery .= ' WHERE (`filename` = \'' . mysql_real_escape_string(GetID3::VERSION) . '\')'; $SQLquery .= ' AND (`filesize` = -1)'; $SQLquery .= ' AND (`filetime` = -1)'; $SQLquery .= ' AND (`analyzetime` = -1)'; if ($this->cursor = mysql_query($SQLquery, $this->connection)) { list($version) = mysql_fetch_array($this->cursor); } if ($version != GetID3::VERSION) { $this->clear_cache(); } parent::__construct(); }
/** * __construct() * @param string $table holds name of sqlite table * @return type */ public function __construct($table = 'getid3_cache', $hide = false) { $this->table = $table; // Set table $file = dirname(__FILE__) . '/' . basename(__FILE__, 'php') . 'sqlite'; if ($hide) { $file = dirname(__FILE__) . '/.ht.' . basename(__FILE__, 'php') . 'sqlite'; } $this->db = new SQLite3($file); $db = $this->db; $this->create_table(); // Create cache table if not exists $version = ''; $sql = $this->version_check; $stmt = $db->prepare($sql); $stmt->bindValue(':filename', GetID3::VERSION, SQLITE3_TEXT); $result = $stmt->execute(); list($version) = $result->fetchArray(); if ($version != GetID3::VERSION) { // Check version number and clear cache if changed $this->clear_cache(); } return parent::__construct(); }
public function __construct($cache_type, $dbm_filename, $lock_filename) { // Check for dba extension if (!extension_loaded('dba')) { throw new \Exception('PHP is not compiled with dba support, required to use DBM style cache.'); } // Check for specific dba driver if (!function_exists('dba_handlers') || !in_array($cache_type, dba_handlers())) { throw new \Exception('PHP is not compiled --with ' . $cache_type . ' support, required to use DBM style cache.'); } // Create lock file if needed if (!file_exists($lock_filename)) { if (!touch($lock_filename)) { throw new \Exception('failed to create lock file: ' . $lock_filename); } } // Open lock file for writing if (!is_writeable($lock_filename)) { throw new \Exception('lock file: ' . $lock_filename . ' is not writable'); } $this->lock = fopen($lock_filename, 'w'); // Acquire exclusive write lock to lock file flock($this->lock, LOCK_EX); // Create dbm-file if needed if (!file_exists($dbm_filename)) { if (!touch($dbm_filename)) { throw new \Exception('failed to create dbm file: ' . $dbm_filename); } } // Try to open dbm file for writing $this->dba = dba_open($dbm_filename, 'w', $cache_type); if (!$this->dba) { // Failed - create new dbm file $this->dba = dba_open($dbm_filename, 'n', $cache_type); if (!$this->dba) { throw new \Exception('failed to create dbm file: ' . $dbm_filename); } // Insert getID3 version number dba_insert(GetID3::VERSION, GetID3::VERSION, $this->dba); } // Init misc values $this->cache_type = $cache_type; $this->dbm_filename = $dbm_filename; // Register destructor register_shutdown_function(array($this, '__destruct')); // Check version number and clear cache if changed if (dba_fetch(GetID3::VERSION, $this->dba) != GetID3::VERSION) { $this->clear_cache(); } parent::__construct(); }