Playliste erstellen

Hallo,

ich komme beim nachfolgen Script nicht weiter:

<?

// Hier gibt man den Ordner an, in dem die Musik-Dateien liegen:
$path = "D:/ServerFolders/Musik/";
$playlist = array();

function getDirectoryTree($path, $playlist)
{
    $content = scandir($path);
    $maindata = array_diff($content, Array(".",".."));
    $allowed = Array("mp3");

    foreach($maindata as $d)
    {
        $actpath = $path . "\\" . $d;
        if(is_dir($actpath))
        {
            getDirectoryTree($actpath, &$playlist);
        }
        else
        {
            $ext = pathinfo($actpath, PATHINFO_EXTENSION);
            if(in_array(strtolower($ext), $allowed))
            {
                $playlist[] = $actpath;
            }
        }
    }
}

getDirectoryTree($path, &$playlist);

$id = 41352 /*Mediaplayer ID*/;

// Leeren der vorher bestehenden Playlist:
WAC_ClearPlaylist($id);

// Durchlaufen des Playlist-Arrays und anhängen an die Mediaplayer-Instanz-Playlist
foreach($playlist as $data)
{
        WAC_AddFile($id, $data);
}
$pl = WAC_GetPlaylistLength(40529 /*Mediaplayer ID*/);
SetValueInteger(59216 /*Playlist-Länge Datei*/, $pl);
?>

Fehler:

Fatal error:  Call-time pass-by-reference has been removed in [Service\Mediaplayer\Media Player extern\Test Playliste] on line 18

Bemängelte Zeile ist:

getDirectoryTree($actpath, &$playlist);

? :confused:

Andreas

Ist das vielleicht ein Netzwerklaufwerk?
Das klappt nur mit lokalen Laufwerken.

Hallo Marcus,

WHS2011 Pfad muß stimmen - denn wenn ich eine Datei explizied angebe und der Playliste hinzufüge funktioniert es.

Oder meinst du das das mit der Funktion getDirectoryTree nicht funktioniert.

Andreas

Die Funktion getDirectoryTree habe ich nicht mit einem Netzwerklaufwerk zum laufen gebracht.
Wobei ich in einem Thread mal gelesen habe das es mit einem Tool klappen soll.
Ich weiß nur leider nicht mehr welches Tool oder Thread das war.
Vielleicht kann sich da noch mal jemand melden, der das so nutzt.
Wäre für mich auch von großem Nutzen, da meine Media Libary auf einem Qnap NAS liegt.

Probier es mal so:

 <?

// Hier gibt man den Ordner an, in dem die Musik-Dateien liegen:
$path = "D:/ServerFolders/Musik/";
$playlist = array();

function getDirectoryTree($path, &$playlist)
{
    $content = scandir($path);
    $maindata = array_diff($content, Array(".",".."));
    $allowed = Array("mp3");

    foreach($maindata as $d)
    {
        $actpath = $path . "\\" . $d;
        if(is_dir($actpath))
        {
            getDirectoryTree($actpath, $playlist);
        }
        else
        {
            $ext = pathinfo($actpath, PATHINFO_EXTENSION);
            if(in_array(strtolower($ext), $allowed))
            {
                $playlist[] = $actpath;
            }
        }
    }
}

getDirectoryTree($path, $playlist);

$id = 41352 /*Mediaplayer ID*/;

// Leeren der vorher bestehenden Playlist:
WAC_ClearPlaylist($id);

// Durchlaufen des Playlist-Arrays und anhängen an die Mediaplayer-Instanz-Playlist
foreach($playlist as $data)
{
        WAC_AddFile($id, $data);
}
$pl = WAC_GetPlaylistLength(40529 /*Mediaplayer ID*/);
SetValueInteger(59216 /*Playlist-Länge Datei*/, $pl);
?> 

gruß garfi

Hallo garfi,

danke es funktioniert. Was hast du geändert? Erschließt sich für mich nicht.

Andreas

Ich habe es mit einem gemappten Laufwerk nicht hinbekommen.
Wenn ich den Netzwerkpfad so eingebe, vermisst er Benutzer und Passwort.
Kann mir jemand noch einen Tipp geben, was ich da falsch mache.

$path = "y:/Music/";

Y ist das gemappte Laufwerk auf dem IPS Rechner

Hallo Lukky,

da hat sich was bei php geändert. Jetzt muss man in der Funktionsdeklaration gleich al Referenz deklarieren. Entweder die Funktion arbeitet von Hause aus mit Referenzen oder nicht.
Mehr dazu:
http://www.php.net/manual/en/language.references.pass.php

gruß garfi

Hallo Garfi35

Den Link hatte ich schon ergoogelt - hab`s als PHP NOB nur nicht kapiert.

Danke

Andreas

PS Hapsache es funzt :smiley:

Könntet Ihr mir etwas Hilfestellung geben.
Ich bekomme es nicht hin. Unter Win7ProN habe ich das Laufwerk gemappt und habe den Pfad angegeben.

// Hier gibt man den Ordner an, in dem die Musik-Dateien liegen:
$path = "y:/Music/Marcus/";

Fehlermeldung lautet:

Warning:  scandir(y:/Music/Marcus/,y:/Music/Marcus/): The system cannot find the path specified. (code: 3) in E:\IP-Symcon\scripts\54370.ips.php on line 9

Warning:  scandir(y:/Music/Marcus/): failed to open dir: No such file or directory in E:\IP-Symcon\scripts\54370.ips.php on line 9

Warning:  scandir(): (errno 2): No such file or directory in E:\IP-Symcon\scripts\54370.ips.php on line 9

Warning:  array_diff(): Argument #1 is not an array in E:\IP-Symcon\scripts\54370.ips.php on line 10

Warning:  Invalid argument supplied for foreach() in E:\IP-Symcon\scripts\54370.ips.php on line 13

Daraus entnehme ich das er den Pfad nicht findet.
Um Schreibfehler zu eliminieren habe ich alles per Copy Paste eingefügt.
Bin mit meinem Latein am ende. Kann das an der Windows Version liegen?