ФорумПрограммированиеPHP для идиотов → php class для работы со свойством файла

php class для работы со свойством файла

  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 26 марта 2009 г. 11:37

    Может видели библиотеку где в сводках mp3 файла можно читать автора, тему, категория, ключевые слова и т.д

    Собсн есть класс для работы с файлами? Подобное нужно делать с jpeg файлами
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 26 марта 2009 г. 11:40, спустя 3 минуты 16 секунд

    Function BinToDec($BinValue)
    {
       $I = 0;
       $BinToDec = 0;
       For ($I = 1; $I <= strlen($BinValue); $I++)
       {
           If (substr($BinValue, $I - 1, 1) == "1")
           {
            $BinToDec = $BinToDec + pow(2 ,(strLen($BinValue) - $I));
           }
       }
       return $BinToDec;
    }

    function ByteToBit($ByteArray)
    {
       $Z =0;
       $I =0;
       $cnt =0;
       $ByteToBit = "";
       //convert 4*1 byte array to 4*8 bits'''''
       For ($Z = 1; $Z<=4; $Z++)
       {
           $subs = ord(substr($ByteArray, $Z-1, 1));
           For ($I = 7; $I >= 0; $I–)
           {
               If(intval($subs / pow(2, $I)) == 1)
               {
                   $ByteToBit = $ByteToBit."1";
                   $subs = $subs - pow(2 , $I);
               }
               ElseIf ($ByteToBit !== "")
               {
                   $ByteToBit = $ByteToBit."0";
               }
           }
       }
       return BinToDec($ByteToBit);
    }

    function isVBR($sign)
    {
      if($sign == "Xing")
      {
         return "yes";
      }
      else
      {
         return "no";
      }
    }
    function GetGenre($genre)
    {
    $_genres = array(
         0   => 'Blues',
         1   => 'Classic Rock',
         2   => 'Country',
         3   => 'Dance',
         4   => 'Disco',
         5   => 'Funk',
         6   => 'Grunge',
         7   => 'Hip-Hop',
         8   => 'Jazz',
         9   => 'Metal',
         10  => 'New Age',
         11  => 'Oldies',
         12  => 'Other',
         13  => 'Pop',
         14  => 'R&B',
         15  => 'Rap',
         16  => 'Reggae',
         17  => 'Rock',
         18  => 'Techno',
         19  => 'Industrial',
         20  => 'Alternative',
         21  => 'Ska',
         22  => 'Death Metal',
         23  => 'Pranks',
         24  => 'Soundtrack',
         25  => 'Euro-Techno',
         26  => 'Ambient',
         27  => 'Trip-Hop',
         28  => 'Vocal',
         29  => 'Jazz+Funk',
         30  => 'Fusion',
         31  => 'Trance',
         32  => 'Classical',
         33  => 'Instrumental',
         34  => 'Acid',
         35  => 'House',
         36  => 'Game',
         37  => 'Sound Clip',
         38  => 'Gospel',
         39  => 'Noise',
         40  => 'Alternative Rock',
         41  => 'Bass',
         42  => 'Soul',
         43  => 'Punk',
         44  => 'Space',
         45  => 'Meditative',
         46  => 'Instrumental Pop',
         47  => 'Instrumental Rock',
         48  => 'Ethnic',
         49  => 'Gothic',
         50  => 'Darkwave',
         51  => 'Techno-Industrial',
         52  => 'Electronic',
         53  => 'Pop-Folk',
         54  => 'Eurodance',
         55  => 'Dream',
         56  => 'Southern Rock',
         57  => 'Comedy',
         58  => 'Cult',
         59  => 'Gangsta',
         60  => 'Top 40',
         61  => 'Christian Rap',
         62  => 'Pop/Funk',
         63  => 'Jungle',
         64  => 'Native US',
         65  => 'Cabaret',
         66  => 'New Wave',
         67  => 'Psychadelic',
         68  => 'Rave',
         69  => 'Showtunes',
         70  => 'Trailer',
         71  => 'Lo-Fi',
         72  => 'Tribal',
         73  => 'Acid Punk',
         74  => 'Acid Jazz',
         75  => 'Polka',
         76  => 'Retro',
         77  => 'Musical',
         78  => 'Rock & Roll',
         79  => 'Hard Rock',
         80  => 'Folk',
         81  => 'Folk-Rock',
         82  => 'National Folk',
         83  => 'Swing',
         84  => 'Fast Fusion',
         85  => 'Bebob',
         86  => 'Latin',
         87  => 'Revival',
         88  => 'Celtic',
         89  => 'Bluegrass',
         90  => 'Avantgarde',
         91  => 'Gothic Rock',
         92  => 'Progressive Rock',
         93  => 'Psychedelic Rock',
         94  => 'Symphonic Rock',
         95  => 'Slow Rock',
         96  => 'Big Band',
         97  => 'Chorus',
         98  => 'Easy Listening',
         99  => 'Acoustic',
         100 => 'Humour',
         101 => 'Speech',
         102 => 'Chanson',
         103 => 'Opera',
         104 => 'Chamber Music',
         105 => 'Sonata',
         106 => 'Symphony',
         107 => 'Booty Bass',
         108 => 'Primus',
         109 => 'Porn Groove',
         110 => 'Satire',
         111 => 'Slow Jam',
         112 => 'Club',
         113 => 'Tango',
         114 => 'Samba',
         115 => 'Folklore',
         116 => 'Ballad',
         117 => 'Power Ballad',
         118 => 'Rhytmic Soul',
         119 => 'Freestyle',
         120 => 'Duet',
         121 => 'Punk Rock',
         122 => 'Drum Solo',
         123 => 'Acapella',
         124 => 'Euro-House',
         125 => 'Dance Hall',
         126 => 'Goa',
         127 => 'Drum & Bass',
         128 => 'Club-House',
         129 => 'Hardcore',
         130 => 'Terror',
         131 => 'Indie',
         132 => 'BritPop',
         133 => 'Negerpunk',
         134 => 'Polsk Punk',
         135 => 'Beat',
         136 => 'Christian Gangsta Rap',
         137 => 'Heavy Metal',
         138 => 'Black Metal',
         139 => 'Crossover',
         140 => 'Contemporary Christian',
         141 => 'Christian Rock',
         142 => 'Merengue',
         143 => 'Salsa',
         144 => 'Trash Metal',
         145 => 'Anime',
         146 => 'Jpop',
         147 => 'Synthpop');

      if(($genre<148) && ($genre>-1))
      {
         return $_genres[$genre];
      }
      else
      {
         return '';
      }
    }

    function GetLayer($byte)
    {   $ret = 0;
       $layers = Array(0, 3, 2, 1);
      if ((ord($byte) & 2) == 2) $ret += 1;
      if ((ord($byte) & 4) == 4) $ret += 2;
      return $layers[$ret];
    }

    function isOriginal($byte)
    {   $ret = 0;
       $originals = Array('No' ,'Yes');
      if ((ord($byte) & 4) == 4) $ret += 1;
      return $originals[$ret];
    }

    function getEmphasis($byte)
    {   $ret = 0;
       $emphasis = Array('None', '50/15 microseconds', 'Dunno', 'CITT j.17');
      if ((ord($byte) & 1) == 1) $ret += 1;
      if ((ord($byte) & 2) == 2) $ret += 2;
      return $emphasis[$ret];
    }

    function getChanels($byte)
    {   $ret = 0;
       $chanels = Array('Stereo', 'Joint stereo', 'Dual channel', 'Mono');
      if ((ord($byte) & 64) == 64) $ret += 1;
      if ((ord($byte) & 128) == 128) $ret += 2;
      return $chanels[$ret];
    }

    function GetMPEG($byte)
    {   $ret = 0;
       $mpegs = Array('2.5','?','2.0','1.0');
      if ((ord($byte) & 8) == 8) $ret |= 1;
      if ((ord($byte) & 16) == 16) $ret |= 2;
      return $mpegs[$ret];
    }

    function GetSampleRate($byte, $mpeg)
    {   $ret = 0;
       $samplerate1 = Array(44100,48000,32000,'?');
       $samplerate2 = Array(22050,24000,16000, '?');
      if ((ord($byte) & 4) == 4) $ret += 1;
      if ((ord($byte) & 8) == 8) $ret += 2;
      if($mpeg=='1.0')
      {
         return $samplerate1[$ret];
      }
      elseif($mpeg=='2.0')
      {
         return $samplerate2[$ret];
      }else{return '?';}
    }


    function GetBitRate($byte, $mpeg, $layer)
    {
     $ret = 0;
     if ((ord($byte) & 16) == 16) {$ret |= 1;}
     if ((ord($byte) & 32) == 32) {$ret |= 2;}
     if ((ord($byte) & 64) == 64) {$ret |= 4;}
     if ((ord($byte) & 128) == 128) {$ret |= 8;}
     $bitrates = Array(
                  '1.0'=>Array(
                           '1'=>Array(0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,'?'),
                           '2'=>Array(0,32,48,56,64,80,96,112,128,160,192,224,256,320,384,'?'),
                           '3'=>Array(0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,'?')
                           ),
                  '2.0'=>Array(
                           '1'=>Array(0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,'?'),
                           '2'=>Array(0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,'?'),
                           '3'=>Array(0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,'?')
                           )
                 );
     return $bitrates[$mpeg][$layer][$ret];
    }

    function getTags($mp3file)
    {

       $bpp = 0;
       $tags = Array();
       $tags['FILE'] = (realpath($mp3file));

      if(file_exists($mp3file))
      {
         if(is_readable($mp3file))
         {

            $f = fopen($mp3file,'r');
            fseek($f,filesize($mp3file)-128);
            $ret = fread($f,128);

            $start = -1;
            //search mp3-header
            for ($i = 0; $i <= filesize($mp3file); $i++)
            {
              fseek($f, $i);
              $byte = fread($f, 1);
              if(ord($byte)==255)
              {
               fseek($f, $i+1);
               $bits = 0;
               $byte = fread($f, 1);
                 if ((ord($byte) & 32) == 32) {$bits |= 2;}
                 if ((ord($byte) & 64) == 64) {$bits |= 4;}
                 if ((ord($byte) & 128) == 128) {$bits |= 8;}
               if ($bits==14)
               {
                  $start = $i;
                  break;
               }
              }
            }

            $tags['FILESIZE'] = filesize($mp3file);

            if($start>=0)
            {
               fseek($f, $start + 0); $byte0 = fread($f, 1);
               fseek($f, $start + 1); $byte1 = fread($f, 1);
               fseek($f, $start + 2); $byte2 = fread($f, 1);
               fseek($f, $start + 3); $byte3 = fread($f, 1);
               fseek($f, $start + 36); $xing = fread($f, 4);

               $tags['VBR'] = isVBR($xing);
               $tags['FRAMES'] = 1;

               if($tags['VBR']=="yes")
               {
                     //calculate # of frames
                     $Frames = 0;
                      fseek($f, $start + 44);
                      $frame = fread($f, 4); //get framelength
                     $Frames = ByteToBit($frame);
                     $tags['FRAMES'] = $Frames;
                  }

                   fclose($f);

               $tags['MPEG'] = GetMPEG($byte1);
               $tags['LAYER'] = GetLayer($byte1);
               $tags['SAMPLERATE'] = GetSampleRate($byte2, $tags['MPEG']);


               if($tags['VBR']=="yes")
               {
                  $Temp = Array(0, 12, 144, 144);
                  $tags['BPP'] = (filesize($mp3file) * $tags['SAMPLERATE']) / (intval($tags['FRAMES'])) / 1000 / $Temp[round($tags['LAYER'])];
               }
               else
               {
                  $tags['BPP'] = GetBitRate($byte2, $tags['MPEG'], $tags['LAYER']);
               }

               $tags['LENGTH'] = intval(($tags['FILESIZE'] * 8) / $tags['BPP'] / 1000);
               //$Duration = intval($Duration / 60) . "m " . ($Duration - intval($Duration / 60) * 60) . "s";

               // floor( ((8 * filesize($mp3file))/1000) / $tags['BPP']);
               $tags['CHANELS'] = getChanels($byte3);
               $tags['EMPHASIS'] = getEmphasis($byte3);
               $tags['ORIGINAL'] = isOriginal($byte3);
               $tags['BPP'] = intval($tags['BPP']);

             }
             else
             {
               return false;
             }

            //$tags[] = $ret;
            if(substr($ret,0,3)=="TAG")
            {
              $tags['TITLE'] = (chop(substr($ret,3,32-3+1)));
              $tags['ARTIST'] = (chop(substr($ret,33,62-33+1)));
              $tags['ALBUM'] = (chop(substr($ret,63,92-63+1)));
              $tags['YEAR'] = (chop(substr($ret,93,96-93+1)));
              $tags['GENRECODE'] = (ord(substr($ret,127,1)));
              $tags['GENRE'] = (GetGenre(ord(substr($ret,127,1))));
              if((ord(substr($ret,125,1))==0) && (ord(substr($ret,126,1))!==0))
              {
               $tags['TRACK'] = (ord(substr($ret,126,1)));
               $tags['COMMENT'] = (chop(substr($ret,97,28)));
              }
              else
              {
                $tags['COMMENT'] = (chop(substr($ret,97,30)));
              }




            }

         }
      }
      return $tags;
    }


    всю эту хуйню неплохо бы в класс оформить, и в спойлер
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 26 марта 2009 г. 11:41, спустя 1 минуту 23 секунды

    thnks :)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 марта 2009 г. 11:43, спустя 1 минуту 31 секунду

    хуйня какая то как всегда. иви :)

    http://ru.php.net/manual/ru/function.id3-get-tag.php
    Сапожник без сапог
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 26 марта 2009 г. 11:43, спустя 6 секунд

    юзай фцию getTags
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 26 марта 2009 г. 11:43, спустя 12 секунд

    phpdude, я спиздил
    Call to undefined function id3_get_tag() пекл нужен какойто :D
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 марта 2009 г. 11:43, спустя 30 секунд


    phpdude, я спиздил
    что спиздил?
    Сапожник без сапог
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 26 марта 2009 г. 11:45, спустя 1 минуту 43 секунды

    что что, говнокод который наверху
  • adw0rd

    Сообщения: 22933 Репутация: N Группа: в ухо

    Spritz 26 марта 2009 г. 11:45, спустя 4 секунды

    Получаем ID3-теги с помощью PHP
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22933 Репутация: N Группа: в ухо

    Spritz 26 марта 2009 г. 11:46, спустя 25 секунд


    хуйня какая то как всегда. иви :)

    http://ru.php.net/manual/ru/function.id3-get-tag.php
    хуета!
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 марта 2009 г. 11:48, спустя 2 минуты 47 секунд

    adw0rd, ты прав

    вот эта лучшая имхо GetID3

    просто я уже не помню названий, так как про них только читал изредка, а на практике ни разу не занимался
    Сапожник без сапог
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 26 марта 2009 г. 11:49, спустя 38 секунд

    а из jpg как вытащить???
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 марта 2009 г. 11:52, спустя 2 минуты 27 секунд


    а из jpg как вытащить???
    а погуглить? :)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22933 Репутация: N Группа: в ухо

    Spritz 26 марта 2009 г. 11:56, спустя 4 минуты 19 секунд


    а из jpg как вытащить???
    хз, imagick и gd в помощь
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 марта 2009 г. 12:00, спустя 3 минуты 52 секунды

    aivee, а чо там собственно извлекать то? какая информация интересует ?
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!