commit
da63140b04
@ -1,319 +0,0 @@ |
||||
<?php |
||||
|
||||
// +----------------------------------------------------------------------+ |
||||
// | PHP version 4.1.0 | |
||||
// +----------------------------------------------------------------------+ |
||||
// | Placed in public domain by Allan Hansen, 2002. Share and enjoy! | |
||||
// +----------------------------------------------------------------------+ |
||||
// | /demo/demo.audioinfo.class.php | |
||||
// | | |
||||
// | Example wrapper class to extract information from audio files | |
||||
// | through getID3(). | |
||||
// | | |
||||
// | getID3() returns a lot of information. Much of this information is | |
||||
// | not needed for the end-application. It is also possible that some | |
||||
// | users want to extract specific info. Modifying getID3() files is a | |
||||
// | bad idea, as modifications needs to be done to future versions of | |
||||
// | getID3(). | |
||||
// | | |
||||
// | Modify this wrapper class instead. This example extracts certain | |
||||
// | fields only and adds a new root value - encoder_options if possible. | |
||||
// | It also checks for mp3 files with wave headers. | |
||||
// +----------------------------------------------------------------------+ |
||||
// | Example code: | |
||||
// | $au = new AudioInfo(); | |
||||
// | print_r($au->Info('file.flac'); | |
||||
// +----------------------------------------------------------------------+ |
||||
// | Authors: Allan Hansen <ahØartemis*dk> | |
||||
// +----------------------------------------------------------------------+ |
||||
// |
||||
|
||||
|
||||
|
||||
/** |
||||
* getID3() settings |
||||
*/ |
||||
|
||||
require_once('../getid3/getid3.php'); |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* Class for extracting information from audio files with getID3(). |
||||
*/ |
||||
|
||||
class AudioInfo { |
||||
|
||||
/** |
||||
* Private variables |
||||
*/ |
||||
var $result = NULL; |
||||
var $info = NULL; |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* Constructor |
||||
*/ |
||||
|
||||
function AudioInfo() { |
||||
|
||||
// Initialize getID3 engine |
||||
$this->getID3 = new getID3; |
||||
$this->getID3->option_md5_data = true; |
||||
$this->getID3->option_md5_data_source = true; |
||||
$this->getID3->encoding = 'UTF-8'; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* Extract information - only public function |
||||
* |
||||
* @access public |
||||
* @param string file Audio file to extract info from. |
||||
*/ |
||||
|
||||
function Info($file) { |
||||
|
||||
// Analyze file |
||||
$this->info = $this->getID3->analyze($file); |
||||
|
||||
// Exit here on error |
||||
if (isset($this->info['error'])) { |
||||
return array ('error' => $this->info['error']); |
||||
} |
||||
|
||||
// Init wrapper object |
||||
$this->result = array (); |
||||
$this->result['format_name'] = @$this->info['fileformat'].'/'.@$this->info['audio']['dataformat'].(isset($this->info['video']['dataformat']) ? '/'.@$this->info['video']['dataformat'] : ''); |
||||
$this->result['encoder_version'] = @$this->info['audio']['encoder']; |
||||
$this->result['encoder_options'] = @$this->info['audio']['encoder_options']; |
||||
$this->result['bitrate_mode'] = @$this->info['audio']['bitrate_mode']; |
||||
$this->result['channels'] = @$this->info['audio']['channels']; |
||||
$this->result['sample_rate'] = @$this->info['audio']['sample_rate']; |
||||
$this->result['bits_per_sample'] = @$this->info['audio']['bits_per_sample']; |
||||
$this->result['playing_time'] = @$this->info['playtime_seconds']; |
||||
$this->result['avg_bit_rate'] = @$this->info['audio']['bitrate']; |
||||
$this->result['tags'] = @$this->info['tags']; |
||||
$this->result['comments'] = @$this->info['comments']; |
||||
$this->result['warning'] = @$this->info['warning']; |
||||
$this->result['md5'] = @$this->info['md5_data']; |
||||
|
||||
// Post getID3() data handling based on file format |
||||
$method = @$this->info['fileformat'].'Info'; |
||||
if (@$this->info['fileformat'] && method_exists($this, $method)) { |
||||
$this->$method(); |
||||
} |
||||
|
||||
return $this->result; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for AAC files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function aacInfo() { |
||||
$this->result['format_name'] = 'AAC'; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for Wave files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function riffInfo() { |
||||
if ($this->info['audio']['dataformat'] == 'wav') { |
||||
|
||||
$this->result['format_name'] = 'Wave'; |
||||
|
||||
} else if (ereg('^mp[1-3]$', $this->info['audio']['dataformat'])) { |
||||
|
||||
$this->result['format_name'] = strtoupper($this->info['audio']['dataformat']); |
||||
|
||||
} else { |
||||
|
||||
$this->result['format_name'] = 'riff/'.$this->info['audio']['dataformat']; |
||||
|
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* * post-getID3() data handling for FLAC files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function flacInfo() { |
||||
$this->result['format_name'] = 'FLAC'; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for Monkey's Audio files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function macInfo() { |
||||
$this->result['format_name'] = 'Monkey\'s Audio'; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for Lossless Audio files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function laInfo() { |
||||
$this->result['format_name'] = 'La'; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for Ogg Vorbis files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function oggInfo() { |
||||
if ($this->info['audio']['dataformat'] == 'vorbis') { |
||||
|
||||
$this->result['format_name'] = 'Ogg Vorbis'; |
||||
|
||||
} else if ($this->info['audio']['dataformat'] == 'flac') { |
||||
|
||||
$this->result['format_name'] = 'Ogg FLAC'; |
||||
|
||||
} else if ($this->info['audio']['dataformat'] == 'speex') { |
||||
|
||||
$this->result['format_name'] = 'Ogg Speex'; |
||||
|
||||
} else { |
||||
|
||||
$this->result['format_name'] = 'Ogg '.$this->info['audio']['dataformat']; |
||||
|
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for Musepack files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function mpcInfo() { |
||||
$this->result['format_name'] = 'Musepack'; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for MPEG files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function mp3Info() { |
||||
$this->result['format_name'] = 'MP3'; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for MPEG files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function mp2Info() { |
||||
$this->result['format_name'] = 'MP2'; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for MPEG files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function mp1Info() { |
||||
$this->result['format_name'] = 'MP1'; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for WMA files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function asfInfo() { |
||||
$this->result['format_name'] = strtoupper($this->info['audio']['dataformat']); |
||||
} |
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for Real files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function realInfo() { |
||||
$this->result['format_name'] = 'Real'; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* post-getID3() data handling for VQF files. |
||||
* |
||||
* @access private |
||||
*/ |
||||
|
||||
function vqfInfo() { |
||||
$this->result['format_name'] = 'VQF'; |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
?> |
||||
@ -1,38 +0,0 @@ |
||||
<?php |
||||
///////////////////////////////////////////////////////////////// |
||||
/// getID3() by James Heinrich <info@getid3.org> // |
||||
// available at http://getid3.sourceforge.net // |
||||
// or http://www.getid3.org // |
||||
///////////////////////////////////////////////////////////////// |
||||
// // |
||||
// /demo/demo.basic.php - part of getID3() // |
||||
// Sample script showing most basic use of getID3() // |
||||
// See readme.txt for more details // |
||||
// /// |
||||
///////////////////////////////////////////////////////////////// |
||||
|
||||
// include getID3() library (can be in a different directory if full path is specified) |
||||
require_once('../getid3/getid3.php'); |
||||
|
||||
// Initialize getID3 engine |
||||
$getID3 = new getID3; |
||||
|
||||
// Analyze file and store returned data in $ThisFileInfo |
||||
$ThisFileInfo = $getID3->analyze($filename); |
||||
|
||||
// Optional: copies data from all subarrays of [tags] into [comments] so |
||||
// metadata is all available in one location for all tag formats |
||||
// metainformation is always available under [tags] even if this is not called |
||||
getid3_lib::CopyTagsToComments($ThisFileInfo); |
||||
|
||||
// Output desired information in whatever format you want |
||||
// Note: all entries in [comments] or [tags] are arrays of strings |
||||
// See structure.txt for information on what information is available where |
||||
// or check out the output of /demos/demo.browse.php for a particular file |
||||
// to see the full detail of what information is returned where in the array |
||||
echo @$ThisFileInfo['comments_html']['artist'][0]; // artist from any/all available tag formats |
||||
echo @$ThisFileInfo['tags']['id3v2']['title'][0]; // title from ID3v2 |
||||
echo @$ThisFileInfo['audio']['bitrate']; // audio bitrate |
||||
echo @$ThisFileInfo['playtime_string']; // playtime in minutes:seconds, formatted string |
||||
|
||||
?> |
||||
@ -1,679 +0,0 @@ |
||||
<?php |
||||
///////////////////////////////////////////////////////////////// |
||||
/// getID3() by James Heinrich <info@getid3.org> // |
||||
// 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 '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'; |
||||
echo '<html><head>'; |
||||
echo '<title>getID3() - /demo/demo.browse.php (sample script)</title>'; |
||||
echo '<link rel="stylesheet" href="getid3.css" type="text/css">'; |
||||
echo '</head><body>'; |
||||
|
||||
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 '<b><font color="'.(($deletefilemessage{0} == 'F') ? '#FF0000' : '#008000').'">'.$deletefilemessage.'</font></b><hr>'; |
||||
} else { |
||||
echo '<script type="text/javascript">alert("'.$deletefilemessage.'");</script>'; |
||||
} |
||||
} |
||||
|
||||
|
||||
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 '<i>Cannot browse remote filesystems</i><br>'; |
||||
} else { |
||||
echo 'Browse: <a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.urlencode($listdirectory).'">'.getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-8', $listdirectory).'</a><br>'; |
||||
} |
||||
|
||||
echo table_var_dump($ThisFileInfo); |
||||
$endtime = getmicrotime(); |
||||
echo 'File parsed in '.number_format($endtime - $starttime, 3).' seconds.<br>'; |
||||
|
||||
} 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<br>'; |
||||
echo 'Directory scanned in '.number_format($endtime - $starttime, 2).' seconds.<br>'; |
||||
flush(); |
||||
|
||||
$columnsintable = 14; |
||||
echo '<table class="table" cellspacing="0" cellpadding="3">'; |
||||
|
||||
echo '<tr bgcolor="#'.$getID3checkColor_Head.'"><th colspan="'.$columnsintable.'">Files in '.getid3_lib::iconv_fallback('ISO-8859-1', 'UTF-8', $currentfulldir).'</th></tr>'; |
||||
$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 '<tr bgcolor="#'.(($rowcounter++ % 2) ? $getID3checkColor_DirectoryLight : $getID3checkColor_DirectoryDark).'">'; |
||||
if ($filename == '..') { |
||||
echo '<td colspan="'.$columnsintable.'">'; |
||||
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="get">'; |
||||
echo 'Parent directory: '; |
||||
echo '<input type="text" name="listdirectory" size="50" style="background-color: '.$getID3checkColor_DirectoryDark.';" value="'; |
||||
if (GETID3_OS_ISWINDOWS) { |
||||
echo htmlentities(str_replace('\\', '/', realpath($dirname.$filename)), ENT_QUOTES); |
||||
} else { |
||||
echo htmlentities(realpath($dirname.$filename), ENT_QUOTES); |
||||
} |
||||
echo '"> <input type="submit" value="Go">'; |
||||
echo '</form></td>'; |
||||
} else { |
||||
echo '<td colspan="'.$columnsintable.'"><a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.urlencode($dirname.$filename).'"><b>'.FixTextFields($filename).'</b></a></td>'; |
||||
} |
||||
echo '</tr>'; |
||||
} |
||||
} |
||||
|
||||
echo '<tr bgcolor="#'.$getID3checkColor_Head.'">'; |
||||
echo '<th>Filename</th>'; |
||||
echo '<th>File Size</th>'; |
||||
echo '<th>Format</th>'; |
||||
echo '<th>Playtime</th>'; |
||||
echo '<th>Bitrate</th>'; |
||||
echo '<th>Artist</th>'; |
||||
echo '<th>Title</th>'; |
||||
if (isset($_REQUEST['ShowMD5'])) { |
||||
echo '<th>MD5 File (File) (<a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.rawurlencode(isset($_REQUEST['listdirectory']) ? $_REQUEST['listdirectory'] : '.').'">disable</a>)</th>'; |
||||
echo '<th>MD5 Data (File) (<a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.rawurlencode(isset($_REQUEST['listdirectory']) ? $_REQUEST['listdirectory'] : '.').'">disable</a>)</th>'; |
||||
echo '<th>MD5 Data (Source) (<a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.rawurlencode(isset($_REQUEST['listdirectory']) ? $_REQUEST['listdirectory'] : '.').'">disable</a>)</th>'; |
||||
} else { |
||||
echo '<th colspan="3">MD5 Data (<a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.rawurlencode(isset($_REQUEST['listdirectory']) ? $_REQUEST['listdirectory'] : '.').'&ShowMD5=1">enable</a>)</th>'; |
||||
} |
||||
echo '<th>Tags</th>'; |
||||
echo '<th>Errors & Warnings</th>'; |
||||
echo '<th>Edit</th>'; |
||||
echo '<th>Delete</th>'; |
||||
echo '</tr>'; |
||||
|
||||
if (isset($DirectoryContents[$dirname]['known']) && is_array($DirectoryContents[$dirname]['known'])) { |
||||
uksort($DirectoryContents[$dirname]['known'], 'MoreNaturalSort'); |
||||
foreach ($DirectoryContents[$dirname]['known'] as $filename => $fileinfo) { |
||||
echo '<tr bgcolor="#'.(($rowcounter++ % 2) ? $getID3checkColor_FileDark : $getID3checkColor_FileLight).'">'; |
||||
echo '<td><a href="'.$_SERVER['PHP_SELF'].'?filename='.urlencode($dirname.$filename).'" title="View detailed analysis">'.FixTextFields(getid3_lib::SafeStripSlashes($filename)).'</a></td>'; |
||||
echo '<td align="right"> '.number_format($fileinfo['filesize']).'</td>'; |
||||
echo '<td align="right"> '.NiceDisplayFiletypeFormat($fileinfo).'</td>'; |
||||
echo '<td align="right"> '.(isset($fileinfo['playtime_string']) ? $fileinfo['playtime_string'] : '-').'</td>'; |
||||
echo '<td align="right"> '.(isset($fileinfo['bitrate']) ? BitrateText($fileinfo['bitrate'] / 1000, 0, ((@$fileinfo['audio']['bitrate_mode'] == 'vbr') ? true : false)) : '-').'</td>'; |
||||
echo '<td align="left"> '.(isset($fileinfo['comments_html']['artist']) ? implode('<br>', $fileinfo['comments_html']['artist']) : '').'</td>'; |
||||
echo '<td align="left"> '.(isset($fileinfo['comments_html']['title']) ? implode('<br>', $fileinfo['comments_html']['title']) : '').'</td>'; |
||||
if (isset($_REQUEST['ShowMD5'])) { |
||||
echo '<td align="left"><tt>'.(isset($fileinfo['md5_file']) ? $fileinfo['md5_file'] : ' ').'</tt></td>'; |
||||
echo '<td align="left"><tt>'.(isset($fileinfo['md5_data']) ? $fileinfo['md5_data'] : ' ').'</tt></td>'; |
||||
echo '<td align="left"><tt>'.(isset($fileinfo['md5_data_source']) ? $fileinfo['md5_data_source'] : ' ').'</tt></td>'; |
||||
} else { |
||||
echo '<td align="center" colspan="3">-</td>'; |
||||
} |
||||
echo '<td align="left"> '.@implode(', ', array_keys($fileinfo['tags'])).'</td>'; |
||||
|
||||
echo '<td align="left"> '; |
||||
if (!empty($fileinfo['warning'])) { |
||||
$FilesWithWarnings++; |
||||
echo '<a href="#" onClick="alert(\''.FixTextFields(implode('\\n', $fileinfo['warning'])).'\'); return false;" title="'.FixTextFields(implode("\n", $fileinfo['warning'])).'">warning</a><br>'; |
||||
} |
||||
if (!empty($fileinfo['error'])) { |
||||
$FilesWithErrors++; |
||||
echo '<a href="#" onClick="alert(\''.FixTextFields(implode('\\n', $fileinfo['error'])).'\'); return false;" title="'.FixTextFields(implode("\n", $fileinfo['error'])).'">error</a><br>'; |
||||
} |
||||
echo '</td>'; |
||||
|
||||
echo '<td align="left"> '; |
||||
switch (@$fileinfo['fileformat']) { |
||||
case 'mp3': |
||||
case 'mp2': |
||||
case 'mp1': |
||||
case 'flac': |
||||
case 'mpc': |
||||
case 'real': |
||||
echo '<a href="'.$writescriptfilename.'?Filename='.urlencode($dirname.$filename).'" title="Edit tags">edit tags</a>'; |
||||
break; |
||||
case 'ogg': |
||||
switch (@$fileinfo['audio']['dataformat']) { |
||||
case 'vorbis': |
||||
echo '<a href="'.$writescriptfilename.'?Filename='.urlencode($dirname.$filename).'" title="Edit tags">edit tags</a>'; |
||||
break; |
||||
} |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
echo '</td>'; |
||||
echo '<td align="left"> <a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.urlencode($listdirectory).'&deletefile='.urlencode($dirname.$filename).'" onClick="return confirm(\'Are you sure you want to delete '.addslashes(htmlentities($dirname.$filename)).'? \n(this action cannot be un-done)\');" title="Permanently delete '."\n".FixTextFields($filename)."\n".' from'."\n".' '.FixTextFields($dirname).'">delete</a></td>'; |
||||
echo '</tr>'; |
||||
} |
||||
} |
||||
|
||||
if (isset($DirectoryContents[$dirname]['other']) && is_array($DirectoryContents[$dirname]['other'])) { |
||||
uksort($DirectoryContents[$dirname]['other'], 'MoreNaturalSort'); |
||||
foreach ($DirectoryContents[$dirname]['other'] as $filename => $fileinfo) { |
||||
echo '<tr bgcolor="#'.(($rowcounter++ % 2) ? $getID3checkColor_UnknownDark : $getID3checkColor_UnknownLight).'">'; |
||||
echo '<td><a href="'.$_SERVER['PHP_SELF'].'?filename='.urlencode($dirname.$filename).'"><i>'.$filename.'</i></a></td>'; |
||||
echo '<td align="right"> '.(isset($fileinfo['filesize']) ? number_format($fileinfo['filesize']) : '-').'</td>'; |
||||
echo '<td align="right"> '.NiceDisplayFiletypeFormat($fileinfo).'</td>'; |
||||
echo '<td align="right"> '.(isset($fileinfo['playtime_string']) ? $fileinfo['playtime_string'] : '-').'</td>'; |
||||
echo '<td align="right"> '.(isset($fileinfo['bitrate']) ? BitrateText($fileinfo['bitrate'] / 1000) : '-').'</td>'; |
||||
echo '<td align="left"> </td>'; // Artist |
||||
echo '<td align="left"> </td>'; // Title |
||||
echo '<td align="left" colspan="3"> </td>'; // MD5_data |
||||
echo '<td align="left"> </td>'; // Tags |
||||
|
||||
//echo '<td align="left"> </td>'; // Warning/Error |
||||
echo '<td align="left"> '; |
||||
if (!empty($fileinfo['warning'])) { |
||||
$FilesWithWarnings++; |
||||
echo '<a href="#" onClick="alert(\''.FixTextFields(implode('\\n', $fileinfo['warning'])).'\'); return false;" title="'.FixTextFields(implode("\n", $fileinfo['warning'])).'">warning</a><br>'; |
||||
} |
||||
if (!empty($fileinfo['error'])) { |
||||
if ($fileinfo['error'][0] != 'unable to determine file format') { |
||||
$FilesWithErrors++; |
||||
echo '<a href="#" onClick="alert(\''.FixTextFields(implode('\\n', $fileinfo['error'])).'\'); return false;" title="'.FixTextFields(implode("\n", $fileinfo['error'])).'">error</a><br>'; |
||||
} |
||||
} |
||||
echo '</td>'; |
||||
|
||||
echo '<td align="left"> </td>'; // Edit |
||||
echo '<td align="left"> <a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.urlencode($listdirectory).'&deletefile='.urlencode($dirname.$filename).'" onClick="return confirm(\'Are you sure you want to delete '.addslashes($dirname.$filename).'? \n(this action cannot be un-done)\');" title="Permanently delete '.addslashes($dirname.$filename).'">delete</a></td>'; |
||||
echo '</tr>'; |
||||
} |
||||
} |
||||
|
||||
echo '<tr bgcolor="#'.$getID3checkColor_Head.'">'; |
||||
echo '<td><b>Average:</b></td>'; |
||||
echo '<td align="right">'.number_format($TotalScannedFilesize / max($TotalScannedKnownFiles, 1)).'</td>'; |
||||
echo '<td> </td>'; |
||||
echo '<td align="right">'.getid3_lib::PlaytimeString($TotalScannedPlaytime / max($TotalScannedPlaytimeFiles, 1)).'</td>'; |
||||
echo '<td align="right">'.BitrateText(round(($TotalScannedBitrate / 1000) / max($TotalScannedBitrateFiles, 1))).'</td>'; |
||||
echo '<td rowspan="2" colspan="'.($columnsintable - 5).'"><table class="table" border="0" cellspacing="0" cellpadding="2"><tr><th align="right">Identified Files:</th><td align="right">'.number_format($TotalScannedKnownFiles).'</td><td> </td><th align="right">Errors:</th><td align="right">'.number_format($FilesWithErrors).'</td></tr><tr><th align="right">Unknown Files:</th><td align="right">'.number_format($TotalScannedUnknownFiles).'</td><td> </td><th align="right">Warnings:</th><td align="right">'.number_format($FilesWithWarnings).'</td></tr></table>'; |
||||
echo '</tr>'; |
||||
echo '<tr bgcolor="#'.$getID3checkColor_Head.'">'; |
||||
echo '<td><b>Total:</b></td>'; |
||||
echo '<td align="right">'.number_format($TotalScannedFilesize).'</td>'; |
||||
echo '<td> </td>'; |
||||
echo '<td align="right">'.getid3_lib::PlaytimeString($TotalScannedPlaytime).'</td>'; |
||||
echo '<td> </td>'; |
||||
echo '</tr>'; |
||||
} |
||||
echo '</table>'; |
||||
} else { |
||||
echo '<b>ERROR: Could not open directory: <u>'.$currentfulldir.'</u></b><br>'; |
||||
} |
||||
} |
||||
echo PoweredBygetID3(); |
||||
echo 'Running on PHP v'.phpversion(); |
||||
echo '</body></html>'; |
||||
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 '<SPAN STYLE="color: #'.BitrateColor($bitrate).($vbr ? '; font-weight: bold;' : '').'">'.number_format($bitrate, $decimals).' kbps</SPAN>'; |
||||
} |
||||
|
||||
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 ? '<td>' : ''); |
||||
$returnstring .= '<table class="dump" cellspacing="0" cellpadding="2">'; |
||||
foreach ($variable as $key => $value) { |
||||
$returnstring .= '<tr><td valign="top"><b>'.str_replace("\x00", ' ', $key).'</b></td>'; |
||||
$returnstring .= '<td valign="top">'.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 .= '</td><td><img src="'.$_SERVER['PHP_SELF'].'?showfile='.urlencode($DumpedImageSRC).'&md5='.md5_file($DumpedImageSRC).'" width="'.$imagechunkcheck[0].'" height="'.$imagechunkcheck[1].'"></td></tr>'; |
||||
} else { |
||||
$returnstring .= '</td>'.table_var_dump($value, true).'</tr>'; |
||||
} |
||||
} |
||||
$returnstring .= '</table>'; |
||||
$returnstring .= ($wrap_in_td ? '</td>' : ''); |
||||
break; |
||||
|
||||
case 'boolean': |
||||
$returnstring .= ($wrap_in_td ? '<td class="dump_boolean">' : '').($variable ? 'TRUE' : 'FALSE').($wrap_in_td ? '</td>' : ''); |
||||
break; |
||||
|
||||
case 'integer': |
||||
$returnstring .= ($wrap_in_td ? '<td class="dump_integer">' : '').$variable.($wrap_in_td ? '</td>' : ''); |
||||
break; |
||||
|
||||
case 'double': |
||||
case 'float': |
||||
$returnstring .= ($wrap_in_td ? '<td class="dump_double">' : '').$variable.($wrap_in_td ? '</td>' : ''); |
||||
break; |
||||
|
||||
case 'object': |
||||
case 'null': |
||||
$returnstring .= ($wrap_in_td ? '<td>' : '').string_var_dump($variable).($wrap_in_td ? '</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 ? '<td class="dump_string">' : '').nl2br($returnstring).($wrap_in_td ? '</td>' : ''); |
||||
break; |
||||
|
||||
default: |
||||
$imageinfo = array(); |
||||
$imagechunkcheck = getid3_lib::GetDataImageSize($variable, $imageinfo); |
||||
if (($imagechunkcheck[2] >= 1) && ($imagechunkcheck[2] <= 3)) { |
||||
$returnstring .= ($wrap_in_td ? '<td>' : ''); |
||||
$returnstring .= '<table class="dump" cellspacing="0" cellpadding="2">'; |
||||
$returnstring .= '<tr><td><b>type</b></td><td>'.getid3_lib::ImageTypesLookup($imagechunkcheck[2]).'</td></tr>'; |
||||
$returnstring .= '<tr><td><b>width</b></td><td>'.number_format($imagechunkcheck[0]).' px</td></tr>'; |
||||
$returnstring .= '<tr><td><b>height</b></td><td>'.number_format($imagechunkcheck[1]).' px</td></tr>'; |
||||
$returnstring .= '<tr><td><b>size</b></td><td>'.number_format(strlen($variable)).' bytes</td></tr></table>'; |
||||
$returnstring .= ($wrap_in_td ? '</td>' : ''); |
||||
} else { |
||||
$returnstring .= ($wrap_in_td ? '<td>' : '').nl2br(htmlspecialchars(str_replace("\x00", ' ', $variable))).($wrap_in_td ? '</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='<br><HR NOSHADE><DIV STYLE="font-size: 8pt; font-face: sans-serif;">Powered by <a href="http://getid3.sourceforge.net" TARGET="_blank"><b>getID3() v<!--GETID3VER--></b><br>http://getid3.sourceforge.net</a></DIV>') { |
||||
return str_replace('<!--GETID3VER-->', 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; |
||||
} |
||||
///////////////////////////////////////////////////////////////// |
||||
|
||||
?> |
||||
@ -1,29 +0,0 @@ |
||||
<?php |
||||
///////////////////////////////////////////////////////////////// |
||||
/// getID3() by James Heinrich <info@getid3.org> // |
||||
// available at http://getid3.sourceforge.net // |
||||
// or http://www.getid3.org // |
||||
///////////////////////////////////////////////////////////////// |
||||
// // |
||||
// /demo/demo.cache.dbm.php - part of getID3() // |
||||
// Sample script demonstrating the use of the DBM caching // |
||||
// extension for getID3() // |
||||
// See readme.txt for more details // |
||||
// /// |
||||
///////////////////////////////////////////////////////////////// |
||||
|
||||
require_once('../getid3/getid3.php'); |
||||
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'extension.cache.dbm.php', __FILE__, true); |
||||
|
||||
$getID3 = new getID3_cached_dbm('db3', '/zimweb/test/test.dbm', '/zimweb/test/test.lock'); |
||||
|
||||
$r = $getID3->analyze('/path/to/files/filename.mp3'); |
||||
|
||||
echo '<pre>'; |
||||
var_dump($r); |
||||
echo '</pre>'; |
||||
|
||||
// uncomment to clear cache |
||||
// $getID3->clear_cache(); |
||||
|
||||
?> |
||||
@ -1,29 +0,0 @@ |
||||
<?php |
||||
///////////////////////////////////////////////////////////////// |
||||
/// getID3() by James Heinrich <info@getid3.org> // |
||||
// available at http://getid3.sourceforge.net // |
||||
// or http://www.getid3.org // |
||||
///////////////////////////////////////////////////////////////// |
||||
// // |
||||
// /demo/demo.cache.mysql.php - part of getID3() // |
||||
// Sample script demonstrating the use of the DBM caching // |
||||
// extension for getID3() // |
||||
// See readme.txt for more details // |
||||
// /// |
||||
///////////////////////////////////////////////////////////////// |
||||
|
||||
require_once('../getid3/getid3.php'); |
||||
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'extension.cache.mysql.php', __FILE__, true); |
||||
|
||||
$getID3 = new getID3_cached_mysql('localhost', 'database', 'username', 'password'); |
||||
|
||||
$r = $getID3->analyze('/path/to/files/filename.mp3'); |
||||
|
||||
echo '<pre>'; |
||||
var_dump($r); |
||||
echo '</pre>'; |
||||
|
||||
// uncomment to clear cache |
||||
//$getID3->clear_cache(); |
||||
|
||||
?> |
||||
@ -1,96 +0,0 @@ |
||||
<?php |
||||
///////////////////////////////////////////////////////////////// |
||||
/// getID3() by James Heinrich <info@getid3.org> // |
||||
// available at http://getid3.sourceforge.net // |
||||
// or http://www.getid3.org // |
||||
///////////////////////////////////////////////////////////////// |
||||
// // |
||||
// /demo/demo.joinmp3.php - part of getID3() // |
||||
// Sample script for splicing two or more MP3s together into // |
||||
// one file. Does not attempt to fix VBR header frames. // |
||||
// See readme.txt for more details // |
||||
// /// |
||||
///////////////////////////////////////////////////////////////// |
||||
|
||||
|
||||
// sample usage: |
||||
// $FilenameOut = 'combined.mp3'; |
||||
// $FilenamesIn[] = 'file1.mp3'; |
||||
// $FilenamesIn[] = 'file2.mp3'; |
||||
// $FilenamesIn[] = 'file3.mp3'; |
||||
// |
||||
// if (CombineMultipleMP3sTo($FilenameOut, $FilenamesIn)) { |
||||
// echo 'Successfully copied '.implode(' + ', $FilenamesIn).' to '.$FilenameOut; |
||||
// } else { |
||||
// echo 'Failed to copy '.implode(' + ', $FilenamesIn).' to '.$FilenameOut; |
||||
// } |
||||
|
||||
function CombineMultipleMP3sTo($FilenameOut, $FilenamesIn) { |
||||
|
||||
foreach ($FilenamesIn as $nextinputfilename) { |
||||
if (!is_readable($nextinputfilename)) { |
||||
echo 'Cannot read "'.$nextinputfilename.'"<BR>'; |
||||
return false; |
||||
} |
||||
} |
||||
if (!is_writeable($FilenameOut)) { |
||||
echo 'Cannot write "'.$FilenameOut.'"<BR>'; |
||||
return false; |
||||
} |
||||
|
||||
require_once('../getid3/getid3.php'); |
||||
if ($fp_output = @fopen($FilenameOut, 'wb')) { |
||||
|
||||
// Initialize getID3 engine |
||||
$getID3 = new getID3; |
||||
foreach ($FilenamesIn as $nextinputfilename) { |
||||
|
||||
$CurrentFileInfo = $getID3->analyze($nextinputfilename); |
||||
if ($CurrentFileInfo['fileformat'] == 'mp3') { |
||||
|
||||
if ($fp_source = @fopen($nextinputfilename, 'rb')) { |
||||
|
||||
$CurrentOutputPosition = ftell($fp_output); |
||||
|
||||
// copy audio data from first file |
||||
fseek($fp_source, $CurrentFileInfo['avdataoffset'], SEEK_SET); |
||||
while (!feof($fp_source) && (ftell($fp_source) < $CurrentFileInfo['avdataend'])) { |
||||
fwrite($fp_output, fread($fp_source, 32768)); |
||||
} |
||||
fclose($fp_source); |
||||
|
||||
// trim post-audio data (if any) copied from first file that we don't need or want |
||||
$EndOfFileOffset = $CurrentOutputPosition + ($CurrentFileInfo['avdataend'] - $CurrentFileInfo['avdataoffset']); |
||||
fseek($fp_output, $EndOfFileOffset, SEEK_SET); |
||||
ftruncate($fp_output, $EndOfFileOffset); |
||||
|
||||
} else { |
||||
|
||||
echo 'failed to open '.$nextinputfilename.' for reading'; |
||||
fclose($fp_output); |
||||
return false; |
||||
|
||||
} |
||||
|
||||
} else { |
||||
|
||||
echo $nextinputfilename.' is not MP3 format'; |
||||
fclose($fp_output); |
||||
return false; |
||||
|
||||
} |
||||
|
||||
} |
||||
|
||||
} else { |
||||
|
||||
echo 'failed to open '.$FilenameOut.' for writing'; |
||||
return false; |
||||
|
||||
} |
||||
|
||||
fclose($fp_output); |
||||
return true; |
||||
} |
||||
|
||||
?> |
||||
@ -1,53 +0,0 @@ |
||||
<?php |
||||
///////////////////////////////////////////////////////////////// |
||||
/// getID3() by James Heinrich <info@getid3.org> // |
||||
// available at http://getid3.sourceforge.net // |
||||
// or http://www.getid3.org // |
||||
///////////////////////////////////////////////////////////////// |
||||
// // |
||||
// /demo/demo.mimeonly.php - part of getID3() // |
||||
// Sample script for scanning a single file and returning only // |
||||
// the MIME information // |
||||
// See readme.txt for more details // |
||||
// /// |
||||
///////////////////////////////////////////////////////////////// |
||||
|
||||
echo '<HTML><HEAD><STYLE>BODY, TD, TH { font-family: sans-serif; font-size: 10pt; }</STYLE></HEAD><BODY>'; |
||||
|
||||
if (!empty($_REQUEST['filename'])) { |
||||
|
||||
echo 'The file "'.$_REQUEST['filename'].'" has a MIME type of "'.GetMIMEtype($_REQUEST['filename']).'"'; |
||||
|
||||
} else { |
||||
|
||||
echo 'Usage: <TT>'.$_SERVER['PHP_SELF'].'?filename=<I>filename.ext</I></TT>'; |
||||
|
||||
} |
||||
|
||||
|
||||
function GetMIMEtype($filename) { |
||||
// include getID3() library (can be in a different directory if full path is specified) |
||||
require_once('../getid3/getid3.php'); |
||||
// Initialize getID3 engine |
||||
$getID3 = new getID3; |
||||
|
||||
$DeterminedMIMEtype = ''; |
||||
if ($fp = fopen($filename, 'rb')) { |
||||
$ThisFileInfo = array('avdataoffset'=>0, 'avdataend'=>0); |
||||
|
||||
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true); |
||||
$tag = new getid3_id3v2($fp, $ThisFileInfo); |
||||
|
||||
fseek($fp, $ThisFileInfo['avdataoffset'], SEEK_SET); |
||||
$formattest = fread($fp, 16); // 16 bytes is sufficient for any format except ISO CD-image |
||||
fclose($fp); |
||||
|
||||
$DeterminedFormatInfo = $getID3->GetFileFormat($formattest); |
||||
$DeterminedMIMEtype = $DeterminedFormatInfo['mime_type']; |
||||
} |
||||
return $DeterminedMIMEtype; |
||||
} |
||||
|
||||
?> |
||||
</BODY> |
||||
</HTML> |
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,53 +0,0 @@ |
||||
<?php |
||||
///////////////////////////////////////////////////////////////// |
||||
/// getID3() by James Heinrich <info@getid3.org> // |
||||
// available at http://getid3.sourceforge.net // |
||||
// or http://www.getid3.org // |
||||
///////////////////////////////////////////////////////////////// |
||||
// // |
||||
// /demo/demo.simple.php - part of getID3() // |
||||
// Sample script for scanning a single directory and // |
||||
// displaying a few pieces of information for each file // |
||||
// See readme.txt for more details // |
||||
// /// |
||||
///////////////////////////////////////////////////////////////// |
||||
|
||||
echo '<HTML><HEAD>'; |
||||
echo '<TITLE>getID3() - /demo/demo.simple.php (sample script)</TITLE>'; |
||||
echo '<STYLE>BODY,TD,TH { font-family: sans-serif; font-size: 9pt; }</STYLE>'; |
||||
echo '</HEAD><BODY>'; |
||||
|
||||
|
||||
// include getID3() library (can be in a different directory if full path is specified) |
||||
require_once('../getid3/getid3.php'); |
||||
|
||||
// Initialize getID3 engine |
||||
$getID3 = new getID3; |
||||
|
||||
$DirectoryToScan = '/change/to/directory/you/want/to/scan'; // change to whatever directory you want to scan |
||||
$dir = opendir($DirectoryToScan); |
||||
echo '<TABLE BORDER="1" CELLSPACING="0" CELLPADDING="3">'; |
||||
echo '<TR><TH>Filename</TH><TH>Artist</TH><TH>Title</TH><TH>Bitrate</TH><TH>Playtime</TH></TR>'; |
||||
while (($file = readdir($dir)) !== false) { |
||||
$FullFileName = realpath($DirectoryToScan.'/'.$file); |
||||
if (is_file($FullFileName)) { |
||||
set_time_limit(30); |
||||
|
||||
$ThisFileInfo = $getID3->analyze($FullFileName); |
||||
|
||||
getid3_lib::CopyTagsToComments($ThisFileInfo); |
||||
|
||||
// output desired information in whatever format you want |
||||
echo '<TR>'; |
||||
echo '<TD>'.$ThisFileInfo['filenamepath'].'</TD>'; |
||||
echo '<TD>'.(!empty($ThisFileInfo['comments_html']['artist']) ? implode('<BR>', $ThisFileInfo['comments_html']['artist']) : ' ').'</TD>'; |
||||
echo '<TD>'.(!empty($ThisFileInfo['comments_html']['title']) ? implode('<BR>', $ThisFileInfo['comments_html']['title']) : ' ').'</TD>'; |
||||
echo '<TD ALIGN="RIGHT">'.(!empty($ThisFileInfo['audio']['bitrate']) ? round($ThisFileInfo['audio']['bitrate'] / 1000).' kbps' : ' ').'</TD>'; |
||||
echo '<TD ALIGN="RIGHT">'.(!empty($ThisFileInfo['playtime_string']) ? $ThisFileInfo['playtime_string'] : ' ').'</TD>'; |
||||
echo '</TR>'; |
||||
} |
||||
} |
||||
|
||||
?> |
||||
</BODY> |
||||
</HTML> |
||||
@ -1,54 +0,0 @@ |
||||
<?php |
||||
///////////////////////////////////////////////////////////////// |
||||
/// getID3() by James Heinrich <info@getid3.org> // |
||||
// available at http://getid3.sourceforge.net // |
||||
// or http://www.getid3.org // |
||||
///////////////////////////////////////////////////////////////// |
||||
// // |
||||
// /demo/demo.simple.write.php - part of getID3() // |
||||
// Sample script showing basic syntax for writing tags // |
||||
// See readme.txt for more details // |
||||
// /// |
||||
///////////////////////////////////////////////////////////////// |
||||
|
||||
$TaggingFormat = 'UTF-8'; |
||||
|
||||
require_once('../getid3/getid3.php'); |
||||
// Initialize getID3 engine |
||||
$getID3 = new getID3; |
||||
$getID3->setOption(array('encoding'=>$TaggingFormat)); |
||||
|
||||
require_once('../getid3/write.php'); |
||||
// Initialize getID3 tag-writing module |
||||
$tagwriter = new getid3_writetags; |
||||
//$tagwriter->filename = '/path/to/file.mp3'; |
||||
$tagwriter->filename = 'd:/file.mp3'; |
||||
$tagwriter->tagformats = array('id3v1', 'id3v2.3'); |
||||
|
||||
// set various options (optional) |
||||
$tagwriter->overwrite_tags = true; |
||||
$tagwriter->tag_encoding = $TaggingFormat; |
||||
$tagwriter->remove_other_tags = true; |
||||
|
||||
// populate data array |
||||
$TagData['title'][] = 'My Song'; |
||||
$TagData['artist'][] = 'The Artist'; |
||||
$TagData['album'][] = 'Greatest Hits'; |
||||
$TagData['year'][] = '2004'; |
||||
$TagData['genre'][] = 'Rock'; |
||||
$TagData['comment'][] = 'excellent!'; |
||||
$TagData['track'][] = '04/16'; |
||||
|
||||
$tagwriter->tag_data = $TagData; |
||||
|
||||
// write tags |
||||
if ($tagwriter->WriteTags()) { |
||||
echo 'Successfully wrote tags<br>'; |
||||
if (!empty($tagwriter->warnings)) { |
||||
echo 'There were some warnings:<br>'.implode('<br><br>', $tagwriter->warnings); |
||||
} |
||||
} else { |
||||
echo 'Failed to write tags!<br>'.implode('<br><br>', $tagwriter->errors); |
||||
} |
||||
|
||||
?> |
||||
@ -1,271 +0,0 @@ |
||||
<?php |
||||
///////////////////////////////////////////////////////////////// |
||||
/// getID3() by James Heinrich <info@getid3.org> // |
||||
// available at http://getid3.sourceforge.net // |
||||
// or http://www.getid3.org // |
||||
///////////////////////////////////////////////////////////////// |
||||
// // |
||||
// /demo/demo.write.php - part of getID3() // |
||||
// sample script for demonstrating writing ID3v1 and ID3v2 // |
||||
// tags for MP3, or Ogg comment tags for Ogg Vorbis // |
||||
// See readme.txt for more details // |
||||
// /// |
||||
///////////////////////////////////////////////////////////////// |
||||
|
||||
|
||||
die('Due to a security issue, this demo has been disabled. It can be enabled by removing line 16 in demos/demo.write.php'); |
||||
|
||||
|
||||
$TaggingFormat = 'UTF-8'; |
||||
|
||||
header('Content-Type: text/html; charset='.$TaggingFormat); |
||||
echo '<HTML><HEAD><TITLE>getID3() - Sample tag writer</TITLE></HEAD><BODY>'; |
||||
|
||||
require_once('../getid3/getid3.php'); |
||||
// Initialize getID3 engine |
||||
$getID3 = new getID3; |
||||
$getID3->setOption(array('encoding'=>$TaggingFormat)); |
||||
|
||||
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'write.php', __FILE__, true); |
||||
|
||||
$browsescriptfilename = 'demo.browse.php'; |
||||
|
||||
function FixTextFields($text) { |
||||
return htmlentities(getid3_lib::SafeStripSlashes($text), ENT_QUOTES); |
||||
} |
||||
|
||||
$Filename = (isset($_REQUEST['Filename']) ? getid3_lib::SafeStripSlashes($_REQUEST['Filename']) : ''); |
||||
|
||||
|
||||
|
||||
if (isset($_POST['WriteTags'])) { |
||||
|
||||
$TagFormatsToWrite = (isset($_POST['TagFormatsToWrite']) ? $_POST['TagFormatsToWrite'] : array()); |
||||
if (!empty($TagFormatsToWrite)) { |
||||
echo 'starting to write tag(s)<BR>'; |
||||
|
||||
$tagwriter = new getid3_writetags; |
||||
$tagwriter->filename = $Filename; |
||||
$tagwriter->tagformats = $TagFormatsToWrite; |
||||
$tagwriter->overwrite_tags = true; |
||||
$tagwriter->tag_encoding = $TaggingFormat; |
||||
if (!empty($_POST['remove_other_tags'])) { |
||||
$tagwriter->remove_other_tags = true; |
||||
} |
||||
|
||||
$commonkeysarray = array('Title', 'Artist', 'Album', 'Year', 'Comment'); |
||||
foreach ($commonkeysarray as $key) { |
||||
if (!empty($_POST[$key])) { |
||||
$TagData[strtolower($key)][] = getid3_lib::SafeStripSlashes($_POST[$key]); |
||||
} |
||||
} |
||||
if (!empty($_POST['Genre'])) { |
||||
$TagData['genre'][] = getid3_lib::SafeStripSlashes($_POST['Genre']); |
||||
} |
||||
if (!empty($_POST['GenreOther'])) { |
||||
$TagData['genre'][] = getid3_lib::SafeStripSlashes($_POST['GenreOther']); |
||||
} |
||||
if (!empty($_POST['Track'])) { |
||||
$TagData['track'][] = getid3_lib::SafeStripSlashes($_POST['Track'].(!empty($_POST['TracksTotal']) ? '/'.$_POST['TracksTotal'] : '')); |
||||
} |
||||
|
||||
if (!empty($_FILES['userfile']['tmp_name'])) { |
||||
if (in_array('id3v2.4', $tagwriter->tagformats) || in_array('id3v2.3', $tagwriter->tagformats) || in_array('id3v2.2', $tagwriter->tagformats)) { |
||||
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { |
||||
if ($fd = @fopen($_FILES['userfile']['tmp_name'], 'rb')) { |
||||
$APICdata = fread($fd, filesize($_FILES['userfile']['tmp_name'])); |
||||
fclose ($fd); |
||||
|
||||
list($APIC_width, $APIC_height, $APIC_imageTypeID) = GetImageSize($_FILES['userfile']['tmp_name']); |
||||
$imagetypes = array(1=>'gif', 2=>'jpeg', 3=>'png'); |
||||
if (isset($imagetypes[$APIC_imageTypeID])) { |
||||
|
||||
$TagData['attached_picture'][0]['data'] = $APICdata; |
||||
$TagData['attached_picture'][0]['picturetypeid'] = $_POST['APICpictureType']; |
||||
$TagData['attached_picture'][0]['description'] = $_FILES['userfile']['name']; |
||||
$TagData['attached_picture'][0]['mime'] = 'image/'.$imagetypes[$APIC_imageTypeID]; |
||||
|
||||
} else { |
||||
echo '<B>invalid image format (only GIF, JPEG, PNG)</B><BR>'; |
||||
} |
||||
} else { |
||||
echo '<B>cannot open '.$_FILES['userfile']['tmp_name'].'</B><BR>'; |
||||
} |
||||
} else { |
||||
echo '<B>!is_uploaded_file('.$_FILES['userfile']['tmp_name'].')</B><BR>'; |
||||
} |
||||
} else { |
||||
echo '<B>WARNING:</B> Can only embed images for ID3v2<BR>'; |
||||
} |
||||
} |
||||
|
||||
$tagwriter->tag_data = $TagData; |
||||
if ($tagwriter->WriteTags()) { |
||||
echo 'Successfully wrote tags<BR>'; |
||||
if (!empty($tagwriter->warnings)) { |
||||
echo 'There were some warnings:<BLOCKQUOTE STYLE="background-color:#FFCC33; padding: 10px;">'.implode('<BR><BR>', $tagwriter->warnings).'</BLOCKQUOTE>'; |
||||
} |
||||
} else { |
||||
echo 'Failed to write tags!<BLOCKQUOTE STYLE="background-color:#FF9999; padding: 10px;">'.implode('<BR><BR>', $tagwriter->errors).'</BLOCKQUOTE>'; |
||||
} |
||||
|
||||
} else { |
||||
|
||||
echo 'WARNING: no tag formats selected for writing - nothing written'; |
||||
|
||||
} |
||||
echo '<HR>'; |
||||
|
||||
} |
||||
|
||||
|
||||
echo '<H4>Sample tag editor/writer</H4>'; |
||||
echo '<A HREF="'.$browsescriptfilename.'?listdirectory='.rawurlencode(realpath(dirname($Filename))).'">Browse current directory</A><BR>'; |
||||
if (!empty($Filename)) { |
||||
echo '<A HREF="'.$_SERVER['PHP_SELF'].'">Start Over</A><BR><BR>'; |
||||
echo '<TABLE BORDER="3" CELLSPACING="0" CELLPADDING="4"><FORM ACTION="'.$_SERVER['PHP_SELF'].'" METHOD="POST" ENCTYPE="multipart/form-data">'; |
||||
echo '<TR><TD ALIGN="RIGHT"><B>Filename: </B></TD><TD><INPUT TYPE="HIDDEN" NAME="Filename" VALUE="'.FixTextFields($Filename).'"><A HREF="'.$browsescriptfilename.'?filename='.rawurlencode($Filename).'" TARGET="_blank">'.$Filename.'</A></TD></TR>'; |
||||
if (file_exists($Filename)) { |
||||
|
||||
// Initialize getID3 engine |
||||
$getID3 = new getID3; |
||||
$OldThisFileInfo = $getID3->analyze($Filename); |
||||
getid3_lib::CopyTagsToComments($OldThisFileInfo); |
||||
|
||||
switch ($OldThisFileInfo['fileformat']) { |
||||
case 'mp3': |
||||
case 'mp2': |
||||
case 'mp1': |
||||
$ValidTagTypes = array('id3v1', 'id3v2.3', 'ape'); |
||||
break; |
||||
|
||||
case 'mpc': |
||||
$ValidTagTypes = array('ape'); |
||||
break; |
||||
|
||||
case 'ogg': |
||||
if (@$OldThisFileInfo['audio']['dataformat'] == 'flac') { |
||||
//$ValidTagTypes = array('metaflac'); |
||||
// metaflac doesn't (yet) work with OggFLAC files |
||||
$ValidTagTypes = array(); |
||||
} else { |
||||
$ValidTagTypes = array('vorbiscomment'); |
||||
} |
||||
break; |
||||
|
||||
case 'flac': |
||||
$ValidTagTypes = array('metaflac'); |
||||
break; |
||||
|
||||
case 'real': |
||||
$ValidTagTypes = array('real'); |
||||
break; |
||||
|
||||
default: |
||||
$ValidTagTypes = array(); |
||||
break; |
||||
} |
||||
echo '<TR><TD ALIGN="RIGHT"><B>Title</B></TD> <TD><INPUT TYPE="TEXT" SIZE="40" NAME="Title" VALUE="'.FixTextFields(@implode(', ', @$OldThisFileInfo['comments']['title'])).'"></TD></TR>'; |
||||
echo '<TR><TD ALIGN="RIGHT"><B>Artist</B></TD><TD><INPUT TYPE="TEXT" SIZE="40" NAME="Artist" VALUE="'.FixTextFields(@implode(', ', @$OldThisFileInfo['comments']['artist'])).'"></TD></TR>'; |
||||
echo '<TR><TD ALIGN="RIGHT"><B>Album</B></TD> <TD><INPUT TYPE="TEXT" SIZE="40" NAME="Album" VALUE="'.FixTextFields(@implode(', ', @$OldThisFileInfo['comments']['album'])).'"></TD></TR>'; |
||||
echo '<TR><TD ALIGN="RIGHT"><B>Year</B></TD> <TD><INPUT TYPE="TEXT" SIZE="4" NAME="Year" VALUE="'.FixTextFields(@implode(', ', @$OldThisFileInfo['comments']['year'])).'"></TD></TR>'; |
||||
|
||||
$TracksTotal = ''; |
||||
$TrackNumber = ''; |
||||
if (!empty($OldThisFileInfo['comments']['tracknumber']) && is_array($OldThisFileInfo['comments']['tracknumber'])) { |
||||
$RawTrackNumberArray = $OldThisFileInfo['comments']['tracknumber']; |
||||
} elseif (!empty($OldThisFileInfo['comments']['track']) && is_array($OldThisFileInfo['comments']['track'])) { |
||||
$RawTrackNumberArray = $OldThisFileInfo['comments']['track']; |
||||
} else { |
||||
$RawTrackNumberArray = array(); |
||||
} |
||||
foreach ($RawTrackNumberArray as $key => $value) { |
||||
if (strlen($value) > strlen($TrackNumber)) { |
||||
// ID3v1 may store track as "3" but ID3v2/APE would store as "03/16" |
||||
$TrackNumber = $value; |
||||
} |
||||
} |
||||
if (strstr($TrackNumber, '/')) { |
||||
list($TrackNumber, $TracksTotal) = explode('/', $TrackNumber); |
||||
} |
||||
echo '<TR><TD ALIGN="RIGHT"><B>Track</B></TD><TD><INPUT TYPE="TEXT" SIZE="2" NAME="Track" VALUE="'.FixTextFields($TrackNumber).'"> of <INPUT TYPE="TEXT" SIZE="2" NAME="TracksTotal" VALUE="'.FixTextFields($TracksTotal).'"></TD></TR>'; |
||||
|
||||
$ArrayOfGenresTemp = getid3_id3v1::ArrayOfGenres(); // get the array of genres |
||||
foreach ($ArrayOfGenresTemp as $key => $value) { // change keys to match displayed value |
||||
$ArrayOfGenres[$value] = $value; |
||||
} |
||||
unset($ArrayOfGenresTemp); // remove temporary array |
||||
unset($ArrayOfGenres['Cover']); // take off these special cases |
||||
unset($ArrayOfGenres['Remix']); |
||||
unset($ArrayOfGenres['Unknown']); |
||||
$ArrayOfGenres[''] = '- Unknown -'; // Add special cases back in with renamed key/value |
||||
$ArrayOfGenres['Cover'] = '-Cover-'; |
||||
$ArrayOfGenres['Remix'] = '-Remix-'; |
||||
asort($ArrayOfGenres); // sort into alphabetical order |
||||
echo '<TR><TD ALIGN="RIGHT"><B>Genre</B></TD><TD><SELECT NAME="Genre">'; |
||||
$AllGenresArray = (!empty($OldThisFileInfo['comments']['genre']) ? $OldThisFileInfo['comments']['genre'] : array()); |
||||
foreach ($ArrayOfGenres as $key => $value) { |
||||
echo '<OPTION VALUE="'.$key.'"'; |
||||
if (in_array($key, $AllGenresArray)) { |
||||
echo ' SELECTED'; |
||||
unset($AllGenresArray[array_search($key, $AllGenresArray)]); |
||||
sort($AllGenresArray); |
||||
} |
||||
echo '>'.$value.'</OPTION>'; |
||||
//echo '<OPTION VALUE="'.FixTextFields($value).'"'.((@$OldThisFileInfo['comments']['genre'][0] == $value) ? ' SELECTED' : '').'>'.$value.'</OPTION>'; |
||||
} |
||||
echo '</SELECT><INPUT TYPE="TEXT" NAME="GenreOther" SIZE="10" VALUE="'.FixTextFields(@$AllGenresArray[0]).'"></TD></TR>'; |
||||
|
||||
echo '<TR><TD ALIGN="RIGHT"><B>Write Tags</B></TD><TD>'; |
||||
foreach ($ValidTagTypes as $ValidTagType) { |
||||
echo '<INPUT TYPE="CHECKBOX" NAME="TagFormatsToWrite[]" VALUE="'.$ValidTagType.'"'; |
||||
if (count($ValidTagTypes) == 1) { |
||||
echo ' CHECKED'; |
||||
} else { |
||||
switch ($ValidTagType) { |
||||
case 'id3v2.2': |
||||
case 'id3v2.3': |
||||
case 'id3v2.4': |
||||
if (isset($OldThisFileInfo['tags']['id3v2'])) { |
||||
echo ' CHECKED'; |
||||
} |
||||
break; |
||||
|
||||
default: |
||||
if (isset($OldThisFileInfo['tags'][$ValidTagType])) { |
||||
echo ' CHECKED'; |
||||
} |
||||
break; |
||||
} |
||||
} |
||||
echo '>'.$ValidTagType.'<BR>'; |
||||
} |
||||
if (count($ValidTagTypes) > 1) { |
||||
echo '<hr><input type="checkbox" name="remove_other_tags" value="1"> Remove non-selected tag formats when writing new tag<br>'; |
||||
} |
||||
echo '</TD></TR>'; |
||||
|
||||
echo '<TR><TD ALIGN="RIGHT"><B>Comment</B></TD><TD><TEXTAREA COLS="30" ROWS="3" NAME="Comment" WRAP="VIRTUAL">'.(isset($OldThisFileInfo['comments']['comment']) ? @implode("\n", $OldThisFileInfo['comments']['comment']) : '').'</TEXTAREA></TD></TR>'; |
||||
|
||||
echo '<TR><TD ALIGN="RIGHT"><B>Picture</B><BR>(ID3v2 only)</TD><TD><INPUT TYPE="FILE" NAME="userfile" ACCEPT="image/jpeg, image/gif, image/png"><BR>'; |
||||
echo '<SELECT NAME="APICpictureType">'; |
||||
$APICtypes = getid3_id3v2::APICPictureTypeLookup('', true); |
||||
foreach ($APICtypes as $key => $value) { |
||||
echo '<OPTION VALUE="'.FixTextFields($key).'">'.FixTextFields($value).'</OPTION>'; |
||||
} |
||||
echo '</SELECT></TD></TR>'; |
||||
echo '<TR><TD ALIGN="CENTER" COLSPAN="2"><INPUT TYPE="SUBMIT" NAME="WriteTags" VALUE="Save Changes"> '; |
||||
echo '<INPUT TYPE="RESET" VALUE="Reset"></TD></TR>'; |
||||
|
||||
} else { |
||||
|
||||
echo '<TR><TD ALIGN="RIGHT"><B>Error</B></TD><TD>'.FixTextFields($Filename).' does not exist</TD></TR>'; |
||||
|
||||
} |
||||
echo '</FORM></TABLE>'; |
||||
|
||||
} |
||||
|
||||
?> |
||||
</BODY> |
||||
</HTML> |
||||
@ -1,195 +0,0 @@ |
||||
|
||||
/** |
||||
* Common elements |
||||
*/ |
||||
|
||||
body { |
||||
font: 12px Verdana, sans-serif; |
||||
background-color: white; |
||||
color: black; |
||||
margin-top: 6px; |
||||
margin-bottom: 30px; |
||||
margin-left: 12px; |
||||
margin-right: 12px; |
||||
} |
||||
|
||||
|
||||
h1 { |
||||
font: bold 18px Verdana, sans-serif; |
||||
line-height: 26px; |
||||
margin-top: 12px; |
||||
margin-bottom: 15px; |
||||
margin-left: 0px; |
||||
margin-right: 7px; |
||||
background-color: #e6eaf6; |
||||
padding-left: 10px; |
||||
padding-top: 2px; |
||||
padding-bottom: 4px; |
||||
} |
||||
|
||||
|
||||
h3 { |
||||
font: bold 13px Verdana, sans-serif; |
||||
line-height: 26px; |
||||
margin-top: 12px; |
||||
margin-bottom: 0px; |
||||
margin-left: 0px; |
||||
margin-right: 7px; |
||||
padding-left: 4px; |
||||
} |
||||
|
||||
|
||||
ul { |
||||
margin-top: 0px; |
||||
} |
||||
|
||||
|
||||
p, li { |
||||
font: 9pt/135% sans-serif; |
||||
margin-top: 1x; |
||||
margin-bottom: 0x; |
||||
} |
||||
|
||||
|
||||
a, a:link, a:visited { |
||||
color: #0000cc; |
||||
} |
||||
|
||||
|
||||
hr { |
||||
height: 0; |
||||
border: solid gray 0; |
||||
border-top-width: thin; |
||||
width: 700px; |
||||
} |
||||
|
||||
|
||||
table.table td { |
||||
font: 9pt sans-serif; |
||||
padding-top: 1px; |
||||
padding-bottom: 1px; |
||||
padding-left: 5px; |
||||
padding-right: 5px; |
||||
} |
||||
|
||||
|
||||
table.table td.header { |
||||
background-color: #cccccc; |
||||
padding-top: 2px; |
||||
padding-bottom: 2px; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
|
||||
table.table tr.even_files { |
||||
background-color: #fefefe; |
||||
} |
||||
|
||||
|
||||
table.table tr.odd_files { |
||||
background-color: #e9e9e9; |
||||
} |
||||
|
||||
|
||||
table.dump { |
||||
border-top: solid 1px #cccccc; |
||||
border-left: solid 1px #cccccc; |
||||
margin: 2px; |
||||
} |
||||
|
||||
|
||||
table.dump td { |
||||
font: 9pt sans-serif; |
||||
padding-top: 1px; |
||||
padding-bottom: 1px; |
||||
padding-left: 5px; |
||||
padding-right: 5px; |
||||
border-right: solid 1px #cccccc; |
||||
border-bottom: solid 1px #cccccc; |
||||
} |
||||
|
||||
|
||||
td.dump_string { |
||||
font-weight: bold; |
||||
color: #0000cc; |
||||
} |
||||
|
||||
|
||||
td.dump_integer { |
||||
color: #cc0000; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
|
||||
td.dump_double { |
||||
color: orange; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
|
||||
td.dump_boolean { |
||||
color: #333333; |
||||
font-weight: bold; |
||||
} |
||||
|
||||
|
||||
.error { |
||||
color: red |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* Tool Tips |
||||
*/ |
||||
|
||||
.tooltip { |
||||
font: 9pt sans-serif; |
||||
background: #ffffe1; |
||||
color: black; |
||||
border: black 1px solid; |
||||
margin: 2px; |
||||
padding: 7px; |
||||
position: absolute; |
||||
top: 10px; |
||||
left: 10px; |
||||
z-index: 10000; |
||||
visibility: hidden; |
||||
} |
||||
|
||||
|
||||
.tooltip p { |
||||
margin-top: -2px; |
||||
margin-bottom: 4px; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
/** |
||||
* Forms |
||||
*/ |
||||
|
||||
table.form td { |
||||
font: 9pt/135% sans-serif; |
||||
padding: 2px; |
||||
} |
||||
|
||||
|
||||
select, input { |
||||
font: 9pt/135% sans-serif; |
||||
} |
||||
|
||||
.select, .field { |
||||
width: 260px; |
||||
} |
||||
|
||||
#sel_field { |
||||
width: 85px; |
||||
} |
||||
|
||||
|
||||
.button { |
||||
margin-top: 10px; |
||||
} |
||||
@ -1 +0,0 @@ |
||||
In this directory are a number of examples of how to use <A HREF="http://www.getid3.org">getID3()</A> - if you don't know what to run, take a look at <A HREF="demo.browse.php">demo.browse.php</A> |
||||
Loading…
Reference in new issue