.m3u Datei hochladen und via php in Datenbank eintragen

spikaner

Quereinsteiger @ php
Ich brauche mal wieder eure Hilfe, ich habe vor ein .m3u Datei via php hochzuladen und die Einträge + den Namen des Uploaders in eine Datenbank (MySql) zu schreiben nur wie stelle ich das an? Eine m3u datei stellt sich ja folgendermasen zusammen

#EXTM3U
#EXTINF:241,Van Halen - Jump
F:\MP3\V\Van Halen\Van Halen - Jump.mp3
#EXTINF:250,Vanilla Ninja - Blue Tattoo
F:\MP3\V\Vanilla Ninja\Vanilla Ninja - Blue Tattoo.mp3
.
.
wobei ich nur z.B. 241 (Länge in sekunden) Van Halen (Name der Gruppe) und Jump (Name des Liedes) benötige, in der DB sollte es dann folgendermasen eingetragen werden
ID | Länge | Gruppe | Liedname | Uploader

wäre über jede Hilfe dankbar

mfg Spikaner
 
So, ich bin jetzt soweit das mir die .txt datei richtig erstellt wird

PHP:
<?php // Lesen der Playlist
include ("config.php"); // darin steht der name der und mysql zugangsdaten mehr net $playlist =
$handle = fopen($playlist, "rb");
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 24200); // was es damit aufsich hat k.a. hab das so übernommen scheint aber zu gehen
}
fclose($handle);

// Anfang löschen kürzen usw.
$filename = "playlist.txt";
$newline = "\n";
$text1 = str_replace ("#EXTINF:","", $contents); // extinf entfernen
$text1 = str_replace (".mp3","", $text1); // .mp3 entfernen
$text1 = str_replace ("#EXTM3U", "" , $text1); // extm3u entfernen

// tracklänge in sec,Gruppe - Lied 
// \pfad\zum\lied\Interpret-titel       bleibt übrig 

$f=fopen($filename, "wb");
fputs($f, $text1);
fclose($f); // und wir zwischenspeichern das mal
$file = file($filename); // öffnen wieder zum weiterbearbeiten
$fp = fopen($filename, 'w');
foreach($file as $line){
  $line = trim($line);
  if(!empty($line)){ // löschen leere zeilen
    fwrite($fp, $line.$newline);
  }
}
fclose($fp); // speichern
$key = "\\"; // nun löschen wir noch zeilen die \ entenhaten
$fc=file($filename);
$f=fopen($filename,"w");
foreach($fc as $line)
{
     if (!strstr($line,$key)) //wir schauen nach \
           fputs($f,$line); //und geben die zeile zurück
}
fclose($f); // und speichern endgültig ab Tracklänge,Interpret - Lied 

echo "Liste erfolgreich erstellt jetzt fehlt nur noch der DB kram und anschliesendes löschen/leeren der datei playlist.txt";


// das soll jetzt hier hin aber k.a. wie ich das jetzt trennen soll sprich zahl vor , ist tracklänge in sek
// dann kommt der Interpret und nach - kommt das lied
// eingetragen sollte ID (automatisch), Tracklänge, Interpret, Lied werden (später noch erweitert auf Uploader)

php?>

und nun wollte ich mit hilfe von explode das in die DB eintragen aber irgendwie macht er mit allen was ich bis jetzt probiert habe nix darum habe ich das gleich weggelassen ^^

Würde mich über hilfe freuen da ich MYSQL/PHP technisch noch anfänger bin

mfg Spikaner
 
Warum schreibst du die Datensätze in eine Datei und nicht direkt in der Schleife in die Datenbank?
Dann sprast du dir das Auslesen der Textdatei....
Leg einfach in dem Foreach ein SQL INsert und leg da die Felder fest, die du in der jeweiligen Tabelle / jeweiligen Tabellen schreiben willst..
 
Habe es nun so gemacht.

PHP:
<?php
require ("config.php"); //darin steht der name der m3u datei / uploader und db zugang

// öffnen DB
$connect    = @mysql_connect($mysql_host, $mysql_user, $mysql_pw);
$db         = mysql_select_db($mysql_db,$connect) or die ("Kann die Datenbank nicht lesen!");

// Leerzeichen entfernen
function delSpace($foo)
{
    return str_replace(' ','',$foo);
}

// Filter uns
function saveSongs($line)
{
    // hier wird nur die Zeile mit #EXTINF rausgesucht #
    if ((strpos($line,"#EXTM3U") === false) && (strpos($line,".mp3") === false) && (strpos($line,".wav") === false) && (strpos($line,".wma") === false))
    {
        preg_match_all('%#EXTINF:(.*?),(.*?)-(.*)%msi',$line,$results,PREG_PATTERN_ORDER);
        $sql_query_insert    = "INSERT INTO mp3files (laenge,interpret,titel,uploader) VALUES ('".delSpace($results[1][0])."','".delSpace($results[2][0])."','".delSpace($results[3][0])."','".$uploader."')";
        mysql_query($sql_query_insert);
    }
}

// Playlist öffnen und speichern
if (file_exists($playlist))
{
    $handle = fopen($playlist, "rb");
    $contents = '';
    while (!feof($handle)) 
    {
      $line = fgets($handle); # zeile für zeile wird ausgelesen
      saveSongs($line);
    }
    fclose($handle);
}
else
{
    echo $playlist." nicht gefunden!<br />";
}

mysql_close($connect);
?>

config.php
PHP:
<?

$playlist = "playlist.m3u";

$uploader = "Spikaner";

$mysql_user = 'root';
$mysql_pw = '';
$mysql_host = 'localhost';
$mysql_db = 'mp3files';
?>

aber bei Titel wird mir meistens also nicht immer ein \r\n mit angehängt und der uploader wird gar nicht mit eingetragen woran könnte das jetzt liegen

mfg Spikaner
 
Zuletzt bearbeitet:
Habe aber jetzt ein großes Problem festgestellt alle Interpreten und Titel wo ein ' enthalten werden herausgefiltert und die Zeile bleibt leer. Wie kann ich nun ' z.B. durch ´ erstzen bevor das Script versucht es in die Datenbank einzutragen?

mfg Spikaner
 
Zurück