Статистике filesize () не удалось получить функцию ID3-тегов файла MP3 - PullRequest
1 голос
/ 19 апреля 2011

Работает с локальными файлами, но не с внешними доменами.Вот мой код (который я получил от http://www.barattalo.it/2010/02/22/reading-mp3-informations-with-php-id3-tags/):

<?
function tagReader($file){
$id3v23 = array("TIT2","TALB","TPE1","TRCK","TDRC","TLEN","USLT");
$id3v22 = array("TT2","TAL","TP1","TRK","TYE","TLE","ULT");
$fsize = filesize($file);
$fd = fopen($file,"r");
$tag = fread($fd,$fsize);
$tmp = "";
fclose($fd);
if (substr($tag,0,3) == "ID3") {
    $result['FileName'] = $file;
    $result['TAG'] = substr($tag,0,3);
    $result['Version'] =    hexdec(bin2hex(substr($tag,3,1))).".".hexdec(bin2hex(substr($tag,4,1)));
}
if($result['Version'] == "4.0" || $result['Version'] == "3.0"){
    for ($i=0;$i<count($id3v23);$i++){
        if (strpos($tag,$id3v23[$i].chr(0))!= FALSE){
            $pos = strpos($tag, $id3v23[$i].chr(0));
            $len = hexdec(bin2hex(substr($tag,($pos+5),3)));
            $data = substr($tag, $pos, 10+$len);
            for ($a=0;$a<strlen($data);$a++){
                $char = substr($data,$a,1);
                if($char >= " " && $char <= "~") $tmp.=$char;
            }
            if(substr($tmp,0,4) == "TIT2") $result['Title'] = substr($tmp,4);
            if(substr($tmp,0,4) == "TALB") $result['Album'] = substr($tmp,4);
            if(substr($tmp,0,4) == "TPE1") $result['Author'] = substr($tmp,4);
            if(substr($tmp,0,4) == "TRCK") $result['Track'] = substr($tmp,4);
            if(substr($tmp,0,4) == "TDRC") $result['Year'] = substr($tmp,4);
            if(substr($tmp,0,4) == "TLEN") $result['Length'] = substr($tmp,4);
            if(substr($tmp,0,4) == "USLT") $result['Lyric'] = substr($tmp,7);
            $tmp = "";
        }
    }
}
if($result['Version'] == "2.0"){
    for ($i=0;$i<count($id3v22);$i++){
        if (strpos($tag,$id3v22[$i].chr(0))!= FALSE){
            $pos = strpos($tag, $id3v22[$i].chr(0));
            $len = hexdec(bin2hex(substr($tag,($pos+3),3)));
            $data = substr($tag, $pos, 6+$len);
            for ($a=0;$a<strlen($data);$a++){
                $char = substr($data,$a,1);
                if($char >= " " && $char <= "~") $tmp.=$char;
            }
            if(substr($tmp,0,3) == "TT2") $result['Title'] = substr($tmp,3);
            if(substr($tmp,0,3) == "TAL") $result['Album'] = substr($tmp,3);
            if(substr($tmp,0,3) == "TP1") $result['Author'] = substr($tmp,3);
            if(substr($tmp,0,3) == "TRK") $result['Track'] = substr($tmp,3);
            if(substr($tmp,0,3) == "TYE") $result['Year'] = substr($tmp,3);
            if(substr($tmp,0,3) == "TLE") $result['Lenght'] = substr($tmp,3);
            if(substr($tmp,0,3) == "ULT") $result['Lyric'] = substr($tmp,6);
            $tmp = "";
        }
    }
}
return $result;
}
$song = tagReader("file.mp3");
echo $song[Title];
?>

1 Ответ

0 голосов
/ 19 апреля 2011

Работает только с локальными файлами.Вы не можете передать удаленный mp3-файл в качестве параметра этой функции, и это бессмысленно.Файлы открываются с помощью fopen () , поэтому они должны быть локальными файлами.То же самое для filesize () .

  $fsize = filesize($file);
  $fd = fopen($file,"r");

Что именно вы хотите загрузить с помощью этой функции?Что вы имеете в виду под «Он не работает с внешними доменами»?

Эта строка должна работать только с file.mp3, хранящимся в том же каталоге, что и этот скрипт.

  $song = tagReader("file.mp3");

Если выНе удается прочитать локальный файл, чем следует проверить разрешение READ для этого файла.

По той же причине, по которой filesize () , вероятно, не работает.

Предложение: Выследует использовать кавычки для алфавитно-цифровых индексов массива ...

  echo $song['Title']; // or 
  echo $song["Title"];

вместо

  echo $song[Title];

Да, это, вероятно, работает, но, тем не менее, вы не должны этого делать.Я предлагаю использовать одинарные кавычки, чтобы избежать оценки имен переменных в некоторых конкретных случаях (например, индексы массива, такие как $array['$index']).

...