Advanced mp3 listeur

Contenu du snippet

Cette page permet de crée un superbe liste de tous vos MP3 a condition qu'il soit regroupé dans un dossier et que chaques album soit dans des sous dossier...
Cette liste comprend
Un index de tout les album liés avec le détail de l'album
Un lien pour chaques chansons
Un lien pour chaques album Générant la play liste de contenu de cet album
L'integration MySQl qui permet d'enregistrer les visite de votre page ainsi que les telechargement des MP3
La détéction des nouveaux album (ajoutées il y a moins de 31 jours)
Chaque fichier MP3 est acompagné de sa taille
et infin en bas de page le nombre total d'MP3 est affiché ainsi que la taille total occupée

de plus les page générée respectent le standart HTML 4 et les lien sont tout encodés selon la norme.

Voici la table a crée :

# Base de données: `stats`
# --------------------------------------------------------

#
# Structure de la table `mp3`
#

CREATE TABLE mp3 (
id int(11) NOT NULL auto_increment,
user varchar(255) NOT NULL default '',
nav varchar(255) NOT NULL default '',
date varchar(19) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Structure de la table `mp3dwl`
#

CREATE TABLE mp3dwl (
id int(11) NOT NULL auto_increment,
src varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
user varchar(255) NOT NULL default '',
date varchar(19) default NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;

A oui j'oubliai votre dossier MP3 doit être lie sous APache en tant que Http://localhost/mp3/ sinon sa marche pas a moins que vous ne changiez tous se qui peut etre long, il faut donc crée une redirection vers votre dossier mp3 qui est /mp3/.

Source / Exemple :


<?
function datefr(){//donne la date du jour en français
        $jj = date("w"); //jour de 0 à 6; "l"-->jour en anglais Sunday to Saturday
        $mm = date("n"); //mois de 1 a 12; "F"-->nom en anglais
        $dd = date("d"); //date
        $aa = date("Y"); //annee
        $f_jour = array( "Dimanche","Lundi" , "Mardi" , "Mercredi" , "Jeudi" , "Vendredi" , "Samedi" );
        $nb_jour = count($f_jour);
        $f_mois = array ( "Janvier" , "Février" , "Mars" , "Avril" , "Mai" , "Juin" , "Juillet" , "Août" , "Septembre" , "Octobre" , "Novembre" , "Décembre" );
        $nb_mois = count($f_mois);
        return ($f_jour[$jj]." ".$dd." ".$f_mois[$mm-1]." ".$aa);
    }//end function
function SConv($oct){//convertion des tailes de fichiers
        if ($oct < 1024){
          $tmp = number_format($oct,2,',',' ');
        }elseif ($oct > 1024 && $oct < bcpow(1024,2)){
          $tmp = number_format($oct / 1024,2,',',' ')." Ko";
        }elseif ($oct > bcpow(1024,2) && $oct < bcpow(1024,3)){
          $tmp = number_format($oct / bcpow(1024,2),2,',',' ')." Mo";
        }elseif ($oct > bcpow(1024,3) && $oct < bcpow(1024,4)){
          $tmp = number_format($oct / bcpow(1024,3),2,',',' ')." Go";
        }
        return $tmp;
    }//end function
function diff_date($jour , $mois , $an , $jour2 , $mois2 , $an2){ 
        $date = mktime(0, 0, 0, $mois, $jour, $an); 
        $date2 = mktime(0, 0, 0, $mois2, $jour2, $an2); 
        $diff = floor(($date - $date2) / (3600 * 24)); 
        return $diff;
     }//end function
function index($thedir){//index de tout les artistes (dossiers)
        global $Altr;
        $rep=@opendir($thedir);
        while($file=@readdir($rep)){
          if($file != '..' && $file !='.' && $file !=''){
            $emp="$thedir/$file";
            if(is_dir($file) | is_dir($emp)){//uniquement si un dossier
              $atmp=str_replace(" ","",$file);//lien encré
              $atmp=strtolower($atmp);//lien encré
              $femp=filemtime($emp);//verifi si le dossier a mois de 31 jours...
              $gr=diff_date(date("d"),date("m"),date("Y"),date("d",$femp),date("m",$femp),date("Y",$femp));
              if($gr<31){$gr="<img src=\"/icons/new.gif\" alt=\"Nouveautée\"  align=\"bottom\">";}else{$gr="";};
              $Nltr=strtoupper(substr($file, 0, 1));//servira a comparer la lettre actuelle avec la precendente
              if($Altr==""){//crée un tableau par "tri" (hum!) alphabetique
                $itmp.="   <table width=100% border=0>\n    <tr>\n     <td width=3%>$Nltr</td>\n     <td width=96%>\n      ";
                $Altr=$Nltr;
              }elseif($Altr!=$Nltr){
                $itmp=substr($itmp, 0,strlen($itmp)-1);//on enleve le dernier '-'
                $itmp.="\n     </td>\n    </tr>\n    <tr>\n     <td width=3%>$Nltr</td>\n     <td width=96%>\n      ";
                $Altr=$Nltr;
              }
              //if($issub){$tmpmgs="$thedir\\";};//au cas ou on est dans une procedure sub alterne
              $itmp.="<a href=\"#$atmp\"><font face=\"Georgia,Times New Roman\">$tmpmgs$file</font></a>$gr".subindex($emp)."-";
            }
          }
        }
        @closedir($rep);
        clearstatcache();//effac le cache des info du fichier (la taille si c un fichier ou dossier, etc)
        return $itmp;
    }//end function
function subindex($thedir){//index pour les sous dossier
        $rep=@opendir($thedir);
        while($file=@readdir($rep)){
          if($file != '..' && $file !='.' && $file !=''){
            $emp="$thedir/$file";
            if(is_dir($file) | is_dir($emp)){//uniquement si un dossier
              $atmp=str_replace(" ","",$file);//lien encré
              $atmp=strtolower($atmp);//lien encré
              //$Nltr=strtoupper(substr($file, 0, 1));//servira a comparer la lettre actuelle avec la precendente
              //if($issubà){$tmpmgs="$thedir\\";};//au cas ou on est dans une procedure sub alterne
              $itmp.="<a href=\"#$atmp\"><font face=\"Georgia,Times New Roman\">$file</font></a>".subindex($emp)."-";
            }
          }
        }
        @closedir($rep);
        clearstatcache();//effac le cache des info du fichier (la taille si c un fichier ou dossier, etc)
        if (strlen($itmp) > 0){return "(".substr($itmp, 0,strlen($itmp)-1).")";};
    }//end function
function listadir($thedir){//liste des dossier et fichier
        global $fcount, $tsize, $Altr;
        $rep=@opendir($thedir);
        while($file=@readdir($rep)){//tant qu'il y a des truc a lister
          if($file != '..' && $file !='.' && $file !=''){//evite les '.' et '..'
            $emp="$thedir/$file";
            if(is_dir($file) | is_dir($emp)){//si c un dossier
              $atmp=str_replace(" ","",$file);
              $atmp=strtolower($atmp);
              //$dtmp.="  <br>\n  <a href=\"?go=pl&name=".substr($emp, 5,strlen($emp)-5)."\"><font face=\"Georgia,Times New Roman\" size=+2 color=\"black\">- $file -</font></a><a name=\"$atmp\"><br>\n";
              $dtmp.="  <br>\n  <font face=\"Georgia,Times New Roman\"size=+2>- <a href=\"?playl=$emp\">$file</a> -</font><a name=\"$atmp\"><br>\n";
              //$dtmp.="  <br>\n  <font face=\"Georgia,Times New Roman\"size=+2>- $file - $gr</font><a name=\"$atmp\"><br>\n";
              $dtmp.=listadir($emp);
            }else{//si c un fichier
              $ext=strtolower(substr($file, strlen($file)-3, 3));
              if($ext=="mp3" | $ext=="wav" | $ext=="mid"){//que si c'est des Mp3
                if($emp=="/mp3/$file"){//Verifie que c'est bien dans divers...
                  $femp=filemtime($emp);//verifi si le dossier a mois de 31 jours...
                  $gr=diff_date(date("d"),date("m"),date("Y"),date("d",$femp),date("m",$femp),date("Y",$femp));
                  if($gr<31){$gr="<img src=\"/icons/new.gif\" alt=\"Nouveautée\"  align=\"bottom\"> - ";}else{$gr="";};
                }
                $ftmp.="  $gr<a href=\"?file=".urlencode($emp)."\">$file</a> - ".SConv(filesize($emp))."<br>\n";
                $tsize=filesize($emp) + $tsize;
                $fcount++;
              }
            }
          }
        }
        @closedir($rep);
        clearstatcache();//effac le cache des info du fichier (la taille si c un fichier ou dossier, etc)
        return $ftmp.$dtmp;
    }//end function
function PlayList($thedir){//liste des dossier et fichier
        $rep=@opendir($thedir);
        while($file=@readdir($rep)){//tant qu'il y a des truc a lister
          if($file != '..' && $file !='.' && $file !=''){//evite les '.' et '..'
            $emp="$thedir/$file";
            $ext=strtolower(substr($file, strlen($file)-3, 3));
            if($ext=="mp3" | $ext=="wav" | $ext=="mid"){$ftmp.="Http://localhost".str_replace(" ","%20",$thedir)."/".stripslashes(str_replace("+","%20",urlencode($file)))."\r\n";};
          }
        }
        @closedir($rep);
        clearstatcache();//effac le cache des info du fichier (la taille si c un fichier ou dossier, etc)
        return $ftmp;
    }//end function
function getmicrotime() {// Cette fonction récuperre l'heure en microsecondes
        list($usec, $sec) = explode(" ", microtime()); 
        return ($usec + $sec); 
    }//end function
function callback($buffer) {
 // header("Content-length:".strlen($buffer));
  return $buffer;}

$starttime = getmicrotime();

//se connecte a la DB
$base=@mysql_connect("localhost","common","");
@mysql_select_db("stats",$base);
If($file!=""){
  $file=stripslashes($file);
  $filen=basename($file);
  $filesrc=basename(dirname($file));
  $thedate=date("d-m-Y H:i:s");
  //enregistrement du dwl dans la DB
  @mysql_query("INSERT INTO mp3dwl SET src='$filesrc',name='$filen',user='$REMOTE_ADDR - ".gethostbyaddr($REMOTE_ADDR)."',date='$thedate'",$base);//enregistre tt les info dans la DB
  @mysql_close($base);
  header("location: ".$file);//redirection vers le fichier
}elseif($playl!=""){
  header('Content-Type: application/octetstream');
  header("Last-Modified: ".date("D, d M Y H:i:s T", 1));
  header("Accept-Ranges: bytes");
  header('Content-Disposition: inline; filename='.basename($playl).'.m3u"');
  header('Pragma: no-cache');
  print(PlayList("$playl"));
}else{
//envoi les info dans les header
  header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  header("Cache-Control: no-cache, must-revalidate");
  header("Pragma: no-cache");
  //enregistre le passage du visiteur
  @mysql_query("INSERT INTO mp3 SET user='$REMOTE_ADDR - ".gethostbyaddr($REMOTE_ADDR)."',nav='$HTTP_USER_AGENT',date='".date("d-m-Y H:i:s")."'",$base);//enregistre tt les info du visiteur dans la DB
  @mysql_close($base);
?>
<!-- Debut du fichier (page générée le <? print(date('d/m/Y à H:i',time())); ?>) -->
<!-- Origine : <? print("Http://".$HTTP_HOST.dirname($PHP_SELF)); ?> -->
<!-- Votre IP : <? print($REMOTE_ADDR); ?> -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="fr">
<head>
 <title>THE-DARCKSIDE : Liste des Mp3 <? print("le ".date('d/m/Y à H:i',time())); ?></title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <meta name=Generator content="OverDarck PHP Lists Générator v1.5">
 <link rel="stylesheet" href="/mp3.css" type="text/css">
</head>
<body bgcolor=#FFFFFF link=#990033 vlink=#990033 alink=#990033>
 <center>
  <p align center><font face="Georgia,Times New Roman"size=+1><u>Voici la liste exhaustive de toute ma musique :</u><br></font></p>
  <table border=0 cellpadding=1 cellspacing=0 width=400>
   <tr bgcolor=#990033 nowrap>
    <td bgcolor=#990033 nowrap> 
     <table border=0 bgcolor=#FFFFCC bordercolor=#000000 cellpadding=2 cellspacing=0 width=100% height=100%>
      <tr nowrap>
       <td nowrap>
        <p><font face="Georgia,Times New Roman" size="-3"><u>Infos :</u></font></p>
       </td>
      </tr>
      <tr nowrap> 
       <td nowrap> 
        <p><font face="Georgia,Times New Roman"size=-3>Le chargement de la liste complette peut prendre plusieurs minutes...<!--<br>Tout les lien comprenant une lettre accentuée (éèàêëâäôöñç) ne sont pas valides...!--><br>Mes MP3 sont majoritairements codés en 192Kbp pour conserver une qualitée CD...</font></p>
       </td>
      </tr>
     </table>
    </td>
   </tr>
  </table>
 </center>
 <p align="left">
  <font face="Georgia,Times New Roman">
<? 
  $strtmp=index(dirname($PHP_SELF));
  print(substr($strtmp, 0,strlen($strtmp)-1)."\n     </td>\n    </tr>\n   </table>\n"); 
?>
  </font>
 </p>
 <p align="center">
  <br>
  <font face="Georgia,Times New Roman"size=+2>- Divers -</font><br>
<? print(listadir(dirname($PHP_SELF))); ?>
  <br>
  <? 
  print("Soit un total de <b>$fcount</b> Clips Audios se qui équivaut à ".Sconv($tsize)."<br>\n");
  $dattime=datefr().date(' à H:i',time());
  $exectime=str_replace(".",",",round((getmicrotime() - $starttime) * 100) / 100);
  print("  Page Génerée le $dattime en $exectime seconde(s)<br>\n  <font size=1>Et on dit merci qui ? Merci moa pr les MP3 et, merci <a href=\"http://www.php.net\" target=\"_new\">PHP</a> pr la liste bien sur !</font>");
  ?>
 </p>
</body>
</HTML>
<!-- Fin du fichier --><? } ?>

Conclusion :


Voial si vous y arrivé pas a le metre en place (vu que je l'est surtout crée pour moi et donc adaptée a l'utilitée que j'en avé) faite moi signe.
@++ et bonne prog a tous

PS pour l'icone nouveau qui est a placé dans le dossier /icons/ d'apache allez voir Http://overdarck.free.fr/new.gif

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.