function getHashdata($algorithm)
 {
     switch ($algorithm) {
         case 'md5':
         case 'sha1':
             break;
         default:
             return $this->error('bad algorithm "' . $algorithm . '" in getHashdata()');
             break;
     }
     if (@$this->info['fileformat'] == 'ogg' && @$this->info['audio']['dataformat'] == 'vorbis') {
         // We cannot get an identical md5_data value for Ogg files where the comments
         // span more than 1 Ogg page (compared to the same audio data with smaller
         // comments) using the normal getID3() method of MD5'ing the data between the
         // end of the comments and the end of the file (minus any trailing tags),
         // because the page sequence numbers of the pages that the audio data is on
         // do not match. Under normal circumstances, where comments are smaller than
         // the nominal 4-8kB page size, then this is not a problem, but if there are
         // very large comments, the only way around it is to strip off the comment
         // tags with vorbiscomment and MD5 that file.
         // This procedure must be applied to ALL Ogg files, not just the ones with
         // comments larger than 1 page, because the below method simply MD5's the
         // whole file with the comments stripped, not just the portion after the
         // comments block (which is the standard getID3() method.
         // The above-mentioned problem of comments spanning multiple pages and changing
         // page sequence numbers likely happens for OggSpeex and OggFLAC as well, but
         // currently vorbiscomment only works on OggVorbis files.
         if ((bool) ini_get('safe_mode')) {
             $this->info['warning'][] = 'Failed making system call to vorbiscomment.exe - ' . $algorithm . '_data is incorrect - error returned: PHP running in Safe Mode (backtick operator not available)';
             $this->info[$algorithm . '_data'] = false;
         } else {
             // Prevent user from aborting script
             $old_abort = ignore_user_abort(true);
             // Create empty file
             $empty = tempnam('*', 'getID3');
             touch($empty);
             // Use vorbiscomment to make temp file without comments
             $temp = tempnam('*', 'getID3');
             $file = $this->info['filenamepath'];
             if (GETID3_OS_ISWINDOWS) {
                 if (file_exists(GETID3_HELPERAPPSDIR . 'vorbiscomment.exe')) {
                     $commandline = '"' . GETID3_HELPERAPPSDIR . 'vorbiscomment.exe" -w -c "' . $empty . '" "' . $file . '" "' . $temp . '"';
                     $VorbisCommentError = `{$commandline}`;
                 } else {
                     $VorbisCommentError = 'vorbiscomment.exe not found in ' . GETID3_HELPERAPPSDIR;
                 }
             } else {
                 $commandline = 'vorbiscomment -w -c "' . $empty . '" "' . $file . '" "' . $temp . '" 2>&1';
                 $VorbisCommentError = `{$commandline}`;
             }
             if (!empty($VorbisCommentError)) {
                 $this->info['warning'][] = 'Failed making system call to vorbiscomment(.exe) - ' . $algorithm . '_data will be incorrect. If vorbiscomment is unavailable, please download from http://www.vorbis.com/download.psp and put in the getID3() directory. Error returned: ' . $VorbisCommentError;
                 $this->info[$algorithm . '_data'] = false;
             } else {
                 // Get hash of newly created file
                 switch ($algorithm) {
                     case 'md5':
                         $this->info[$algorithm . '_data'] = getid3_lib::md5_file($temp);
                         break;
                     case 'sha1':
                         $this->info[$algorithm . '_data'] = getid3_lib::sha1_file($temp);
                         break;
                 }
             }
             // Clean up
             unlink($empty);
             unlink($temp);
             // Reset abort setting
             ignore_user_abort($old_abort);
         }
     } else {
         if (!empty($this->info['avdataoffset']) || isset($this->info['avdataend']) && $this->info['avdataend'] < $this->info['filesize']) {
             // get hash from part of file
             $this->info[$algorithm . '_data'] = getid3_lib::hash_data($this->info['filenamepath'], $this->info['avdataoffset'], $this->info['avdataend'], $algorithm);
         } else {
             // get hash from whole file
             switch ($algorithm) {
                 case 'md5':
                     $this->info[$algorithm . '_data'] = getid3_lib::md5_file($this->info['filenamepath']);
                     break;
                 case 'sha1':
                     $this->info[$algorithm . '_data'] = getid3_lib::sha1_file($this->info['filenamepath']);
                     break;
             }
         }
     }
     return true;
 }
Exemple #2
0
 }
 // 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) {