PHP Classes

File: includes/getid3/getid3.dirscan.php

Recommend this page to a friend!
  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: Update of includes/getid3/getid3.dirscan.php
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($search, GLOB_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";
}
?>