Public Member Functions

getID3_cached_dbm Class Reference

getID3() by James Heinrich <info@getid3.org> // More...

Inheritance diagram for getID3_cached_dbm:
Collaboration diagram for getID3_cached_dbm:

Public Member Functions

 getID3_cached_dbm ($cache_type, $dbm_filename, $lock_filename)
 __destruct ()
 clear_cache ()
 analyze ($filename)

Detailed Description

getID3() by James Heinrich <info@getid3.org> //

This is a caching extension for getID3(). It works the exact same way as the getID3 class, but return cached information very fast

Example:

Normal getID3 usage (example):

require_once 'getid3/getid3.php'; $getID3 = new getID3; $getID3->encoding = 'UTF-8'; $info1 = $getID3->analyze('file1.flac'); $info2 = $getID3->analyze('file2.wv');

getID3_cached usage:

require_once 'getid3/getid3.php'; require_once 'getid3/getid3/extension.cache.dbm.php'; $getID3 = new getID3_cached('db3', '/tmp/getid3_cache.dbm', '/tmp/getid3_cache.lock'); $getID3->encoding = 'UTF-8'; $info1 = $getID3->analyze('file1.flac'); $info2 = $getID3->analyze('file2.wv');

Supported Cache Types

SQL Databases: (use extension.cache.mysql)

cache_type cache_options ------------------------------------------------------------------- mysql host, database, username, password

DBM-Style Databases: (this extension)

cache_type cache_options ------------------------------------------------------------------- gdbm dbm_filename, lock_filename ndbm dbm_filename, lock_filename db2 dbm_filename, lock_filename db3 dbm_filename, lock_filename db4 dbm_filename, lock_filename (PHP5 required)

PHP must have write access to both dbm_filename and lock_filename.

Recommended Cache Types

Infrequent updates, many reads any DBM Frequent updates mysql

Definition at line 72 of file extension.cache.dbm.php.


Constructor & Destructor Documentation

getID3_cached_dbm::__destruct (  ) 

Definition at line 155 of file extension.cache.dbm.php.

                              {

                // Close dbm file
                @dba_close($this->dba);

                // Release exclusive lock
                @flock($this->lock, LOCK_UN);

                // Close lock file
                @fclose($this->lock);
        }


Member Function Documentation

getID3_cached_dbm::analyze ( filename  ) 

Reimplemented from getID3.

Definition at line 192 of file extension.cache.dbm.php.

References getID3::$filename.

                                    {

                if (file_exists($filename)) {

                        // Calc key     filename::mod_time::size    - should be unique
                        $key = $filename . '::' . filemtime($filename) . '::' . filesize($filename);

                        // Loopup key
                        $result = dba_fetch($key, $this->dba);

                        // Hit
                        if ($result !== false) {
                                return unserialize($result);
                        }
                }

                // Miss
                $result = parent::analyze($filename);

                // Save result
                if (file_exists($filename)) {
                        dba_insert($key, serialize($result), $this->dba);
                }

                return $result;
        }

getID3_cached_dbm::clear_cache (  ) 

Definition at line 170 of file extension.cache.dbm.php.

Referenced by getID3_cached_dbm().

                               {

                // Close dbm file
                dba_close($this->dba);

                // Create new dbm file
                $this->dba = dba_open($this->dbm_filename, 'n', $this->cache_type);

                if (!$this->dba) {
                        die('failed to clear cache/recreate dbm file: ' . $this->dbm_filename);
                }

                // Insert getID3 version number
                dba_insert(GETID3_VERSION, GETID3_VERSION, $this->dba);

                // Reregister shutdown function
                register_shutdown_function(array($this, '__destruct'));
        }

Here is the caller graph for this function:

getID3_cached_dbm::getID3_cached_dbm ( cache_type,
dbm_filename,
lock_filename 
)

Definition at line 76 of file extension.cache.dbm.php.

References clear_cache(), and getID3::getID3().

                                                                               {

                // 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();
        }

Here is the call graph for this function:


The documentation for this class was generated from the following file: