Login   Register  
PHP Classes
elePHPant
Icontem

File: includes/getid3/getid3.dirscan.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Karl Holz  >  WaldScan  >  includes/getid3/getid3.dirscan.php  >  Download  
File: includes/getid3/getid3.dirscan.php
Role: Auxiliary script
Content type: text/plain
Description: getID3 dependency
Class: WaldScan
Scan directories for files with certain extensions
Author: By
Last change: getID3 file
Date: 1 year ago
Size: 8,786 bytes
 

Contents

Class file image Download
<?php
/////////////////////////////////////////////////////////////////////////////////
/// getID3() by James Heinrich <info@getid3.org>                               //
//  available at http://getid3.sourceforge.net                                 //
//            or http://www.getid3.org                                        ///
/////////////////////////////////////////////////////////////////////////////////
///                                                                            //
// getid3.dirscan.php - tool for batch media file processing with getID3()     //
//                                                                            ///
/////////////////////////////////////////////////////////////////////////////////
///                                                                            //
//  Directory Scanning and Caching cli tool by Karl G. Holz <newaeon´┐Żmac*com>  //
//                                                                            ///
/////////////////////////////////////////////////////////////////////////////////
/**
 * This is a directory scanning and caching cli tool for getID3(). 
 *
 * use like so for the default sqlite3 database, which is hidden:
 * 
 * cd <path you want to start scanning from>
 * php <path to getid3 files>/getid3.dirscan.php 
 *
 * or 
 * 
 * php <path to getid3 files>/getid3.dirscan.php <dir to scan> <file ext in csv list> 
 * 
 * Supported Cache Types    (this extension)
 *
 *   SQL Databases:
 *
 *   cache_type          
 *   -------------------------------------------------------------------
 *    mysql 

$cache='mysql';
$database['host']='';
$database['database']='';
$database['username']='';
$database['password']='';
$database['table']='';

 *    sqlite3

$cache='sqlite3';  
$database['table']='getid3_cache';
$database['hide']=true;

 */
$dir=$_SERVER['PWD'];
$media=array('mp4''m4v''mov''mp3''m4a''jpg''png''gif');
$database=array();
/**
 * configure the database bellow 
 */
// sqlite3
$cache='sqlite3';
$database['table']='getid3_cache';
$database['hide']=true;
/**
 * mysql
$cache='mysql';
$database['host']='';
$database['database']='';
$database['username']='';
$database['password']='';
$database['table']='';
 */

/**
 * id3 tags class file
 */
 
require_once(dirname(__FILE__).'/getid3.php');
/**
 * dirscan scans all directories for files that match your selected filetypes into the cache database
 * this is useful for a lot of media files
 * 
 * 
 * @package dirscan
 * @author Karl Holz
 * 
 */

class getid3_dirscan {
 
/**
  * type_brace()  * Might not work on Solaris and other non GNU systems *
  *
  * Configures a filetype list for use with glob searches, 
  * will match uppercase or lowercase extensions only, no mixing
  * @param string $dir directory to use
  * @param mixed cvs list of extentions or an array
  * @return string or null if checks fail
  */
    
private function type_brace($dir$search=array()) {
        
$dir=str_replace(array('///''//'), array('/''/' ), $dir);
        if (!
is_dir($dir)) { 
          return 
null
        }
        if (!
is_array($search)) { 
          
$e=explode(','$search);
        } elseif (
count($search) <1) {
          return 
null;
        } else {
          
$e=$search;
        }
        
$ext=array();
        foreach (
$e as $new) {
            
$ext[]=strtolower(trim($new)); 
            
$ext[]=strtoupper(trim($new));    
        }
        
$b=$dir.'/*.{'.implode(','$ext).'}';
        return 
$b;
    }
   
  
/**
   * this function will search 4 levels deep for directories
   * will return null on failure
   * @param string $root 
   * @return array return an array of dirs under root 
   * @todo figure out how to block tabo directories with ease
   */
  
    
private function getDirs($root) {
        switch (
$root) { // return null on tabo directories, add as needed -> case {dir to block }:   this is not perfect yet
            
case '/':
            case 
'/var'
            case 
'/etc':
            case 
'/home':
            case 
'/usr':
            case 
'/root':
            case 
'/private/etc':
            case 
'/private/var':
            case 
'/etc/apache2':
            case 
'/home':
            case 
'/tmp':
            case 
'/var/log':
                return 
null;
            break;
            default: 
// scan 4 directories deep
                
if (!is_dir($root)) {
                    return 
null;
                }
                
$dirs=array_merge(glob($root.'/*'GLOB_ONLYDIR), glob($root.'/*/*'GLOB_ONLYDIR), glob($root.'/*/*/*'GLOB_ONLYDIR), glob($root.'/*/*/*/*'GLOB_ONLYDIR), glob($root.'/*/*/*/*/*'GLOB_ONLYDIR), glob($root.'/*/*/*/*/*/*'GLOB_ONLYDIR), glob($root.'/*/*/*/*/*/*/*'GLOB_ONLYDIR));
        }
        if (
count($dirs) < 1) { 
            
$dirs=array($root); 
        }
        return 
$dirs;
    }
  
 
/**  
  *  file_check() check the number of file that are found that match the brace search
  *
  * @param string $search
  * @return mixed
  */
    
private function file_check($search) {
        
$t=array();
        
$s=glob($searchGLOB_BRACE);
        foreach(
$s as $file) { 
            
$t[]=str_replace(array('///''//'), array('/''/'), $file); 
        }
        if (
count($t) > 0) {
            return 
$t
        }
        return 
null;
    }
 
    function 
getTime() { 
        
$a explode (' ',microtime()); 
        return(double) 
$a[0] + $a[1]; 
    } 

 
 
/**
  *
  * @param type $dir
  * @param type $match  search type name extentions, can be an array or csv list
  * @param type $cache caching extention, select one of sqlite3, mysql, dbm
  * @param array $opt database options, 
  */
    
function scan_files($dir$match$cache='sqlite3'$opt=array('table' => 'getid3_cache''hide'=> true)) {
        
$Start self::getTime();
        switch (
$cache) { // load the caching module
            
case 'sqlite3':
                if (!
class_exists('getID3_cached_sqlite3')) {
                    require_once(
dirname(__FILE__)).'/extension.cache.sqlite3.php';
                }
                
$id3=new getID3_cached_sqlite3($opt['table'], $opt['hide']);         
            break;
            case 
'mysql':
                if (!
class_exists('getID3_cached_mysql')) {
                    require_once(
dirname(__FILE__)).'/extension.cache.mysql.php';
                }
                
$id3=new getID3_cached_mysql($opt['host'], $opt['database'], $opt['username'], $opt['password'], $opt['table']);
            break;
//     case 'dbm':
//         if (!class_exists('getID3_cached_dbm')) {
//             require_once(dirname(__FILE__)).'/extension.cache.dbm.php';
//         } //i'll leave this for some one else 
//         die (" This has not be implimented, sorry for the inconvience");
//     break;
            
default: die(" You have selected an Invalid cache type, only SQLite3, MySQL and dbm are valid \n");
        }
        
$count=array(
            
'dir' => 0,
            
'file' => 0
        
);
        
$dirs=self::getDirs($dir);
        if (
$dirs !== null) {
            foreach (
$dirs as $d) {
                echo 
" Scanning: ".$d."\n";
                
$search=self::type_brace($d$match);
                if (
$search !== null) {
                    
$files=self::file_check($search);
                    if (
$files !== null) {
                        foreach (
$files as $f) {
                            echo 
" * Analyzing $f \n";
                            
$id3->analyze($f);
                            
$count['file']++;
                        }
                        
$count['dir']++;
                    } else {
                        echo 
"Failed to get files \n";
                    }
                } else {
                    echo 
"failed to create match string \n";   
                }
            }
            echo 
"**************************************\n";
            echo 
"* Finished Scanning your directories \n*\n";
            echo 
"* Directories ".$count['dir']."\n";
            echo 
"* Files ".$count['file']."\n";
            
$End self::getTime(); 
            
$t=number_format(($End $Start)/60,2);
            echo 
"* Time taken to scan $dir ".$t." min \n"
            echo 
"**************************************\n";
        } else { 
            echo 
" failed to get directories \n";
        }
    }
}

if (
PHP_SAPI=== 'cli') { 
    if (
count($argv) == 2) {
        if (
is_dir($argv[1])) {
            
$dir=$argv[1];
        } 
        if (
count(explode(','$argv[2]))> 0) {
            
$media=$argv[2];
        } 
    }
    echo 
" * Starting to scan directory: ".$dir."\n"
    echo 
" * Using default media types: ".implode(','$media)."\n";
    
getid3_dirscan::scan_files($dir$media$cache$database);
} else {
 echo 
"You must do this in the console";
}
?>