remove getID3 demos due to security issue caused by one of them
This commit is contained in:
parent
63907a7508
commit
260893816b
|
@ -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