Mostrar MP3 ordenados por data de adição em PHP

  • Autor Autor Link
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
Link

Link

Gamma
necesito ayuda, tengo un pequeño problemita con un script simple.

PHP:
<? 

    // Pon la ruta del directorio de donde listar los archivos desde el root 
    $path = "/home/xxx/public_html/mp3/Musica/"; 

    // Abrir la carpeta 
    $dir_handle = @opendir($path) or die("Unable to open $path"); 

    // Leer los archivos 
    while ($file = readdir($dir_handle)) { 

    if($file == "." || $file == ".." || $file == "index.php" ) 

        continue; 
        echo "<a href=\"$file\">$file</a><br />"; 

    } 

    // Cerrar 
    closedir($dir_handle); 

?>

con este pequeño codigo muestro todos los mp3 de un directorio, hasta ahí todo perfecto, el problema que tengo es que yo quiero que muestre los mp3 de forma que los últimos temas añadidos salgan en primer lugar, segun estuve mirando en PHP: sort - Manual se puede hacer con $sort_desc pero no logro implementarlo. saludos.
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
Prueba así
PHP:
<?php

$path = '/home/xxx/public_html/mp3/Musica';

$dir = dir($path);

$songs = array();

while($song = $dir->read())
{
	if ( ! in_array($song, array('.', '..', 'index.php')) )
	{
			$songs[] = $song;
	}
}

krsort($songs);

echo '<pre>';
print_r($songs);
echo '</pre>';
Creo que con ese krsort debe funcionar, si al subir una canción ésta queda en el último lugar con krsort se revierte el array entonces la que se ha añadido más recientemente queda en el primer lugar, el problema sería si la carpeta en la que subes las canciones por alguna razón las ordena alfabéticamente o algo
 
Prueba así
PHP:
<?php

$path = '/home/xxx/public_html/mp3/Musica';

$dir = dir($path);

$songs = array();

while($song = $dir->read())
{
	if ( ! in_array($song, array('.', '..', 'index.php')) )
	{
			$songs[] = $song;
	}
}

krsort($songs);

echo '<pre>';
print_r($songs);
echo '</pre>';
Creo que con ese krsort debe funcionar, si al subir una canción ésta queda en el último lugar con krsort se revierte el array entonces la que se ha añadido más recientemente queda en el primer lugar, el problema sería si la carpeta en la que subes las canciones por alguna razón las ordena alfabéticamente o algo

no funciona asi..
 
no funciona asi..
De la manera que he puesto como se ordenan las canciones?

Lo único que te podría decir que funcionaría perfectamente es que uses una base de datos para guardar la url de la canción y cuando fue agregada, entonces cuando quieras hacer el listado haces algo como "ORDER_BY agregado_cuando".

La otra manera que podrías hacer es la siguiente:
PHP:
<?php
$path = '/home/xxx/public_html/mp3/Musica';
$dir = dir($path);
$songs = array();

while($song = $dir->read()){
 
   if ( ! in_array($song, array('.', '..', 'index.php')) )
    {
            $songs[filectime($song)] = $song;
    }
}

krsort($songs);
echo '<pre>';
print_r($songs);
echo '</pre>';
Con eso hacemos que las "keys" de las canciones sean la fecha en la cual se han creado. Supongo que es algo lento porque tenemos que ejecutar "filectime" por cada canción pero bueno.
Luego de ese código si quieres mostrar las canciones tendrás que poner algo como
PHP:
foreach($songs as $song)
{
       echo '<a href="'.$song.'">'.$song.'</a>';
}
 
Última edição:
De la manera que he puesto como se ordenan las canciones?

Lo único que te podría decir que funcionaría perfectamente es que uses una base de datos para guardar la url de la canción y cuando fue agregada, entonces cuando quieras hacer el listado haces algo como "ORDER_BY agregado_cuando".

La otra manera que podrías hacer es la siguiente:
PHP:
<?php
$path = '/home/xxx/public_html/mp3/Musica';
$dir = dir($path);
$songs = array();

while($song = $dir->read()){
 
   if ( ! in_array($song, array('.', '..', 'index.php')) )
    {
            $songs[filectime($song)] = $song;
    }
}

krsort($songs);
echo '<pre>';
print_r($songs);
echo '</pre>';
Con eso hacemos que las "keys" de las canciones sean la fecha en la cual se han creado. Supongo que es algo lento porque tenemos que ejecutar "filectime" por cada canción pero bueno.
Luego de ese código si quieres mostrar las canciones tendrás que poner algo como
PHP:
foreach($songs as $song)
{
       echo '<a href="'.$song.'">'.$song.'</a>';
}

ahora si las ordena como yo quiero pero no me salen las canciones. ocea me sale la pagina en blanco y cuando miro el codigo fuente están bien ordenadas pero no tienen el link de descargar.
 
Hola, había salido y por eso no pude contestar.
PHP:
<?php
$path = '/home/xxx/public_html/mp3/Musica';
$dir = dir($path);
$songs = array();
// cambie "$song" por "$sng" para ver si ese era el problema
while($sng = $dir->read()){
 
   if ( ! in_array($sng, array('.', '..', 'index.php')) )
    {
            $songs[filectime($sng)] = $sng;
    }
}
// agregue lo de "$dir->close()", me lo había olvidado
$dir->close();

krsort($songs);

foreach($songs as $song)
{
echo '<a href="'.$song.'">'.$song.'</a>';
}
Prueba así, tal vez era porque la variable $song que se usa en el while para obtener las canciones la usaba también en el foreach
 
Última edição:
Hola, había salido y por eso no pude contestar.
PHP:
<?php
$path = '/home/xxx/public_html/mp3/Musica';
$dir = dir($path);
$songs = array();
// cambie "$song" por "$sng" para ver si ese era el problema
while($sng = $dir->read()){
 
   if ( ! in_array($sng, array('.', '..', 'index.php')) )
    {
            $songs[filectime($sng)] = $sng;
    }
}
// agregue lo de "$dir->close()", me lo había olvidado
$dir->close();

krsort($songs);

foreach($songs as $song)
{
echo '<a href="'.$song.'">'.$song.'</a>';
}
Prueba así, tal vez era porque la variable $song que se usa en el while para obtener las canciones la usaba también en el foreach

Ok, muchas gracias amigo.

Hola, había salido y por eso no pude contestar.
PHP:
<?php
$path = '/home/xxx/public_html/mp3/Musica';
$dir = dir($path);
$songs = array();
// cambie "$song" por "$sng" para ver si ese era el problema
while($sng = $dir->read()){
 
   if ( ! in_array($sng, array('.', '..', 'index.php')) )
    {
            $songs[filectime($sng)] = $sng;
    }
}
// agregue lo de "$dir->close()", me lo había olvidado
$dir->close();

krsort($songs);

foreach($songs as $song)
{
echo '<a href="'.$song.'">'.$song.'</a>';
}
Prueba así, tal vez era porque la variable $song que se usa en el while para obtener las canciones la usaba también en el foreach

O espera nose que pasa que no me muestra todos los mp3, ocea solo muestra algunos como si estuviera siguiendo algun filtro o algo. algo raro.
 

Tópicos similares

Voltar
Topo