function GetAllFileInfo($filename, $assumedFormat = '', $MD5file = false, $MD5data = false, $MD5dataIfMD5SourceKnown = false) { $ThisFileInfo = array(); $localfilepointer = null; if (!InitializeFilepointerArray($filename, $localfilepointer, $ThisFileInfo)) { // remove unneeded/meaningless keys CleanUpGetAllMP3info($ThisFileInfo); // close & remove local filepointer CloseRemoveFilepointer($localfilepointer); return $ThisFileInfo; } // Handle ID3v1 & Lyrics3 tags HandleID3v1Tag($localfilepointer, $ThisFileInfo); HandleLyrics3Tag($localfilepointer, $ThisFileInfo); rewind($localfilepointer); //$formattest = fread($localfilepointer, 16); // 16 bytes is sufficient for any format except ISO CD-image $formattest = fread($localfilepointer, 32774); // (ISO needs at least 32774 bytes) // Handle ID3v2 tag if (HandleID3v2Tag($localfilepointer, $ThisFileInfo)) { fseek($localfilepointer, $ThisFileInfo['avdataoffset'], SEEK_SET); $formattest = fread($localfilepointer, 32774); // (ISO9660 needs at least 32774 bytes) } // Handle APE tags HandleAPETag($localfilepointer, $ThisFileInfo); // Nothing-but-tags check if ($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset'] > 0) { if ($assumedFormat) { $format_info = GetFileFormatArray(); require_once GETID3_INCLUDEPATH . $format_info["{$assumedFormat}"]['include']; $VariableFunctionName = $format_info["{$assumedFormat}"]['function']; $VariableFunctionName($localfilepointer, $ThisFileInfo); } elseif ($DeterminedFormat = GetFileFormat($formattest)) { // break if ID3/APE tags found on illegal format if (!$DeterminedFormat['allowtags'] && $ThisFileInfo['avdataoffset'] > 0 && $ThisFileInfo['avdataend'] != $ThisFileInfo['filesize']) { $ThisFileInfo['error'] .= "\n" . 'Illegal ID3 and/or APE tag found on non multimedia file.'; break; } // set mime type $ThisFileInfo['mime_type'] = $DeterminedFormat['mimetype']; // supported format signature pattern detected if (!file_exists(GETID3_INCLUDEPATH . $DeterminedFormat['include'])) { die('<HR><FONT COLOR="#FF0000">Cannot find required file: ' . GETID3_INCLUDEPATH . $DeterminedFormat['include'] . '</FONT>'); } require_once GETID3_INCLUDEPATH . $DeterminedFormat['include']; $VariableFunctionName = $DeterminedFormat['function']; $VariableFunctionName($localfilepointer, $ThisFileInfo); } elseif ($assumedFormat == 'mp3' || $assumedFormat == '' && (substr($formattest, 0, 3) == 'ID3' || substr(BigEndian2Bin(substr($formattest, 0, 2)), 0, 11) == '11111111111')) { // assume AAC-ADTS format require_once GETID3_INCLUDEPATH . 'getid3.aac.php'; $dummy = $ThisFileInfo; if (getAACADTSheaderFilepointer($localfilepointer, $dummy)) { $ThisFileInfo = $dummy; } else { // it's not AAC-ADTS format, probably MP3 require_once GETID3_INCLUDEPATH . 'getid3.mp3.php'; getMP3headerFilepointer($localfilepointer, $ThisFileInfo); } } else { // unknown format, do nothing } } if (!empty($ThisFileInfo['audio']['channels'])) { switch ($ThisFileInfo['audio']['channels']) { case 1: $ThisFileInfo['audio']['channelmode'] = 'mono'; break; case 2: $ThisFileInfo['audio']['channelmode'] = 'stereo'; break; default: // unknown? break; } } // Get the MD5 hash of the entire file if ($MD5file && empty($ThisFileInfo['md5_file'])) { set_time_limit(max($ThisFileInfo['filesize'] / 10000000, 30)); $ThisFileInfo['md5_file'] = md5_file($filename); } // Get the MD5 hash of the audio/video portion of the file // (without ID3/APE/Lyrics3/etc header/footer tags if ($MD5data && empty($ThisFileInfo['md5_data'])) { if ($MD5dataIfMD5SourceKnown || empty($ThisFileInfo['md5_data_source'])) { // Only calculate ['md5_data'] if ['md5_data_source'] is unknown, // or if $MD5dataIfMD5SourceKnown is set to true getMD5data($ThisFileInfo); } } CalculateCompressionRatioVideo($ThisFileInfo); CalculateCompressionRatioAudio($ThisFileInfo); // return tags data in alphabetical order, without duplicates $ThisFileInfo['tags'] = array_unique($ThisFileInfo['tags']); sort($ThisFileInfo['tags']); // remove unneeded/meaningless keys CleanUpGetAllMP3info($ThisFileInfo); if (isset($ThisFileInfo['fileformat'])) { // Calculate combined bitrate - audio + video $CombinedBitrate = 0; $CombinedBitrate += isset($ThisFileInfo['audio']['bitrate']) ? $ThisFileInfo['audio']['bitrate'] : 0; $CombinedBitrate += isset($ThisFileInfo['video']['bitrate']) ? $ThisFileInfo['video']['bitrate'] : 0; if ($CombinedBitrate > 0 && !isset($ThisFileInfo['bitrate'])) { $ThisFileInfo['bitrate'] = $CombinedBitrate; } if (isset($ThisFileInfo['video']) && !isset($ThisFileInfo['video']['bitrate']) || isset($ThisFileInfo['audio']) && !isset($ThisFileInfo['audio']['bitrate'])) { // for example, VBR MPEG video files cannot determine video bitrate: // should not set overall bitrate and playtime from audio bitrate only unset($ThisFileInfo['bitrate']); } if (!isset($ThisFileInfo['playtime_seconds']) && !empty($ThisFileInfo['bitrate'])) { $ThisFileInfo['playtime_seconds'] = ($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset']) * 8 / $ThisFileInfo['bitrate']; } // Set playtime string if (!empty($ThisFileInfo['playtime_seconds']) && empty($ThisFileInfo['playtime_string'])) { $ThisFileInfo['playtime_string'] = PlaytimeString($ThisFileInfo['playtime_seconds']); } } // close & remove local filepointer CloseRemoveFilepointer($localfilepointer); return $ThisFileInfo; }
function GetAllFileInfo($filename, $assumedFormat = '', $MD5file = false, $MD5data = false) { require_once GETID3_INCLUDEPATH . 'getid3.functions.php'; // Function library $ThisFileInfo['getID3version'] = GETID3VERSION; $ThisFileInfo['fileformat'] = ''; // filled in later $ThisFileInfo['audio']['dataformat'] = ''; // filled in later, unset if not used $ThisFileInfo['video']['dataformat'] = ''; // filled in later, unset if not used $ThisFileInfo['tags'] = array(); // filled in later, unset if not used $ThisFileInfo['error'] = ''; // filled in later, unset if not used $ThisFileInfo['warning'] = ''; // filled in later, unset if not used $ThisFileInfo['exist'] = false; if (eregi('^(ht|f)tp://', $filename)) { // remote file $ThisFileInfo['filename'] = $filename; $ThisFileInfo['error'] .= "\n" . 'Remote files are not supported in this version of getID3() - please copy the file locally first'; } else { // local file $ThisFileInfo['filename'] = basename($filename); $ThisFileInfo['filepath'] = str_replace('\\', '/', realpath(dirname($filename))); $ThisFileInfo['filenamepath'] = $ThisFileInfo['filepath'] . '/' . $ThisFileInfo['filename']; ob_start(); if ($localfilepointer = fopen($filename, 'rb')) { $ThisFileInfo['exist'] = true; //$ThisFileInfo['filesize'] = filesize($ThisFileInfo['filenamepath']); // PHP doesn't support integers larger than 31-bit (~2GB) // filesize() simply returns (filesize % (pow(2, 32)), no matter the actual filesize // ftell() returns 0 if seeking to the end is beyond the range of unsigned integer fseek($localfilepointer, 0, SEEK_END); $ThisFileInfo['filesize'] = ftell($localfilepointer); ob_end_clean(); if ($ThisFileInfo['filesize'] == 0) { if (filesize($ThisFileInfo['filenamepath']) != 0) { unset($ThisFileInfo['filesize']); $ThisFileInfo['error'] .= "\n" . 'File is most likely larger than 2GB and is not supported by PHP'; } // remove unneeded/meaningless keys CleanUpGetAllMP3info($ThisFileInfo); // close & remove local filepointer CloseRemoveFilepointer($localfilepointer); return $ThisFileInfo; } } else { $ThisFileInfo['error'] .= "\n" . 'Error opening file: ' . trim(strip_tags(ob_get_contents())); ob_end_clean(); // remove unneeded/meaningless keys CleanUpGetAllMP3info($ThisFileInfo); // close & remove local filepointer CloseRemoveFilepointer($localfilepointer); return $ThisFileInfo; } } // Initialize avdataoffset and avdataend $ThisFileInfo['avdataoffset'] = 0; $ThisFileInfo['avdataend'] = $ThisFileInfo['filesize']; // Handle APE tags HandleAPETag($localfilepointer, $ThisFileInfo); rewind($localfilepointer); //$formattest = fread($localfilepointer, 16); // 16 bytes is sufficient for any format except ISO CD-image $formattest = fread($localfilepointer, 32774); // (ISO needs at least 32774 bytes) // Handle ID3v2 tag if (substr($formattest, 0, 3) == 'ID3') { HandleID3v2Tag($localfilepointer, $ThisFileInfo); rewind($localfilepointer); fseek($localfilepointer, $ThisFileInfo['avdataoffset'], SEEK_SET); $formattest = fread($localfilepointer, 32774); // (ISO9660 needs at least 32774 bytes) } // Handle ID3v1 tags HandleID3v1Tag($localfilepointer, $ThisFileInfo); // Nothing-but-tags check if ($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset'] > 0) { if ($DeterminedFormat = GetFileFormat($formattest)) { // break if ID3/APE tags found on illegal format if (!$DeterminedFormat['allowtags'] && $ThisFileInfo['avdataoffset'] > 0 && $ThisFileInfo['avdataend'] != $ThisFileInfo['filesize']) { $ThisFileInfo['error'] .= "\n" . 'Illegal ID3 and/or APE tag found on non multimedia file.'; break; } // set mime type $ThisFileInfo['mime_type'] = $DeterminedFormat['mimetype']; // supported format signature pattern detected require_once GETID3_INCLUDEPATH . $DeterminedFormat['include']; switch ($DeterminedFormat['format']) { //case 'midi': // if ($assumedFormat === false) { // // do not parse all MIDI tracks - much faster // getMIDIHeaderFilepointer($localfilepointer, $ThisFileInfo, false); // } else { // getMIDIHeaderFilepointer($localfilepointer, $ThisFileInfo); // } // break; //case 'aac': // if (!getAACADIFheaderFilepointer($localfilepointer, $ThisFileInfo)) { // $dummy = $ThisFileInfo; // unset($dummy['error']); // if (getAACADTSheaderFilepointer($localfilepointer, $dummy)) { // $ThisFileInfo = $dummy; // } // } // break; default: $VariableFunctionName = $DeterminedFormat['function']; $VariableFunctionName($localfilepointer, $ThisFileInfo); break; } } elseif ($assumedFormat == 'mp3' || $assumedFormat == '' && (substr($formattest, 0, 3) == 'ID3' || substr(BigEndian2Bin(substr($formattest, 0, 2)), 0, 11) == '11111111111')) { // assume AAC-ADTS format require_once GETID3_INCLUDEPATH . 'getid3.aac.php'; $dummy = $ThisFileInfo; if (getAACADTSheaderFilepointer($localfilepointer, $dummy)) { $ThisFileInfo = $dummy; } else { // it's not AAC-ADTS format, probably MP3 require_once GETID3_INCLUDEPATH . 'getid3.mp3.php'; getMP3headerFilepointer($localfilepointer, $ThisFileInfo); } } else { // unknown format, do nothing } } if (isset($ThisFileInfo['fileformat'])) { // Calculate combined bitrate - audio + video $CombinedBitrate = 0; $CombinedBitrate += isset($ThisFileInfo['audio']['bitrate']) ? $ThisFileInfo['audio']['bitrate'] : 0; $CombinedBitrate += isset($ThisFileInfo['video']['bitrate']) ? $ThisFileInfo['video']['bitrate'] : 0; if ($CombinedBitrate > 0 && !isset($ThisFileInfo['bitrate'])) { $ThisFileInfo['bitrate'] = $CombinedBitrate; } // Set playtime string if (!empty($ThisFileInfo['playtime_seconds']) && empty($ThisFileInfo['playtime_string'])) { $ThisFileInfo['playtime_string'] = PlaytimeString($ThisFileInfo['playtime_seconds']); } if (!empty($ThisFileInfo['audio']['channels'])) { switch ($ThisFileInfo['audio']['channels']) { case 1: $ThisFileInfo['audio']['channelmode'] = 'mono'; break; case 2: $ThisFileInfo['audio']['channelmode'] = 'stereo'; break; default: // unknown? break; } } } // Get the MD5 hash of the entire file if ($MD5file && empty($ThisFileInfo['md5_file'])) { $ThisFileInfo['md5_file'] = md5_file($filename); } // Get the MD5 hash of the audio/video portion of the file // (without ID3/APE/Lyrics3/etc header/footer tags if ($MD5data && empty($ThisFileInfo['md5_data'])) { getMD5data($ThisFileInfo); } // return tags data in alphabetical order, without duplicates $ThisFileInfo['tags'] = array_unique($ThisFileInfo['tags']); sort($ThisFileInfo['tags']); // remove unneeded/meaningless keys CleanUpGetAllMP3info($ThisFileInfo); // close & remove local filepointer CloseRemoveFilepointer($localfilepointer); return $ThisFileInfo; }
$artists = array(); $titles = array(); $bitrates = array(); $playtimes = array(); $SQLquery = 'SELECT filename, artist, title, audio_bitrate, vbr_method, playtime_seconds FROM files'; $SQLquery .= ' WHERE (artist = "' . addslashes($row['artist']) . '")'; $SQLquery .= ' AND (title = "' . addslashes($row['title']) . '")'; $SQLquery .= ' ORDER BY filename ASC'; $result2 = safe_mysql_query($SQLquery); while ($row2 = mysql_fetch_array($result2)) { $uniquefiles++; $filenames[] = $row2['filename']; $artists[] = $row2['artist']; $titles[] = $row2['title']; $bitrates[] = round($row2['audio_bitrate'] / 1000) . 'k' . ($row2['vbr_method'] ? 'v' : ' '); $playtimes[] = PlaytimeString($row2['playtime_seconds']); } echo '<TR>'; echo '<TD NOWRAP VALIGN="TOP">'; foreach ($filenames as $file) { echo '<A HREF="getid3.demo.check.php?deletefile=' . urlencode($file) . '" onClick="return confirm(\'Are you sure you want to delete ' . addslashes($file) . '? \\n(this action cannot be un-done)\');" TITLE="Permanently delete ' . "\n" . FixTextFields($file) . "\n" . '">delete</A><BR>'; } echo '</TD>'; echo '<TD NOWRAP VALIGN="TOP">' . implode('<BR>', $artists) . '</TD>'; echo '<TD NOWRAP VALIGN="TOP">' . implode('<BR>', $titles) . '</TD>'; echo '<TD NOWRAP VALIGN="TOP" ALIGN="RIGHT">' . implode('<BR>', $bitrates) . '</TD>'; echo '<TD NOWRAP VALIGN="TOP" ALIGN="RIGHT">' . implode('<BR>', $playtimes) . '</TD>'; echo '<TD NOWRAP VALIGN="TOP">'; foreach ($filenames as $file) { echo '<A HREF="getid3.demo.check.php?filename=' . rawurlencode($file) . '">' . $file . '</A><BR>'; }
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">' . PlaytimeString($TotalScannedPlaytime / max($TotalScannedKnownFiles, 1)) . '</TD>'; echo '<TD ALIGN="RIGHT">' . BitrateText(round($TotalScannedBitrate / 1000 / max($TotalScannedKnownFiles, 1))) . '</TD>'; echo '<TD ROWSPAN="2" COLSPAN="' . ($columnsintable - 5) . '">Identified Files: ' . $TotalScannedKnownFiles . '<BR>Unknown Files: ' . $TotalScannedUnknownFiles . '</TD>'; 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">' . 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 '</BODY></HTML>'; function NiceDisplayFiletypeFormat(&$fileinfo) { if (empty($fileinfo['fileformat'])) { return '-'; }