~ubuntu-branches/ubuntu/karmic/ampache/karmic

« back to all changes in this revision

Viewing changes to modules/id3/getid3/extension.cache.mysql.php

  • Committer: Bazaar Package Importer
  • Author(s): Charlie Smotherman
  • Date: 2008-05-15 18:44:23 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20080515184423-n47i81yk2s99iuci
Tags: 3.4-2
Included some upstream gather album art fixes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
/////////////////////////////////////////////////////////////////
3
 
/// getID3() by James Heinrich <info@getid3.org>               //
4
 
//  available at http://getid3.sourceforge.net                 //
5
 
//            or http://www.getid3.org                         //
6
 
/////////////////////////////////////////////////////////////////
7
 
//                                                             //
8
 
// extension.cache.mysql.php - part of getID3()                //
9
 
// Please see readme.txt for more information                  //
10
 
//                                                            ///
11
 
/////////////////////////////////////////////////////////////////
12
 
//                                                             //
13
 
// This extension written by Allan Hansen <ah�artemis*dk>      //
14
 
//                                                            ///
15
 
/////////////////////////////////////////////////////////////////
16
 
 
17
 
 
18
 
/**
19
 
* This is a caching extension for getID3(). It works the exact same
20
 
* way as the getID3 class, but return cached information very fast
21
 
*
22
 
* Example:  (see also demo.cache.mysql.php in /demo/)
23
 
*
24
 
*    Normal getID3 usage (example):
25
 
*
26
 
*       require_once 'getid3/getid3.php';
27
 
*       $getID3 = new getID3;
28
 
*       $getID3->encoding = 'UTF-8';
29
 
*       $info1 = $getID3->analyze('file1.flac');
30
 
*       $info2 = $getID3->analyze('file2.wv');
31
 
*
32
 
*    getID3_cached usage:
33
 
*
34
 
*       require_once 'getid3/getid3.php';
35
 
*       require_once 'getid3/getid3/extension.cache.mysql.php';
36
 
*       $getID3 = new getID3_cached_mysql('localhost', 'database',
37
 
*                                         'username', 'password');
38
 
*       $getID3->encoding = 'UTF-8';
39
 
*       $info1 = $getID3->analyze('file1.flac');
40
 
*       $info2 = $getID3->analyze('file2.wv');
41
 
*
42
 
*
43
 
* Supported Cache Types    (this extension)
44
 
*
45
 
*   SQL Databases:
46
 
*
47
 
*   cache_type          cache_options
48
 
*   -------------------------------------------------------------------
49
 
*   mysql               host, database, username, password
50
 
*
51
 
*
52
 
*   DBM-Style Databases:    (use extension.cache.dbm)
53
 
*
54
 
*   cache_type          cache_options
55
 
*   -------------------------------------------------------------------
56
 
*   gdbm                dbm_filename, lock_filename
57
 
*   ndbm                dbm_filename, lock_filename
58
 
*   db2                 dbm_filename, lock_filename
59
 
*   db3                 dbm_filename, lock_filename
60
 
*   db4                 dbm_filename, lock_filename  (PHP5 required)
61
 
*
62
 
*   PHP must have write access to both dbm_filename and lock_filename.
63
 
*
64
 
*
65
 
* Recommended Cache Types
66
 
*
67
 
*   Infrequent updates, many reads      any DBM
68
 
*   Frequent updates                    mysql
69
 
*/
70
 
 
71
 
 
72
 
class getID3_cached_mysql extends getID3
73
 
{
74
 
 
75
 
        // private vars
76
 
        var $cursor;
77
 
        var $connection;
78
 
 
79
 
 
80
 
        // public: constructor - see top of this file for cache type and cache_options
81
 
        function getID3_cached_mysql($host, $database, $username, $password) {
82
 
 
83
 
                // Check for mysql support
84
 
                if (!function_exists('mysql_pconnect')) {
85
 
                        die('PHP not compiled with mysql support.');
86
 
                }
87
 
 
88
 
                // Connect to database
89
 
                $this->connection = mysql_pconnect($host, $username, $password);
90
 
                if (!$this->connection) {
91
 
                        die('mysql_pconnect() failed - check permissions and spelling.');
92
 
                }
93
 
 
94
 
                // Select database
95
 
                if (!mysql_select_db($database, $this->connection)) {
96
 
                        die('Cannot use database '.$database);
97
 
                }
98
 
 
99
 
                // Create cache table if not exists
100
 
                $this->create_table();
101
 
 
102
 
                // Check version number and clear cache if changed
103
 
                $this->cursor = mysql_query("SELECT `value` FROM `getid3_cache` WHERE (`filename` = '".GETID3_VERSION."') AND (`filesize` = '-1') AND (`filetime` = '-1') AND (`analyzetime` = '-1')", $this->connection);
104
 
                list($version) = @mysql_fetch_array($this->cursor);
105
 
                if ($version != GETID3_VERSION) {
106
 
                        $this->clear_cache();
107
 
                }
108
 
 
109
 
                parent::getID3();
110
 
        }
111
 
 
112
 
 
113
 
 
114
 
        // public: clear cache
115
 
        function clear_cache() {
116
 
 
117
 
                $this->cursor = mysql_query("DELETE FROM `getid3_cache`", $this->connection);
118
 
                $this->cursor = mysql_query("INSERT INTO `getid3_cache` VALUES ('".GETID3_VERSION."', -1, -1, -1, '".GETID3_VERSION."')", $this->connection);
119
 
        }
120
 
 
121
 
 
122
 
 
123
 
        // public: analyze file
124
 
        function analyze($filename) {
125
 
 
126
 
                if (file_exists($filename)) {
127
 
 
128
 
                        // Short-hands
129
 
                        $filetime = filemtime($filename);
130
 
                        $filesize = filesize($filename);
131
 
                        $filenam2 = mysql_escape_string($filename);
132
 
 
133
 
                        // Loopup file
134
 
                        $this->cursor = mysql_query("SELECT `value` FROM `getid3_cache` WHERE (`filename`='".$filenam2."') AND (`filesize`='".$filesize."') AND (`filetime`='".$filetime."')", $this->connection);
135
 
                        list($result) = @mysql_fetch_array($this->cursor);
136
 
 
137
 
                        // Hit
138
 
                        if ($result) {
139
 
                                return unserialize($result);
140
 
                        }
141
 
                }
142
 
 
143
 
                // Miss
144
 
                $result = parent::analyze($filename);
145
 
 
146
 
                // Save result
147
 
                if (file_exists($filename)) {
148
 
                        $res2 = mysql_escape_string(serialize($result));
149
 
                        $this->cursor = mysql_query("INSERT INTO `getid3_cache` (`filename`, `filesize`, `filetime`, `analyzetime`, `value`) VALUES ('".$filenam2."', '".$filesize."', '".$filetime."', '".time()."', '".$res2."')", $this->connection);
150
 
                }
151
 
                return $result;
152
 
        }
153
 
 
154
 
 
155
 
 
156
 
        // private: (re)create sql table
157
 
        function create_table($drop = false) {
158
 
 
159
 
                $this->cursor = mysql_query("CREATE TABLE IF NOT EXISTS `getid3_cache` (
160
 
                        `filename` VARCHAR(255) NOT NULL DEFAULT '',
161
 
                        `filesize` INT(11) NOT NULL DEFAULT '0',
162
 
                        `filetime` INT(11) NOT NULL DEFAULT '0',
163
 
                        `analyzetime` INT(11) NOT NULL DEFAULT '0',
164
 
                        `value` TEXT NOT NULL,
165
 
                        PRIMARY KEY (`filename`,`filesize`,`filetime`)) TYPE=MyISAM", $this->connection);
166
 
                echo mysql_error($this->connection);
167
 
        }
168
 
}
169
 
 
170
 
 
171
 
?>
 
 
b'\\ No newline at end of file'