remove getID3 demos due to security issue caused by one of them

This commit is contained in:
Robin Appelman 2011-09-24 19:09:54 +02:00
parent 63907a7508
commit 260893816b
14 changed files with 0 additions and 6889 deletions

View File

@ -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';
}
}
?>

View File

@ -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
?>

View File

@ -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&nbsp;File (File) (<a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.rawurlencode(isset($_REQUEST['listdirectory']) ? $_REQUEST['listdirectory'] : '.').'">disable</a>)</th>';
echo '<th>MD5&nbsp;Data (File) (<a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.rawurlencode(isset($_REQUEST['listdirectory']) ? $_REQUEST['listdirectory'] : '.').'">disable</a>)</th>';
echo '<th>MD5&nbsp;Data (Source) (<a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.rawurlencode(isset($_REQUEST['listdirectory']) ? $_REQUEST['listdirectory'] : '.').'">disable</a>)</th>';
} else {
echo '<th colspan="3">MD5&nbsp;Data (<a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.rawurlencode(isset($_REQUEST['listdirectory']) ? $_REQUEST['listdirectory'] : '.').'&amp;ShowMD5=1">enable</a>)</th>';
}
echo '<th>Tags</th>';
echo '<th>Errors &amp; 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">&nbsp;'.number_format($fileinfo['filesize']).'</td>';
echo '<td align="right">&nbsp;'.NiceDisplayFiletypeFormat($fileinfo).'</td>';
echo '<td align="right">&nbsp;'.(isset($fileinfo['playtime_string']) ? $fileinfo['playtime_string'] : '-').'</td>';
echo '<td align="right">&nbsp;'.(isset($fileinfo['bitrate']) ? BitrateText($fileinfo['bitrate'] / 1000, 0, ((@$fileinfo['audio']['bitrate_mode'] == 'vbr') ? true : false)) : '-').'</td>';
echo '<td align="left">&nbsp;'.(isset($fileinfo['comments_html']['artist']) ? implode('<br>', $fileinfo['comments_html']['artist']) : '').'</td>';
echo '<td align="left">&nbsp;'.(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'] : '&nbsp;').'</tt></td>';
echo '<td align="left"><tt>'.(isset($fileinfo['md5_data']) ? $fileinfo['md5_data'] : '&nbsp;').'</tt></td>';
echo '<td align="left"><tt>'.(isset($fileinfo['md5_data_source']) ? $fileinfo['md5_data_source'] : '&nbsp;').'</tt></td>';
} else {
echo '<td align="center" colspan="3">-</td>';
}
echo '<td align="left">&nbsp;'.@implode(', ', array_keys($fileinfo['tags'])).'</td>';
echo '<td align="left">&nbsp;';
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">&nbsp;';
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&nbsp;tags</a>';
break;
case 'ogg':
switch (@$fileinfo['audio']['dataformat']) {
case 'vorbis':
echo '<a href="'.$writescriptfilename.'?Filename='.urlencode($dirname.$filename).'" title="Edit tags">edit&nbsp;tags</a>';
break;
}
break;
default:
break;
}
echo '</td>';
echo '<td align="left">&nbsp;<a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.urlencode($listdirectory).'&amp;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">&nbsp;'.(isset($fileinfo['filesize']) ? number_format($fileinfo['filesize']) : '-').'</td>';
echo '<td align="right">&nbsp;'.NiceDisplayFiletypeFormat($fileinfo).'</td>';
echo '<td align="right">&nbsp;'.(isset($fileinfo['playtime_string']) ? $fileinfo['playtime_string'] : '-').'</td>';
echo '<td align="right">&nbsp;'.(isset($fileinfo['bitrate']) ? BitrateText($fileinfo['bitrate'] / 1000) : '-').'</td>';
echo '<td align="left">&nbsp;</td>'; // Artist
echo '<td align="left">&nbsp;</td>'; // Title
echo '<td align="left" colspan="3">&nbsp;</td>'; // MD5_data
echo '<td align="left">&nbsp;</td>'; // Tags
//echo '<td align="left">&nbsp;</td>'; // Warning/Error
echo '<td align="left">&nbsp;';
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">&nbsp;</td>'; // Edit
echo '<td align="left">&nbsp;<a href="'.$_SERVER['PHP_SELF'].'?listdirectory='.urlencode($listdirectory).'&amp;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>&nbsp;</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>&nbsp;&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;</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>&nbsp;</td>';
echo '<td align="right">'.getid3_lib::PlaytimeString($TotalScannedPlaytime).'</td>';
echo '<td>&nbsp;</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 .= '&nbsp;('.count($value).')';
} elseif (is_string($value)) {
$returnstring .= '&nbsp;('.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;
}
/////////////////////////////////////////////////////////////////
?>

View File

@ -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();
?>

View File

@ -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();
?>

View File

@ -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;
}
?>

View File

@ -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

View File

@ -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']) : '&nbsp;').'</TD>';
echo '<TD>'.(!empty($ThisFileInfo['comments_html']['title']) ? implode('<BR>', $ThisFileInfo['comments_html']['title']) : '&nbsp;').'</TD>';
echo '<TD ALIGN="RIGHT">'.(!empty($ThisFileInfo['audio']['bitrate']) ? round($ThisFileInfo['audio']['bitrate'] / 1000).' kbps' : '&nbsp;').'</TD>';
echo '<TD ALIGN="RIGHT">'.(!empty($ThisFileInfo['playtime_string']) ? $ThisFileInfo['playtime_string'] : '&nbsp;').'</TD>';
echo '</TR>';
}
}
?>
</BODY>
</HTML>

View File

@ -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);
}
?>

View File

@ -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>

View File

@ -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;
}

View File

@ -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>