Foros del Web » Programando para Internet » PHP »

Listar archivos de Sub directorios

Estas en el tema de Listar archivos de Sub directorios en el foro de PHP en Foros del Web. Amigos, el siguiente código me permite mostrar un XML una lista de MP3 que encuentra en un directorio... (genera.php) Código PHP: $filter = ".mp3"; // path to the directory you want to scan $directory=$_GET['music']; // read through the directory and filter files to an array ...
  #1 (permalink)  
Antiguo 22/10/2013, 07:49
Avatar de el_tigre  
Fecha de Ingreso: febrero-2006
Ubicación: Perú
Mensajes: 1.044
Antigüedad: 18 años, 1 mes
Puntos: 8
De acuerdo Listar archivos de Sub directorios

Amigos, el siguiente código me permite mostrar un XML una lista de MP3 que encuentra en un directorio...

(genera.php)
Código PHP:

$filter = ".mp3";
// path to the directory you want to scan


$directory=$_GET['music'];

// read through the directory and filter files to an array
@$d = dir($directory);
if ($d) { 
    while($entry=$d->read()) {  
        $ps = strpos(strtolower($entry), $filter);
        if (!($ps === false)) {  
            $items[] = $entry; 
        } 
    }
    $d->close();
    sort($items);
}


// third, the playlist is built in an xspf format
// we'll first add an xml header and the opening tags .. 
header("content-type:text/xml;charset=utf-8");

echo "<?xml version='1.0' encoding='UTF-8' ?>\n";
echo "<playlist version='1' xmlns='http://xspf.org/ns/0/'>\n";
echo "    <title>Sample PHP Generated Playlist</title>\n";
echo "    <info>http://www.jeroenwijering.com/</info>\n";
echo "    <trackList>\n";

// .. then we loop through the mysql array ..
for($i=0; $i<sizeof($items); $i++) {
    echo "        <track>\n";
    echo "            <annotation>".($i+1).". ".end(explode(".mp3",$items[$i],-1))."</annotation>\n";
    echo "            <location>".$directory.'/'.$items[$i]."</location>\n";
    echo "            <info></info>\n";
    echo "        </track>\n";
}
 
// .. and last we add the closing tags
echo "    </trackList>\n";
echo "</playlist>\n";


?>
El otro archivo necesario es (1.php):

Código PHP:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="350" height="500" id="mp3player"
        codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0">
    <param name="movie" value="mp3player.swf?file=genera.php?music=<?php echo $_GET['music'];?>" />
    <param name="wmode" value="transparent" flashvars="&config=config.xml" />
    <embed src="mp3player.swf?file=genera.php?music=<?php echo $_GET['music'];?>" wmode="transparent" width="350" height="500" name="mp3player" 
        type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
Cuando pongo la ruta por ejemplo:

http://midominio.com/mimusica/1.php?music=MarcosV

Esta me muestra toda la música de un directorio, pero no me muestra de los SUB DIRECTORIOS, ¿si quisiera mostrar la música de los SUBDIRECTORIOS qué tendría que hacer?

¿pueden ayudarme? mi conocimiento es muy limitado sobre PHP.
  #2 (permalink)  
Antiguo 22/10/2013, 09:28
 
Fecha de Ingreso: mayo-2009
Ubicación: Japon
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 12
Mensaje Respuesta: Listar archivos de Sub directorios

para no romperse el "coco", una solución simple, aunque ten en cuenta que hará búsquedas multi-dimensionales y no es una buena practica el "overcall"

Código PHP:

function get_music_arr($directory$filter '.mp3')
{
    
$items = array();

    if(
$d dir($directory))
    {
        while(
$entry $d->read()) 
        {
            
$ps strpos(strtolower($entry), $filter); 
            if(
$ps !== false)
            {
                
$items[] = $entry;
            }

            if(
is_dir($directory.'/'.$entry))
            {
                
$items[$entry] = get_music_arr($directory.'/'.$entry);
            }
        }  
    }

    
$d->close(); 

    
sort($items);

    return 
$items;
}


$items get_music_arr($_GET['music']); 
con eso obtendrás un array con varios niveles de profundidad, suponiendo que tu script no soporta carpetas en xml

Código PHP:

$anotation = 0;
function print_data($data,  $path)
{
    global $anotation;

    foreach($data as $key => $value)
    {
        if(is_array($value))
        {
            print_data($value, $path.'/'.$key);
        }
        else
        {
            $anotation++;
            
            echo "        <track>\n"; 
            echo "            <annotation>".$anotation.". ".end(explode(".mp3", $value,-1))."</annotation>\n"; 
            echo "            <location>".$path.'/'.$value."</location>\n"; 
            echo "            <info></info>\n"; 
            echo "        </track>\n";
        }
    }


}

header("content-type:text/xml;charset=utf-8"); 

echo "<?xml version='1.0' encoding='UTF-8' ?>\n"; 
echo "<playlist version='1' xmlns='http://xspf.org/ns/0/'>\n"; 
echo "    <title>Sample PHP Generated Playlist</title>\n"; 
echo "    <info>http://www.jeroenwijering.com/</info>\n"; 
echo "    <trackList>\n"; 

print_data($items, $_GET['music'])

// .. and last we add the closing tags 
echo "    </trackList>\n"; 
echo "</playlist>\n";

nota: El código no lo revise, aunque debería funcionar
  #3 (permalink)  
Antiguo 22/10/2013, 10:09
Avatar de el_tigre  
Fecha de Ingreso: febrero-2006
Ubicación: Perú
Mensajes: 1.044
Antigüedad: 18 años, 1 mes
Puntos: 8
Respuesta: Listar archivos de Sub directorios

Estos código que me pasas son para REEMPLAZAR al "genera.php"? o qué debo hacer con ellos?......intenté reemplazar pero no me funcionó :S
  #4 (permalink)  
Antiguo 22/10/2013, 11:02
 
Fecha de Ingreso: mayo-2009
Ubicación: Japon
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Listar archivos de Sub directorios

simplemente leer los sub-direcctorios y cargarlos al xml, es exactamente lo que hace ese script

ya esta chequeado, ahora intenta remplazarlo

Código PHP:
<?php
function get_music_arr($directory$filter '.mp3')
{
    
$items = array();

    if(
$dir dir($directory))
    {
        while(
$entry $dir->read()) 
        {
            
$ps strpos(strtolower($entry), $filter); 
            if(
$ps !== false)
            {
                
$items[] = $entry;
            }

            if(
$entry != '.' && $entry != '..' && is_dir($directory.'/'.$entry))
            {
                
$items[$entry] = get_music_arr($directory.'/'.$entry);
            }
        }  
    }

    
$dir->close(); 


    return 
$items;
}

$items get_music_arr($_GET['music']); 

$anotation 0;

function 
print_data($data,  $path)
{
    global 
$anotation;

    foreach(
$data as $key => $value)
    {
        if(
is_array($value))
        {
            
print_data($value$path.'/'.$key);
        }
        else
        {
            
$anotation++;
            
            echo 
"        <track>\n"
            echo 
"            <annotation>".$anotation.". ".end(explode(".mp3"$value,-1))."</annotation>\n"
            echo 
"            <location>".$path.'/'.$value."</location>\n"
            echo 
"            <info></info>\n"
            echo 
"        </track>\n";
        }
    }


header("content-type:text/xml;charset=utf-8"); 

echo 
"<?xml version='1.0' encoding='UTF-8' ?>\n"
echo 
"<playlist version='1' xmlns='http://xspf.org/ns/0/'>\n"
echo 
"    <title>Sample PHP Generated Playlist</title>\n"
echo 
"    <info>http://www.jeroenwijering.com/</info>\n"
echo 
"    <trackList>\n"

print_data($items$_GET['music']);

// .. and last we add the closing tags 
echo "    </trackList>\n"
echo 
"</playlist>\n";

Última edición por nksn; 22/10/2013 a las 11:16 Razón: correccion del codigo
  #5 (permalink)  
Antiguo 22/10/2013, 11:17
Avatar de el_tigre  
Fecha de Ingreso: febrero-2006
Ubicación: Perú
Mensajes: 1.044
Antigüedad: 18 años, 1 mes
Puntos: 8
Respuesta: Listar archivos de Sub directorios

Lo intenté y me salío este mensaje en el reproductor....

"wrong playlist format"
  #6 (permalink)  
Antiguo 22/10/2013, 11:36
 
Fecha de Ingreso: mayo-2009
Ubicación: Japon
Mensajes: 60
Antigüedad: 14 años, 10 meses
Puntos: 12
Respuesta: Listar archivos de Sub directorios

mmm... que raro, pues en ningún momento modifique la estructura del xml, en si el script lee los sub-directorios y los carga todo con el formato del xml original

lo que te puedo sugerir es cambiar la variable get "music" por el sub-directorio, otra no se me ocurre...

habría que leer la api del reproductor, aunque no siempre ando con tiempo...

Etiquetas: directorios, mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:38.