ID3-Tags gleich nach dem laden in Strings konvertieren

essenz

Grünschnabel
Hallo,

bin leider nicht besonders fit in php, daher mal ne einfachere Frage. In dem unteren Skript werden ID3-Tags ausgelesen. Diese Tags werden dann an eine AS3 Klasse übergeben. Leider mag es AS3 nicht so gern, dass andere Datentypen als String übergeben werden. Da aber in einigen MP3s keine oder numerische Werte in den Tags stehen, bekomme ich immer eine Fehlermeldung. Daher würd ich gern alles, was aus den ID3-Tags übergeben bekomme gleich als String konvertieren, auch "leere" Werte. Ich hoffe, dass das möglich ist, sonst muss ich mir in AS3 ne Lösung zusammenbasteln.

PHP:
<?php
function mp3info($file)
{
    $fp = fopen($file, "rb");
    if (!$fp) return 0;
    
    // Try to find ID3v1.x
    fseek($fp, filesize($file)-128);
    $id3v1 = fread($fp, 128);
    if (substr($id3v1, 0, 3) == "TAG")
    { // Yay!
        $mp3[title] = trim(substr($id3v1, 3, 30));
        $mp3[artist] = trim(substr($id3v1, 33, 30));
        $mp3[album] = trim(substr($id3v1, 63, 30));
        $mp3[year] = trim(substr($id3v1, 93, 4));
        if (substr($id3v1, 125, 1) == "\0" && substr($id3v1, 126, 1) != "\0")
        { // we got a ID3v1.1 here
            $mp3[comment] = trim(substr($id3v1, 97, 29));
            $mp3[track] = ord(substr($id3v1, 126, 1));
        }
        else
        { // old ID3v1
            $mp3[comment] = trim(substr($id3v1, 97, 30));
        }
        $mp3[genre] = ord(substr($id3v1, 127, 1));
    }
    else $mp3 = 0;

    fclose($fp);

    return $mp3;
}  

$verzeichnis = $_POST['var1'];

$dir = opendir($verzeichnis); 
while($datei = readdir($dir)) {
    if (is_file($verzeichnis.$datei) && (substr($datei, -3, 3) == "mp3"))
    {
        $info = mp3info($verzeichnis.$datei);
        if ($info) echo "comment=".$info[comment]."&interpret=".$info[artist]."&titel=".$info[title]."&album=".$info[album]."&genre=".$info[genre];
    }
}   
?>


Hoffe ihr könnt mir weiterhelfen.

Gruß essenz
 
PHP:
<?php
function mp3info($file)
{
    $fp = fopen($file, "rb");
    if (!$fp) return 0;
    
    // Try to find ID3v1.x
    fseek($fp, filesize($file)-128);
    $id3v1 = fread($fp, 128);
    if (substr($id3v1, 0, 3) == "TAG")
    { // Yay!
        $mp3['title'] = trim(substr($id3v1, 3, 30));
        $mp3['artist'] = trim(substr($id3v1, 33, 30));
        $mp3['album'] = trim(substr($id3v1, 63, 30));
        $mp3['year'] = trim(substr($id3v1, 93, 4));
        if (substr($id3v1, 125, 1) == "\0" && substr($id3v1, 126, 1) != "\0")
        { // we got a ID3v1.1 here
            $mp3['comment'] = trim(substr($id3v1, 97, 29));
            $mp3['track'] = ord(substr($id3v1, 126, 1));
        }
        else
        { // old ID3v1
            $mp3['comment'] = trim(substr($id3v1, 97, 30));
        }
        $mp3['genre'] = ord(substr($id3v1, 127, 1));
    }
    else $mp3 = 0;

    fclose($fp);

    return $mp3;
}  

$verzeichnis = $_POST['var1'];

$dir = opendir($verzeichnis); 
while($datei = readdir($dir)) {
    if (is_file($verzeichnis.$datei) && (substr($datei, -3, 3) == "mp3"))
    {
        $info = mp3info($verzeichnis.$datei);
        if ($info) echo "comment=".$info['comment']."&interpret=".$info['artist']."&titel=".$info['title']."&album=".$info['album']."&genre=".$info['genre'];
    }
}   
?>

Ich habe dein Skript ein wenig bereinigt.
Grundsätzlich verwendet PHP von sich aus NUR Strings...
Falls das Skript immer noch Probleme macht, kannst du versuchen die Variablen per Zwang zu casten. Dies kannst du erreichen, in dem du einfach ein (string) vor die Zuweisung setzt.

Also:
PHP:
$var = (string)$var2;

Eigentlich sollte es aber nicht nötig sein.
 
Schade, das Thema hat sich doch nicht ganz erledigt. Denn immer wenn eins der Tags ein "&" enthält (zum Beispiel "KünstlerA & KünstlerB"), meckert AS3.

Deswegen wär es praktisch, sobald eines der Tags ein "&" enthält, PHP dieses in "and" oder die passende URL-Kodierung "%26" umwandelt. Hat einer von euch dafür ne Lösung?

Ansonsten muss ich halt alle "&" aus den Tags verbannen :D
 
Zuletzt bearbeitet:
Zurück