// // available at http://getid3.sourceforge.net // // or http://www.getid3.org // ///////////////////////////////////////////////////////////////// // // // /demo/demo.browse.php - part of getID3() // // Sample script for browsing/scanning files and displaying // // information returned by getID3() // // See readme.txt for more details // // /// ///////////////////////////////////////////////////////////////// //die('Due to a security issue, this demo has been disabled. It can be enabled by removing line '.__LINE__.' in demos/'.basename(__FILE__)); ///////////////////////////////////////////////////////////////// // set predefined variables as if magic_quotes_gpc was off, // whether the server's got it or not: UnifyMagicQuotes(false); ///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// // showfile is used to display embedded images from table_var_dump() // md5 of requested file is required to prevent abuse where any // random file on the server could be viewed if (@$_REQUEST['showfile']) { if (is_readable($_REQUEST['showfile'])) { if (md5_file($_REQUEST['showfile']) == @$_REQUEST['md5']) { readfile($_REQUEST['showfile']); exit; } } die('Cannot display "'.$_REQUEST['showfile'].'"'); } ///////////////////////////////////////////////////////////////// if (!function_exists('getmicrotime')) { function getmicrotime() { list($usec, $sec) = explode(' ', microtime()); return ((float) $usec + (float) $sec); } } /////////////////////////////////////////////////////////////////////////////// $writescriptfilename = 'demo.write.php'; require_once('../getid3/getid3.php'); // Needed for windows only define('GETID3_HELPERAPPSDIR', 'C:/helperapps/'); // Initialize getID3 engine $getID3 = new getID3; $getID3->setOption(array('encoding' => 'UTF-8')); $getID3checkColor_Head = 'CCCCDD'; $getID3checkColor_DirectoryLight = 'FFCCCC'; $getID3checkColor_DirectoryDark = 'EEBBBB'; $getID3checkColor_FileLight = 'EEEEEE'; $getID3checkColor_FileDark = 'DDDDDD'; $getID3checkColor_UnknownLight = 'CCCCFF'; $getID3checkColor_UnknownDark = 'BBBBDD'; /////////////////////////////////////////////////////////////////////////////// header('Content-Type: text/html; charset=UTF-8'); ob_start(); echo ''; echo ''; echo 'getID3() - /demo/demo.browse.php (sample script)'; echo ''; echo ''; if (isset($_REQUEST['deletefile'])) { if (file_exists($_REQUEST['deletefile'])) { if (unlink($_REQUEST['deletefile'])) { $deletefilemessage = 'Successfully deleted '.addslashes($_REQUEST['deletefile']); } else { $deletefilemessage = 'FAILED to delete '.addslashes($_REQUEST['deletefile']).' - error deleting file'; } } else { $deletefilemessage = 'FAILED to delete '.addslashes($_REQUEST['deletefile']).' - file does not exist'; } if (isset($_REQUEST['noalert'])) { echo ''.$deletefilemessage.'
'; } else { echo ''; } } if (isset($_REQUEST['filename'])) { if (!file_exists($_REQUEST['filename']) || !is_file($_REQUEST['filename'])) { die(getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-8', $_REQUEST['filename'].' does not exist')); } $starttime = getmicrotime(); //$getID3->setOption(array( // 'option_md5_data' => $AutoGetHashes, // 'option_sha1_data' => $AutoGetHashes, //)); $ThisFileInfo = $getID3->analyze($_REQUEST['filename']); $AutoGetHashes = (bool) ((@$ThisFileInfo['filesize'] > 0) && ($ThisFileInfo['filesize'] < (50 * 1048576))); // auto-get md5_data, md5_file, sha1_data, sha1_file if filesize < 50MB, and NOT zero (which may indicate a file>2GB) if ($AutoGetHashes) { $ThisFileInfo['md5_file'] = getid3_lib::md5_file($_REQUEST['filename']); $ThisFileInfo['sha1_file'] = getid3_lib::sha1_file($_REQUEST['filename']); } getid3_lib::CopyTagsToComments($ThisFileInfo); $listdirectory = dirname(getid3_lib::SafeStripSlashes($_REQUEST['filename'])); $listdirectory = realpath($listdirectory); // get rid of /../../ references if (GETID3_OS_ISWINDOWS) { // this mostly just gives a consistant look to Windows and *nix filesystems // (windows uses \ as directory seperator, *nix uses /) $listdirectory = str_replace('\\', '/', $listdirectory.'/'); } if (strstr($_REQUEST['filename'], 'http://') || strstr($_REQUEST['filename'], 'ftp://')) { echo 'Cannot browse remote filesystems
'; } else { echo 'Browse: '.getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-8', $listdirectory).'
'; } echo table_var_dump($ThisFileInfo); $endtime = getmicrotime(); echo 'File parsed in '.number_format($endtime - $starttime, 3).' seconds.
'; } else { $listdirectory = (isset($_REQUEST['listdirectory']) ? getid3_lib::SafeStripSlashes($_REQUEST['listdirectory']) : '.'); $listdirectory = realpath($listdirectory); // get rid of /../../ references $currentfulldir = $listdirectory.'/'; if (GETID3_OS_ISWINDOWS) { // this mostly just gives a consistant look to Windows and *nix filesystems // (windows uses \ as directory seperator, *nix uses /) $currentfulldir = str_replace('\\', '/', $listdirectory.'/'); } if ($handle = @opendir($listdirectory)) { echo str_repeat(' ', 300); // IE buffers the first 300 or so chars, making this progressive display useless - fill the buffer with spaces echo 'Processing'; $starttime = getmicrotime(); $TotalScannedUnknownFiles = 0; $TotalScannedKnownFiles = 0; $TotalScannedPlaytimeFiles = 0; $TotalScannedBitrateFiles = 0; $TotalScannedFilesize = 0; $TotalScannedPlaytime = 0; $TotalScannedBitrate = 0; $FilesWithWarnings = 0; $FilesWithErrors = 0; while ($file = readdir($handle)) { $currentfilename = $listdirectory.'/'.$file; set_time_limit(30); // allocate another 30 seconds to process this file - should go much quicker than this unless intense processing (like bitrate histogram analysis) is enabled echo ' .'; // progress indicator dot flush(); // make sure the dot is shown, otherwise it's useless switch ($file) { case '..': $ParentDir = realpath($file.'/..').'/'; if (GETID3_OS_ISWINDOWS) { $ParentDir = str_replace('\\', '/', $ParentDir); } $DirectoryContents[$currentfulldir]['dir'][$file]['filename'] = $ParentDir; continue 2; break; case '.': // ignore continue 2; break; } // symbolic-link-resolution enhancements by davidbullock×´ech-center*com $TargetObject = realpath($currentfilename); // Find actual file path, resolve if it's a symbolic link $TargetObjectType = filetype($TargetObject); // Check file type without examining extension if ($TargetObjectType == 'dir') { $DirectoryContents[$currentfulldir]['dir'][$file]['filename'] = $file; } elseif ($TargetObjectType == 'file') { $getID3->setOption(array('option_md5_data' => isset($_REQUEST['ShowMD5']))); $fileinformation = $getID3->analyze($currentfilename); getid3_lib::CopyTagsToComments($fileinformation); $TotalScannedFilesize += @$fileinformation['filesize']; if (isset($_REQUEST['ShowMD5'])) { $fileinformation['md5_file'] = md5($currentfilename); $fileinformation['md5_file'] = getid3_lib::md5_file($currentfilename); } if (!empty($fileinformation['fileformat'])) { $DirectoryContents[$currentfulldir]['known'][$file] = $fileinformation; $TotalScannedPlaytime += @$fileinformation['playtime_seconds']; $TotalScannedBitrate += @$fileinformation['bitrate']; $TotalScannedKnownFiles++; } else { $DirectoryContents[$currentfulldir]['other'][$file] = $fileinformation; $DirectoryContents[$currentfulldir]['other'][$file]['playtime_string'] = '-'; $TotalScannedUnknownFiles++; } if (isset($fileinformation['playtime_seconds']) && ($fileinformation['playtime_seconds'] > 0)) { $TotalScannedPlaytimeFiles++; } if (isset($fileinformation['bitrate']) && ($fileinformation['bitrate'] > 0)) { $TotalScannedBitrateFiles++; } } } $endtime = getmicrotime(); closedir($handle); echo 'done
'; echo 'Directory scanned in '.number_format($endtime - $starttime, 2).' seconds.
'; flush(); $columnsintable = 14; echo ''; echo ''; $rowcounter = 0; foreach ($DirectoryContents as $dirname => $val) { if (isset($DirectoryContents[$dirname]['dir']) && is_array($DirectoryContents[$dirname]['dir'])) { uksort($DirectoryContents[$dirname]['dir'], 'MoreNaturalSort'); foreach ($DirectoryContents[$dirname]['dir'] as $filename => $fileinfo) { echo ''; if ($filename == '..') { echo ''; } else { echo ''; } echo ''; } } echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; if (isset($_REQUEST['ShowMD5'])) { echo ''; echo ''; echo ''; } else { echo ''; } echo ''; echo ''; echo ''; echo ''; echo ''; if (isset($DirectoryContents[$dirname]['known']) && is_array($DirectoryContents[$dirname]['known'])) { uksort($DirectoryContents[$dirname]['known'], 'MoreNaturalSort'); foreach ($DirectoryContents[$dirname]['known'] as $filename => $fileinfo) { echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; if (isset($_REQUEST['ShowMD5'])) { echo ''; echo ''; echo ''; } else { echo ''; } echo ''; echo ''; echo ''; echo ''; echo ''; } } if (isset($DirectoryContents[$dirname]['other']) && is_array($DirectoryContents[$dirname]['other'])) { uksort($DirectoryContents[$dirname]['other'], 'MoreNaturalSort'); foreach ($DirectoryContents[$dirname]['other'] as $filename => $fileinfo) { echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; // Artist echo ''; // Title echo ''; // MD5_data echo ''; // Tags //echo ''; // Warning/Error echo ''; echo ''; // Edit echo ''; echo ''; } } echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } echo '
Files in '.getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-8', $currentfulldir).'
'; echo '
'; echo 'Parent directory: '; echo ' '; echo '
'.FixTextFields($filename).'
FilenameFile SizeFormatPlaytimeBitrateArtistTitleMD5 File (File) (disable)MD5 Data (File) (disable)MD5 Data (Source) (disable)MD5 Data (enable)TagsErrors & WarningsEditDelete
'.FixTextFields(getid3_lib::SafeStripSlashes($filename)).' '.number_format($fileinfo['filesize']).' '.NiceDisplayFiletypeFormat($fileinfo).' '.(isset($fileinfo['playtime_string']) ? $fileinfo['playtime_string'] : '-').' '.(isset($fileinfo['bitrate']) ? BitrateText($fileinfo['bitrate'] / 1000, 0, ((@$fileinfo['audio']['bitrate_mode'] == 'vbr') ? true : false)) : '-').' '.(isset($fileinfo['comments_html']['artist']) ? implode('
', $fileinfo['comments_html']['artist']) : '').'
 '.(isset($fileinfo['comments_html']['title']) ? implode('
', $fileinfo['comments_html']['title']) : '').'
'.(isset($fileinfo['md5_file']) ? $fileinfo['md5_file'] : ' ').''.(isset($fileinfo['md5_data']) ? $fileinfo['md5_data'] : ' ').''.(isset($fileinfo['md5_data_source']) ? $fileinfo['md5_data_source'] : ' ').'- '.@implode(', ', array_keys($fileinfo['tags'])).' '; if (!empty($fileinfo['warning'])) { $FilesWithWarnings++; echo 'warning
'; } if (!empty($fileinfo['error'])) { $FilesWithErrors++; echo 'error
'; } echo '
 '; switch (@$fileinfo['fileformat']) { case 'mp3': case 'mp2': case 'mp1': case 'flac': case 'mpc': case 'real': echo 'edit tags'; break; case 'ogg': switch (@$fileinfo['audio']['dataformat']) { case 'vorbis': echo 'edit tags'; break; } break; default: break; } echo ' delete
'.$filename.' '.(isset($fileinfo['filesize']) ? number_format($fileinfo['filesize']) : '-').' '.NiceDisplayFiletypeFormat($fileinfo).' '.(isset($fileinfo['playtime_string']) ? $fileinfo['playtime_string'] : '-').' '.(isset($fileinfo['bitrate']) ? BitrateText($fileinfo['bitrate'] / 1000) : '-').'      '; if (!empty($fileinfo['warning'])) { $FilesWithWarnings++; echo 'warning
'; } if (!empty($fileinfo['error'])) { if ($fileinfo['error'][0] != 'unable to determine file format') { $FilesWithErrors++; echo 'error
'; } } echo '
  delete
Average:'.number_format($TotalScannedFilesize / max($TotalScannedKnownFiles, 1)).' '.getid3_lib::PlaytimeString($TotalScannedPlaytime / max($TotalScannedPlaytimeFiles, 1)).''.BitrateText(round(($TotalScannedBitrate / 1000) / max($TotalScannedBitrateFiles, 1))).'
Identified Files:'.number_format($TotalScannedKnownFiles).'   Errors:'.number_format($FilesWithErrors).'
Unknown Files:'.number_format($TotalScannedUnknownFiles).'   Warnings:'.number_format($FilesWithWarnings).'
'; echo '
Total:'.number_format($TotalScannedFilesize).' '.getid3_lib::PlaytimeString($TotalScannedPlaytime).' 
'; } else { echo 'ERROR: Could not open directory: '.$currentfulldir.'
'; } } echo PoweredBygetID3(); echo 'Running on PHP v'.phpversion(); echo ''; ob_end_flush(); ///////////////////////////////////////////////////////////////// function RemoveAccents($string) { // Revised version by markstewardרotmail*com // Again revised by James Heinrich (19-June-2006) return strtr( strtr( $string, "\x8A\x8E\x9A\x9E\x9F\xC0\xC1\xC2\xC3\xC4\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xE0\xE1\xE2\xE3\xE4\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFF", 'SZszYAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy' ), array( "\xDE" => 'TH', "\xFE" => 'th', "\xD0" => 'DH', "\xF0" => 'dh', "\xDF" => 'ss', "\x8C" => 'OE', "\x9C" => 'oe', "\xC6" => 'AE', "\xE6" => 'ae', "\xB5" => 'u' ) ); } function BitrateColor($bitrate, $BitrateMaxScale=768) { // $BitrateMaxScale is bitrate of maximum-quality color (bright green) // below this is gradient, above is solid green $bitrate *= (256 / $BitrateMaxScale); // scale from 1-[768]kbps to 1-256 $bitrate = round(min(max($bitrate, 1), 256)); $bitrate--; // scale from 1-256kbps to 0-255kbps $Rcomponent = max(255 - ($bitrate * 2), 0); $Gcomponent = max(($bitrate * 2) - 255, 0); if ($bitrate > 127) { $Bcomponent = max((255 - $bitrate) * 2, 0); } else { $Bcomponent = max($bitrate * 2, 0); } return str_pad(dechex($Rcomponent), 2, '0', STR_PAD_LEFT).str_pad(dechex($Gcomponent), 2, '0', STR_PAD_LEFT).str_pad(dechex($Bcomponent), 2, '0', STR_PAD_LEFT); } function BitrateText($bitrate, $decimals=0, $vbr=false) { return ''.number_format($bitrate, $decimals).' kbps'; } function FixTextFields($text) { $text = getid3_lib::SafeStripSlashes($text); $text = htmlentities($text, ENT_QUOTES); return $text; } function string_var_dump($variable) { ob_start(); var_dump($variable); $dumpedvariable = ob_get_contents(); ob_end_clean(); return $dumpedvariable; } function table_var_dump($variable, $wrap_in_td=false) { $returnstring = ''; switch (gettype($variable)) { case 'array': $returnstring .= ($wrap_in_td ? '' : ''); $returnstring .= ''; foreach ($variable as $key => $value) { $returnstring .= ''; $returnstring .= ''; } else { $returnstring .= ''.table_var_dump($value, true).''; } } $returnstring .= '
'.str_replace("\x00", ' ', $key).''.gettype($value); if (is_array($value)) { $returnstring .= ' ('.count($value).')'; } elseif (is_string($value)) { $returnstring .= ' ('.strlen($value).')'; } if (($key == 'data') && isset($variable['image_mime']) && isset($variable['dataoffset'])) { $imageinfo = array(); $imagechunkcheck = getid3_lib::GetDataImageSize($value, $imageinfo); $DumpedImageSRC = (!empty($_REQUEST['filename']) ? $_REQUEST['filename'] : '.getid3').'.'.$variable['dataoffset'].'.'.getid3_lib::ImageTypesLookup($imagechunkcheck[2]); if ($tempimagefile = @fopen($DumpedImageSRC, 'wb')) { fwrite($tempimagefile, $value); fclose($tempimagefile); } $returnstring .= '
'; $returnstring .= ($wrap_in_td ? '' : ''); break; case 'boolean': $returnstring .= ($wrap_in_td ? '' : '').($variable ? 'TRUE' : 'FALSE').($wrap_in_td ? '' : ''); break; case 'integer': $returnstring .= ($wrap_in_td ? '' : '').$variable.($wrap_in_td ? '' : ''); break; case 'double': case 'float': $returnstring .= ($wrap_in_td ? '' : '').$variable.($wrap_in_td ? '' : ''); break; case 'object': case 'null': $returnstring .= ($wrap_in_td ? '' : '').string_var_dump($variable).($wrap_in_td ? '' : ''); break; case 'string': $variable = str_replace("\x00", ' ', $variable); $varlen = strlen($variable); for ($i = 0; $i < $varlen; $i++) { if (ereg('['."\x0A\x0D".' -;0-9A-Za-z]', $variable{$i})) { $returnstring .= $variable{$i}; } else { $returnstring .= '&#'.str_pad(ord($variable{$i}), 3, '0', STR_PAD_LEFT).';'; } } $returnstring = ($wrap_in_td ? '' : '').nl2br($returnstring).($wrap_in_td ? '' : ''); break; default: $imageinfo = array(); $imagechunkcheck = getid3_lib::GetDataImageSize($variable, $imageinfo); if (($imagechunkcheck[2] >= 1) && ($imagechunkcheck[2] <= 3)) { $returnstring .= ($wrap_in_td ? '' : ''); $returnstring .= ''; $returnstring .= ''; $returnstring .= ''; $returnstring .= ''; $returnstring .= '
type'.getid3_lib::ImageTypesLookup($imagechunkcheck[2]).'
width'.number_format($imagechunkcheck[0]).' px
height'.number_format($imagechunkcheck[1]).' px
size'.number_format(strlen($variable)).' bytes
'; $returnstring .= ($wrap_in_td ? '' : ''); } else { $returnstring .= ($wrap_in_td ? '' : '').nl2br(htmlspecialchars(str_replace("\x00", ' ', $variable))).($wrap_in_td ? '' : ''); } break; } return $returnstring; } function NiceDisplayFiletypeFormat(&$fileinfo) { if (empty($fileinfo['fileformat'])) { return '-'; } $output = $fileinfo['fileformat']; if (empty($fileinfo['video']['dataformat']) && empty($fileinfo['audio']['dataformat'])) { return $output; // 'gif' } if (empty($fileinfo['video']['dataformat']) && !empty($fileinfo['audio']['dataformat'])) { if ($fileinfo['fileformat'] == $fileinfo['audio']['dataformat']) { return $output; // 'mp3' } $output .= '.'.$fileinfo['audio']['dataformat']; // 'ogg.flac' return $output; } if (!empty($fileinfo['video']['dataformat']) && empty($fileinfo['audio']['dataformat'])) { if ($fileinfo['fileformat'] == $fileinfo['video']['dataformat']) { return $output; // 'mpeg' } $output .= '.'.$fileinfo['video']['dataformat']; // 'riff.avi' return $output; } if ($fileinfo['video']['dataformat'] == $fileinfo['audio']['dataformat']) { if ($fileinfo['fileformat'] == $fileinfo['video']['dataformat']) { return $output; // 'real' } $output .= '.'.$fileinfo['video']['dataformat']; // any examples? return $output; } $output .= '.'.$fileinfo['video']['dataformat']; $output .= '.'.$fileinfo['audio']['dataformat']; // asf.wmv.wma return $output; } function MoreNaturalSort($ar1, $ar2) { if ($ar1 === $ar2) { return 0; } $len1 = strlen($ar1); $len2 = strlen($ar2); $shortest = min($len1, $len2); if (substr($ar1, 0, $shortest) === substr($ar2, 0, $shortest)) { // the shorter argument is the beginning of the longer one, like "str" and "string" if ($len1 < $len2) { return -1; } elseif ($len1 > $len2) { return 1; } return 0; } $ar1 = RemoveAccents(strtolower(trim($ar1))); $ar2 = RemoveAccents(strtolower(trim($ar2))); $translatearray = array('\''=>'', '"'=>'', '_'=>' ', '('=>'', ')'=>'', '-'=>' ', ' '=>' ', '.'=>'', ','=>''); foreach ($translatearray as $key => $val) { $ar1 = str_replace($key, $val, $ar1); $ar2 = str_replace($key, $val, $ar2); } if ($ar1 < $ar2) { return -1; } elseif ($ar1 > $ar2) { return 1; } return 0; } function PoweredBygetID3($string='

Powered by getID3() v
http://getid3.sourceforge.net
') { return str_replace('', GETID3_VERSION, $string); } ///////////////////////////////////////////////////////////////// // Unify the contents of GPC, // whether magic_quotes_gpc is on or off function AddStripSlashesArray($input, $addslashes=false) { if (is_array($input)) { $output = $input; foreach ($input as $key => $value) { $output[$key] = AddStripSlashesArray($input[$key]); } return $output; } elseif ($addslashes) { return addslashes($input); } return stripslashes($input); } function UnifyMagicQuotes($turnon=false) { global $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS; if (get_magic_quotes_gpc() && !$turnon) { // magic_quotes_gpc is on and we want it off! $_GET = AddStripSlashesArray($_GET, true); $_POST = AddStripSlashesArray($_POST, true); $_COOKIE = AddStripSlashesArray($_COOKIE, true); unset($_REQUEST); $_REQUEST = array_merge_recursive($_GET, $_POST, $_COOKIE); } elseif (!get_magic_quotes_gpc() && $turnon) { // magic_quotes_gpc is off and we want it on (why??) $_GET = AddStripSlashesArray($_GET, true); $_POST = AddStripSlashesArray($_POST, true); $_COOKIE = AddStripSlashesArray($_COOKIE, true); unset($_REQUEST); $_REQUEST = array_merge_recursive($_GET, $_POST, $_COOKIE); } $HTTP_GET_VARS = $_GET; $HTTP_POST_VARS = $_POST; $HTTP_COOKIE_VARS = $_COOKIE; return true; } ///////////////////////////////////////////////////////////////// ?>