Файл: system/classes/id3v2.php
Строк: 46
<?php
/*
Appointment: Информация о mp3 файле по URL
File: id3v2.php
*/
class Id3v2 {
public $error;
private $tags = array(
'TALB' => 'Album',
'TCON' => 'Genre',
'TENC' => 'Encoder',
'TIT2' => 'Title',
'TPE1' => 'Artist',
'TPE2' => 'Ensemble',
'TYER' => 'Year',
'TCOM' => 'Composer',
'TCOP' => 'Copyright',
'TRCK' => 'Track',
'WXXX' => 'URL',
'COMM' => 'Comment'
);
private function decTag($tag, $type){
//TODO- handling of comments is quite weird
//but I don't know how it is encoded so I will leave the way it is for now
if ($type == 'COMM')
{
$tag = substr($tag, 0, 3) . substr($tag, 10);
}
//mb_convert_encoding is corrupted in some versions of PHP so I use iconv
switch (ord($tag[2]))
{
case 0: //ISO-8859-1
return iconv('cp1251', 'UTF-8', substr($tag, 3));
case 1: //UTF-16 BOM
return iconv('UTF-16LE', 'UTF-8', substr($tag, 5));
case 2: //UTF-16BE
return iconv('UTF-16BE', 'UTF-8', substr($tag, 5));
case 3: //UTF-8
return substr($tag, 3);
}
return false;
}
public function read($file){
$f = fopen($file, 'r');
$header = fread($f, 10);
$header = @unpack("a3signature/c1version_major/c1version_minor/c1flags/Nsize", $header);
if (!$header['signature'] == 'ID3')
{
$this->error = 'This file does not contain ID3 v2 tag';
fclose($f);
return false;
}
$result = array();
for ($i=0; $i<22; $i++)
{
$tag = rtrim(fread($f, 6));
if (!isset($this->tags[$tag])) break;
$size = fread($f, 2);
$size = @unpack('n', $size);
$size = $size[1]+2;
$value = fread($f, $size);
$value = $this->decTag($value, $tag);
$result[$this->tags[$tag]] = $value;
}
fclose($f);
return $result;
}
}