Page 1 sur 1

Générer une playlist Winamp

Posté : 31 mars 2006, 21:26
par mario
Liste des fichiers issue d'un ARRAY
<?php
/*
   Générer une playlist WinAMP
   Source: http://mario.monsiteinfo.info
*/
define('FICHIER', 'playlist.m3u'); // nom du fichier m3u à générer
define('ENVOI_NAV', TRUE); // TRUE: ouverture de la playlist dans le navigateur

$tab_mp3 = array('goldorak.mp3', 'albator.mp3', 'casimir.mp3', 'gogogadget.mp3',
'tom.mp3', 'flam.mp3', 'abeille.mp3', 'k2k.mp3'); // Noms des fichiers

$contenu = '';
foreach($tab_mp3 AS $fichier){ // parcours le tableau
    $contenu.= $fichier."\n"; // stocke le nom du fichier et un retour à la ligne
}

if ($fp = fopen(FICHIER, 'w+')){ // ouvre le fichier en mode écriture et écrasement de données
    fwrite($fp, $contenu); // écrit la liste des fichiers
    fclose($fp); // ferme le fichier

    if (ENVOI_NAV == TRUE){
        header('Content-Type: application/octet-stream');
        header('Content-disposition: attachment; filename="'.FICHIER.'"');
        readfile(FICHIER); // envoi le fichier au navigateur
    }
}
else
{
    echo 'La playlist n\'a pas pu être générée.';
}
?>

Liste des fichiers issue d'une table MySQL

Le visiteur a la possibilité de voir la liste des titres disponibles et de les sélectionner pour générer la playlist

La structure de la table:

Code : Tout sélectionner

-- -- Structure de la table `fichiers` -- CREATE TABLE `fichiers` ( `id` int(10) unsigned NOT NULL auto_increment, `interprete` varchar(25) NOT NULL, `titre` varchar(60) NOT NULL, `fichier` varchar(40) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Contenu de la table `fichiers` -- INSERT INTO `fichiers` VALUES (1, 'Noam', 'Goldorak (version originale)', 'goldorak.mp3'); INSERT INTO `fichiers` VALUES (2, 'Jean-Pierre Savelli', 'Albator, le Corsaire de l''Espace', 'albator.mp3'); INSERT INTO `fichiers` VALUES (3, 'Annie Germain', 'L''île aux enfants', 'casimir.mp3'); INSERT INTO `fichiers` VALUES (4, 'Inconnu', 'Inspecteur Gadget', 'gogogadget.mp3'); INSERT INTO `fichiers` VALUES (5, 'Inconnu', 'Tom Sawyer', 'tom.mp3'); INSERT INTO `fichiers` VALUES (6, 'Inconnu', 'La chevauchée du Capitaine Flam', 'flam.mp3'); INSERT INTO `fichiers` VALUES (7, 'Nadine Delanoe et Brigitt', 'Maya l''abeille', 'abeille.mp3'); INSERT INTO `fichiers` VALUES (8, 'Inconnu', 'K 2000 Instrumental', 'k2k.mp3');
Le script:
<?php
/*
   Générer une playlist WinAMP
   Source: http://mario.monsiteinfo.info
*/
define('MYSQLSRV', 'localhost');    // serveur MySQL
define('MYSQLUSR', 'root');         // utilisateur MySQL
define('MYSQLPSW', '');             // mot de passe MySQL
define('MYSQLDB', 'exemple');       // base de donnée MySQL
define('FICHIER', 'playlist.m3u');  // nom du fichier m3u à générer

// Connexion MySQL
mysql_connect(MYSQLSRV, MYSQLUSR, MYSQLPSW) or die(mysql_error());
mysql_select_db(MYSQLDB) or die(mysql_error());

// Traitement de la sélection
if ( isset($_POST['choix']) ){ // Si une sélection a été faite
    $nb_case = count($_POST['choix']); // Compte le nombre de sélection

    // Construction dynamique de la requête MySQL
    $sql = "SELECT fichier FROM fichiers WHERE id IN (";
    $i = 0; // Variable pour détecter le dernier fichier sélectionné
    foreach($_POST['choix'] as $id){
        $sql.= $id;
        $i++;
        if ($i != $nb_case) $sql.= ','; // Si nous ne sommes pas arrivé au dernier
                                        // fichier sélectionné, ajoute une ,
    }
    $sql.= ") ORDER BY interprete";
    $req = mysql_query($sql) or die(mysql_error());

    $contenu = ''; // initialise une variable pour stocker le contenu du fichier PLS
    while($ligne = mysql_fetch_assoc($req)){
        $contenu.= $ligne['fichier']."\n";
    }
    if ($fp = fopen(FICHIER, 'w+')){ // ouvre le fichier en mode écriture et écrasement de données
        fwrite($fp, $contenu); // écrit la liste des fichiers
        fclose($fp); // ferme le fichier
        header('Content-Type: application/octet-stream');
        header('Content-disposition: attachment; filename="'.FICHIER.'"');
        readfile(FICHIER); // envoi le fichier au navigateur
        exit();
    }
}
// -----------------------------------------------------------------------------

// Affichage de la liste des titres
$sql = "SELECT id, interprete, titre FROM fichiers ORDER BY interprete";
$req = mysql_query($sql) or die(mysql_error());


if (mysql_num_rows($req) !== 0){
    ?>
    <form name="selection" method="POST">
    <table cellspacing="2" cellpadding="5">
    <tr><th>Interprète</th><th>Titre</th><th>Sélection</th></tr>
    <?php
    while($ligne = mysql_fetch_assoc($req)){
        echo '<tr><td>'.$ligne['interprete'].'</td><td>'.$ligne['titre'].'</td>';
        echo '<td><input type="checkbox" name="choix[]" value="'.$ligne['id'].'"/></td></tr>';
    }
    ?>
    <tr><td colspan="3" align="center"><input type="submit" value="Télécharger la playlist"/></td></tr>
    </table>
    </form>
    <?php
}
else
{
  echo 'Aucun titre disponible';
}
?>

Posté : 31 mars 2006, 22:27
par naholyr
lay mp3 say lemal

Posté : 02 avr. 2006, 15:02
par mario
J'ai ajouté la version MySQL :P
Particularités:
  • Requête dynamique avec utilisation de l'opérateur IN (MySQL)
    Traitement des cases à cocher (PHP)