2012-01-09 23 views
2

リモートURLからmp3の詳細を取得するサイトに取り組んでいます。私はファイル名、パス、アーティスト、ジャンル、ビットレート、再生時間などのすべての曲情報を取得し、それをデータベーステーブルに入れるためにcronジョブを作成する必要があります。PHPを使ってリモートmp3ファイル情報を読む

私はgetid3パッケージを試しましたが、一度に複数のURLをフェッチすると非常に遅くなり、最大実行エラーが発生します。

例:

require_once('getid/getid3/getid3.php'); 

    $urls = array ('http://stackoverflow.com/test1.mp3','http://stackoverflow.com/test2.mp3''http://stackoverflow.com/test3.mp3'); 


    foreach($urls as $ur){ 
     $mp3_det = getMp3Info($ur); 
     print_r ($mp3_det); 

    } 

    function getMp3Info ($url){ 
      if($url){ 
      /**********/ 
      $filename = tempnam('/tmp','getid3'); 
      if (file_put_contents($filename, file_get_contents($url, false, null, 0, 35000))) { 
       if (require_once('getid/getid3/getid3.php')) { 
        $getID3 = new getID3; 
        $ThisFileInfo = $getID3->analyze($filename); 
        unlink($filename); 
        $bitratez = $ThisFileInfo[audio][bitrate] ? $ThisFileInfo[audio][bitrate] : ''; 
        $headers = get_headers($url, 1); 
        if ((!array_key_exists("Content-Length", $headers))) { return false; } 
       // print $headers["Content-Length"]; 
        $filesize= round($headers["Content-Length"]/1000); 
        $contentLengthKBITS=$filesize*8; 
        if ($bitratez){ 
         $bitrate= round ($bitratez/1000); 
         $seconds=$contentLengthKBITS/$bitrate; 
         $playtime_mins = floor($seconds/60); 
         $playtime_secs = $seconds % 60; 

         if(strlen($playtime_secs)=='1'){$zero='0';} 
         $playtime_secs = $zero.$playtime_secs; 
         $playtime_string=$playtime_mins.':'.$playtime_secs; 
        } 
        else $playtime_string='0:00'; 

       // echo '<pre>'.print_r($ThisFileInfo, true).'</pre>'; 
       } 

       $bitrate = $bitrate ? $bitrate : 0; 

       $ret = array(); 
       $ret['playtime'] = $playtime_string; 
       $ret['filesize'] = $filesize; 
       $ret['bitrate'] = $bitrate; 

       return $ret; 
      } 
     } 
+0

あなたの質問は何ですか?あなたはすでに 'max_execution_time'パラメータについて知っていると思いますか?私はそれを変えること、あるいはすべてを複数の仕事に分割することが唯一の方法だと思います –

答えて

0

MP3ファイルには、いくつかの他のバイナリファイル形式とほぼ同じようにメタデータのいくつかの種類と一緒に来ます。彼らはIDタグに入っています。 ID3タグやID4タグなど、多くのバージョンのIDタグがあります。今、PHPを使ってMP3ファイルと共に提供されるIDv3タグ情報を簡単に抽出する方法があります。

getID3のように、sourceforgeからPHPでライブラリをダウンロードする必要があります。この方法で、mp3ファイルからアーティスト名、ジャンル、期間、長さ、サイズなどの情報を抽出できます。 IDv4には、アルバムアートなどの追加情報が含まれています。

1

ソケット接続を使用して一度にファイルのチャンクを読み取り、ファイルを継続的に分析しようとすると、実行時間を助けることができます。

ID3のデータはmp3の先頭に格納されているため、全体をダウンロードする際のポイントはありません。私が今見ている最大の問題は、analyze関数はバイナリデータではなく、ファイル名だけを取ることです。したがって、コードを更新するか、バイナリデータで動作するかどうかを分析するために同様の関数を作成する必要があります。

関連する問題