treehouse : what would you like to learn today?
Web Design Web Development iOS Development

MP3 ID3 Tags

  • So I am trying to write a script where it browses a folder and gets all the mp3 id3 data for all the mp3's in the folder.

    <?php

    $dir = TEMPLATEPATH . \"/flash/music/\";

    if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
    while (($fileread = readdir($dh)) !== false) {
    if($fileread == \".\" || $fileread == \"..\" || $fileread == \"index.php\" )
    continue;

    $fullpath = $dir . $fileread;
    echo \"filename: <b>$fullpath</b>\";
    echo \"<br>\";

    $musicfile = $fullpath;
    fopen($fullpath, 'r');
    fseek($musicfile, -128, SEEK_END);

    $tag = fread($musicfile, 3);

    if($tag == \"TAG\")
    {
    $data[\"song\"] = trim(fread($musicfile, 30));
    $data[\"artist\"] = trim(fread($musicfile, 30));
    $data[\"album\"] = trim(fread($musicfile, 30));
    }
    else
    die(\"MP3 file does not have any ID3 tag!\");

    fclose($musicfile);

    while(list($key, $value) = each($data))
    {
    print(\"$key: $value<br>\r\n\");
    }
    }
    }
    }

    ?>


    Its not working. I get this error:

    filename: /[my_server_path]/public_html/new/wp-content/themes/default/flash/music/09 Low.mp3

    Warning: fseek(): supplied argument is not a valid stream resource in /[my_server_path]/public_html/new/wp-content/themes/default/functions.php on line 1039

    Warning: fread(): supplied argument is not a valid stream resource in /[my_server_path]/public_html/new/wp-content/themes/default/functions.php on line 1041
    MP3 file does not have any ID3 tag!

    Any help?

    Thanks.
  • Ok so I changed it to this:
    <?php

    $dir = TEMPLATEPATH . \"/flash/music/\";

    if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
    while (($fileread = readdir($dh)) !== false) {
    if($fileread == \".\" || $fileread == \"..\" || $fileread == \"index.php\" )
    continue;

    $fullpath = $dir . $fileread;

    $musicfile = fopen($fullpath, 'r');
    fseek($musicfile, -128, SEEK_END);


    $tag = fread($musicfile, 3);

    if($tag == \"TAG\")
    {
    $data[\"song\"] = trim(fread($musicfile, 30));
    $data[\"artist\"] = trim(fread($musicfile, 30));
    $data[\"album\"] = trim(fread($musicfile, 30));
    }
    else
    {
    echo \"MP3 file does not have any ID3 tag!\";

    }

    fclose($musicfile);

    while(list($key, $value) = each($data))
    {
    print(\"$key: $value<br>\r\n\");
    }
    }
    }
    }

    ?>


    and its returning this:
    MP3 file does not have any ID3 tag!
    Warning: Variable passed to each() is not an array or object in /[my_server_path]/public_html/new/wp-content/themes/default/functions.php on line 1053
    song: X&Y
    artist: Coldplay
    album: X&Y

    So oddly enough it only retrieves the second songs id3 data.
    Any ideas?