예제 #1
0
 function getID3_cached_dbm($cache_type, $dbm_filename, $lock_filename)
 {
     // Check for dba extension
     if (!extension_loaded('dba')) {
         die('PHP is not compiled with dba support, required to use DBM style cache.');
     }
     // Check for specific dba driver
     if (function_exists('dba_handlers')) {
         // PHP 4.3.0+
         if (!in_array('db3', dba_handlers())) {
             die('PHP is not compiled --with ' . $cache_type . ' support, required to use DBM style cache.');
         }
     } else {
         // PHP <= 4.2.3
         ob_start();
         // nasty, buy the only way to check...
         phpinfo();
         $contents = ob_get_contents();
         ob_end_clean();
         if (!strstr($contents, $cache_type)) {
             die('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)) {
             die('failed to create lock file: ' . $lock_filename);
         }
     }
     // Open lock file for writing
     if (!is_writeable($lock_filename)) {
         die('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)) {
             die('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) {
             die('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::getID3();
 }
예제 #2
0
 function getID3_cached_mysql($host, $database, $username, $password)
 {
     // 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);
     }
     // Create cache table if not exists
     $this->create_table();
     // Check version number and clear cache if changed
     $version = '';
     if ($this->cursor = mysql_query("SELECT `value` FROM `getid3_cache` WHERE (`filename` = '" . mysql_real_escape_string(GETID3_VERSION) . "') AND (`filesize` = '-1') AND (`filetime` = '-1') AND (`analyzetime` = '-1')", $this->connection)) {
         list($version) = mysql_fetch_array($this->cursor);
     }
     if ($version != GETID3_VERSION) {
         $this->clear_cache();
     }
     parent::getID3();
 }
예제 #3
0
 public function getID3_cached_dbm($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::getID3();
 }
 function getID3_cached_mysql(&$db)
 {
     // Check version number and clear cache if changed
     $this->database =& $db;
     $this->database->setQuery("SELECT `value` FROM `#__zoom_getid3_cache` WHERE (`filename` = '" . GETID3_VERSION . "') AND (`filesize` = '-1') AND (`filetime` = '-1') AND (`analyzetime` = '-1')");
     $this->cursor = $this->database->query();
     list($version) = @mysql_fetch_array($this->cursor);
     if ($version != GETID3_VERSION) {
         $this->clear_cache();
     }
     parent::getID3();
 }
예제 #5
0
 function getID3_cached_mysql($host, $database, $username, $password)
 {
     // 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);
     }
     // Create cache table if not exists
     $this->create_table();
     // Check version number and clear cache if changed
     // $$$ hugh - fix for $this::VERSION, as per main getid3.php fixes.
     // can't use $this::VERSION syntax, even conditionally, since it registers as a parse error before PHP v5.3.0
     // wrapping the new syntax in an eval call should work without causing parse errors in old PHP
     /*
     if ($this->cursor = mysql_query("SELECT `value` FROM `getid3_cache` WHERE (`filename` = '".mysql_real_escape_string($this::VERSION)."') AND (`filesize` = '-1') AND (`filetime` = '-1') AND (`analyzetime` = '-1')", $this->connection)) {
     	list($version) = mysql_fetch_array($this->cursor);
     }
     if ($version != $this::VERSION) {
     	$this->clear_cache();
     }
     */
     $version = '';
     $this_version = '';
     eval('$this_version = $this::VERSION;');
     if ($this->cursor = mysql_query("SELECT `value` FROM `getid3_cache` WHERE (`filename` = '" . mysql_real_escape_string($this_version) . "') AND (`filesize` = '-1') AND (`filetime` = '-1') AND (`analyzetime` = '-1')", $this->connection)) {
         list($version) = mysql_fetch_array($this->cursor);
     }
     if ($version != $this_version) {
         $this->clear_cache();
     }
     parent::getID3();
 }