Lokale bestanden laden m.b.v. PHP en MySQL
Ik heb zo een beetje op internet gezocht of er iets te vinden is over de mogelijkheid tot lokale bestanden laden m.b.v. PHP.
Wat ik dus wil maken is een webapplicatie waar ik mijn lokale muziekbestanden kan toevoegen en d.m.v. deze webapplicatie het kan opsplitsen in groepen en dus ook muziek kan zoeken e.d.
Hierbij zal ik soieso MySQL moeten gebruiken om de url's van mijn muziek in de database te zetten, zodat ik het daaruit kan halen.
Is er een mogelijkheid om dit te maken? Zo ja, dan graag even een linkje of wat uitleg over hoe ik lokale bestanden kan laden.
mvg, Jeroen
Draait de webserver ook lokaal?
Ben er overigens momenteel ook achter dat je met de readdir functie bestanden kan uitlezen, echter is dit niet voldoende voor wat mijn bedoeling is.
Waarom wil je dit? Kun je dit niet beter gewoon in een XML playlist laden?
Wil jij je muziek delen met de rest van de wereld of?
Jurgen schreef op 15.04.2009 11:20:
Waarom wil je dit? Kun je dit niet beter gewoon in een XML playlist laden?
Ik had gewoon het idee om zoiets te maken voor mezelf, aangezien ik zoveel muziek heb, zodat ik het makkelijk kan sorteren en vinden. En XML is niet echt mijn sterkste punt moet ik zeggen.
Dennis Mertens schreef op 15.04.2009 11:21:
Ik snap je bedoeling niet echt?
Wil jij je muziek delen met de rest van de wereld of?
Wil jij je muziek delen met de rest van de wereld of?
Nee, het is puur voor mezelf, het moet gewoon lokaal draaien.
Ik heb wel is ooit zoiets gehad van winamp DJ ofzoiets. Daar kon je andere mensen naar jou radio laten luisteren, maar dit is niet wat ik nu wil maken.
Ik wil dus gewoon een webapplicatie waar ik mijn muziek kan zoeken m.b.v. een zoekfunctie van MySQL en verder dat mijn applicatie mijn muziek sorteert in mappen.
En dus als ik een nummertje heb gevonden, dat ik hier dan op klik en deze dan begint af te spelen met bijvoorbeeld WMP.
Gewijzigd op 01/01/1970 01:00:00 door Jeroen van Rooij
Lokaal zal dat wel lukken.
Indien de muziek op de server staat, zal het ook lukken.
Lees dit eens, het is (topic van een aantal dagen geleden) vrij gelijkaardig aan jouw vraag.
http://phphulp.nl/forum/showtopic.php?id=63029&cat=1&replies=0
Je vindt daar onder andere deze link klik
Laat maar weten of dit al lukt en of er nog vragen zijn.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Wat ik nu heb is een lijst met de muziekbestanden die ik uit een map haal. Verder is dit alleen nog maar een lijstje (hier heb ik nu ook al een link achter zitten.)
Echter werkt dit in IE8 wel, hij opent het muziekbestand vanuit mijn lokale harde schijf en opent deze met Quicktime. Maar op het moment dat er in de naam van het bestand bijvoorbeeld haakjes () staan, dan opent IE ze niet.
Met firefox zegt ie iets heel anders, FF zegt het volgende: "Firefox weet niet hoe het dit adres moet openen, omdat het protocol (e) met geen enkel programma geassocieerd is."
Met de (e) bedoelt FF mijn Harde schijf 'E:\'.
Ik ben dus een klein beetje op weg, maar het werkt in IE wel en FF niet. En dan in IE dus nog het probleem met haakjes e.d.
Iemand anders misschien nog een idee?
Hier eventueel mijn code:
Code (php)
<a href=''></a><br>
<EMBED src="" width=72 height=25 type=audio/mpeg volume="100%" loop="true" autostart="true"></EMBED>
Wat ik zou doen; 'importmap' -> alle bestanden uitlezen -> alle ID3 informatie uitlezen -> opslaan in de database -> alle bestanden die uitgelezen zijn als 'hash'.mp3 netjes in een andere map opslaan.
Dan kan je leuk met je DB gaan zoeken/sorteren/overzichten/tracklists aan gaan maken. En met 1 druk op de knop 1 of meerdere mp3 bestanden in een flash-player inladen.
Ik ben namelijk zelf ook bezig met mijn eigen muzieksysteem, dat werkt allemaal al goed.
Wat ik kan:
- Exports van muzieklijsten naar mysql (incl metadata)
- Vervolgens, muziek titels browsen op m'n site, toevoegen aan een playlist, en een nieuwe playlist genereren.
- Aan de achterkant kan ik de muziekpartitie en eventuele sharename veranderen.
- geexporteerde muzieklijsten open ik met WMP, en hij start ze van m'n eigen pc op.
Draait als een trein!
Arjan Kapteijn schreef op 16.04.2009 09:27:
Ik zou zelf gewoon een flash-playertje pakken ipv met file:/// gaan werken. Daarnaast zou ik de voorkeur geven aan een glob() ipv een opendir/readdir.
Wat ik zou doen; 'importmap' -> alle bestanden uitlezen -> alle ID3 informatie uitlezen -> opslaan in de database -> alle bestanden die uitgelezen zijn als 'hash'.mp3 netjes in een andere map opslaan.
Dan kan je leuk met je DB gaan zoeken/sorteren/overzichten/tracklists aan gaan maken. En met 1 druk op de knop 1 of meerdere mp3 bestanden in een flash-player inladen.
Wat ik zou doen; 'importmap' -> alle bestanden uitlezen -> alle ID3 informatie uitlezen -> opslaan in de database -> alle bestanden die uitgelezen zijn als 'hash'.mp3 netjes in een andere map opslaan.
Dan kan je leuk met je DB gaan zoeken/sorteren/overzichten/tracklists aan gaan maken. En met 1 druk op de knop 1 of meerdere mp3 bestanden in een flash-player inladen.
Ik ga deze functies is even uitzoeken, bedankt voor je hulp!
Leon Kunst schreef op 16.04.2009 09:33:
Leuk!
Ik ben namelijk zelf ook bezig met mijn eigen muzieksysteem, dat werkt allemaal al goed.
Wat ik kan:
- Exports van muzieklijsten naar mysql (incl metadata)
- Vervolgens, muziek titels browsen op m'n site, toevoegen aan een playlist, en een nieuwe playlist genereren.
- Aan de achterkant kan ik de muziekpartitie en eventuele sharename veranderen.
- geexporteerde muzieklijsten open ik met WMP, en hij start ze van m'n eigen pc op.
Draait als een trein!
Ik ben namelijk zelf ook bezig met mijn eigen muzieksysteem, dat werkt allemaal al goed.
Wat ik kan:
- Exports van muzieklijsten naar mysql (incl metadata)
- Vervolgens, muziek titels browsen op m'n site, toevoegen aan een playlist, en een nieuwe playlist genereren.
- Aan de achterkant kan ik de muziekpartitie en eventuele sharename veranderen.
- geexporteerde muzieklijsten open ik met WMP, en hij start ze van m'n eigen pc op.
Draait als een trein!
En hoe heb jij dit gemaakt dan als ik vragen mag?
Allereerst heb ik al mijn muziek geexporteerd naar een .csv
met behulp van (ik geloof) UltraTag
Daarna heb ik een functie geschreven die die CSV splitst, en in de database zet.
(deze functie checkt tevens of er ongeldige regels zijn, etc etc, en krijg ik mooi foutrapport van).
In het CSV bestand staat ook het lokale pad naar de mp3tjes.
De driveletter echter wordt gestript bij het importeren naar de database.
De driverletter wordt tijdens het genereren van een m3u bestand op de site weer voor het pad aangeplakt. Dit omdat mijn driverletters wel eens willen veranderen.
Indien er gekozen wordt op de site, voor een: 'Network Export' dan, wordt de sharename en pad gebruikt ipv de partitieletter.
Het toevoegen van de liedjes wordt gedaan middels ajax, deze wordt in een aparte tabel opgeslagen met je gebruikersID.
De volgorde van de liedjes die toegevoegd zijn, kun je voor het exporteren nog veranderen, ook middels ajax.
Een screenshot:
>> KLIK HIER VOOR SCREENSHOT <<
Alleen zou ik niet weten hoe ik het zou moeten doen, zoals jij het nu beschrijft heb ik geen idee hoe ik dat ook zou kunnen, helaas.
En om verder in te gaan op het ID3 gebeuren, het ziet er naar uit dat ik ID3 nog moet installeren d.m.v. de PEAR installer, nou heb ik hier naar gezocht, maar kom er niet echt uit waar ik die nou moet vinden, heb zitten googlen, maar daar kan ik ook niks vinden.
Nu zit ik dus eigenlijk vast. Misschien is het allemaal wat te hoog gegrepen voor mij, maar toch zou ik graag hiermee verder willen.
Ook heb ik gezocht voor wat tutorials over het ID3 gebeuren, maar dat was ook weinig succes.
Leon Kunst, schrijf even een tutje voor me ^^ Haha nee grapje.
Als iemand nog enig idee heeft, graag!
EDIT: Ik ben toch even verder gegaan met kijken hoe jij dit nou hebt gedaan Leon Kunst, ik dacht van tevoren dat UltraTag een functie was in PHP, maar nu zie ik dat het een programma is.
Als ik mijn muziek nou exporteer naar een csv bestand weet ik helaas niet wat voor script ik moet schrijven om het naar de database te schrijven.
Ook weet ik niet welke onderdelen ik moet selecteren bij het exporteren naar een csv bestand.
Gewijzigd op 01/01/1970 01:00:00 door Jeroen van Rooij
Allereerst, moet je het exporteren met; TABS gescheiden waarden (mp3tjes hebben namelijk wel eens een komma in de bestandsnaam, hierdoor loopt je script in't honderd.
Je moet dus exploden op de Tab ( \T )
Daarna exploden op de komma, en dan krijg je een array terug, en die pleur je in de database met behulp van een foreach
Ik heb het hele script wel thuis, maar het probleem is, dat ik daar een uitgebreide foutafhandeling in heb zitten, die geeft dan per geimporteerde regel de (eventuele) fout aan. met regelnr erbij, en het aantal foute regels geeft ie ook weer.
Zo zie je bijv:
15 regels van de 30 geimporteerd. (15 mislukt)
Als het niet noodzakelijk is, zou je een importfunctie al kunnen maken met een paar regels code.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?
// Content uit het bestand halen
$content = file_get_contents('geupload.csv');
$content = explode("\n", $content);
$content = array_slice($content, 1, -1);
// Voor elke regel de volgende handelingen uitvoeren
foreach ($content as $regel)
{
// $regel exploden op de tab
$stuk = explode("\t", $regel);
$bestandsnaam = $stuk[0];
if ((array_key_exists(1, $stuk)) && ($stuk[1] != ''))
$titel = str_replace("\"", "", $stuk[1]);
else
$titel = '';
if ((array_key_exists(2, $stuk)) && ($stuk[2] != ''))
$artiest = str_replace("\"", "", $stuk[2]);
else
$artiest = '';
if ((array_key_exists(3, $stuk)) && ($stuk[3] != ''))
$album = str_replace("\"", "", $stuk[3]);
else
$album = '';
if ((array_key_exists(4, $stuk)) && ($stuk[4] != ''))
$genre = str_replace("\"", "", $stuk[4]);
else
$genre = '';
if ((array_key_exists(5, $stuk)) && ($stuk[5] != ''))
$jaar = str_replace("\"", "", $stuk[5]);
else
$jaar = 'NULL';
if ((array_key_exists(6, $stuk)) && ($stuk[6] != ''))
$tracknummer = str_replace("\"", "", $stuk[6]);
else
$tracknummer = 'NULL';
if ((array_key_exists(7, $stuk)) && ($stuk[7] != ''))
$bitrate = str_replace("\"", "", $stuk[7]);
else
$bitrate = 'NULL';
if ((array_key_exists(8, $stuk)) && ($stuk[8] != ''))
$duur = str_replace("\"", "", $stuk[8]);
else
$duur = 'NULL';
if ((array_key_exists(9, $stuk)) && ($stuk[9] != ''))
{
$bestandslocatie = str_replace("\"", "", $stuk[9]);
$bestandslocatie_zonder_drive = substr($bestandslocatie, 3);
}
else
$bestandslocatie_zonder_drive = '';
$insert_music_query = mysql_query("
INSERT INTO muziek (bestandsnaam, titel, artiest, album, genre, jaar, tracknummer, bitrate, duur, bestandslocatie, add_date)
VALUES (
'".mysql_real_escape_string($bestandsnaam)."',
'".mysql_real_escape_string($titel)."',
'".mysql_real_escape_string($artiest)."',
'".mysql_real_escape_string($album)."',
'".mysql_real_escape_string($genre)."',
".mysql_real_escape_string($jaar).",
'".mysql_real_escape_string($tracknummer)."',
'".mysql_real_escape_string($bitrate)."',
'".mysql_real_escape_string($duur)."',
'".mysql_real_escape_string($bestandslocatie_zonder_drive)."',
NOW())
");
}
?>
// Content uit het bestand halen
$content = file_get_contents('geupload.csv');
$content = explode("\n", $content);
$content = array_slice($content, 1, -1);
// Voor elke regel de volgende handelingen uitvoeren
foreach ($content as $regel)
{
// $regel exploden op de tab
$stuk = explode("\t", $regel);
$bestandsnaam = $stuk[0];
if ((array_key_exists(1, $stuk)) && ($stuk[1] != ''))
$titel = str_replace("\"", "", $stuk[1]);
else
$titel = '';
if ((array_key_exists(2, $stuk)) && ($stuk[2] != ''))
$artiest = str_replace("\"", "", $stuk[2]);
else
$artiest = '';
if ((array_key_exists(3, $stuk)) && ($stuk[3] != ''))
$album = str_replace("\"", "", $stuk[3]);
else
$album = '';
if ((array_key_exists(4, $stuk)) && ($stuk[4] != ''))
$genre = str_replace("\"", "", $stuk[4]);
else
$genre = '';
if ((array_key_exists(5, $stuk)) && ($stuk[5] != ''))
$jaar = str_replace("\"", "", $stuk[5]);
else
$jaar = 'NULL';
if ((array_key_exists(6, $stuk)) && ($stuk[6] != ''))
$tracknummer = str_replace("\"", "", $stuk[6]);
else
$tracknummer = 'NULL';
if ((array_key_exists(7, $stuk)) && ($stuk[7] != ''))
$bitrate = str_replace("\"", "", $stuk[7]);
else
$bitrate = 'NULL';
if ((array_key_exists(8, $stuk)) && ($stuk[8] != ''))
$duur = str_replace("\"", "", $stuk[8]);
else
$duur = 'NULL';
if ((array_key_exists(9, $stuk)) && ($stuk[9] != ''))
{
$bestandslocatie = str_replace("\"", "", $stuk[9]);
$bestandslocatie_zonder_drive = substr($bestandslocatie, 3);
}
else
$bestandslocatie_zonder_drive = '';
$insert_music_query = mysql_query("
INSERT INTO muziek (bestandsnaam, titel, artiest, album, genre, jaar, tracknummer, bitrate, duur, bestandslocatie, add_date)
VALUES (
'".mysql_real_escape_string($bestandsnaam)."',
'".mysql_real_escape_string($titel)."',
'".mysql_real_escape_string($artiest)."',
'".mysql_real_escape_string($album)."',
'".mysql_real_escape_string($genre)."',
".mysql_real_escape_string($jaar).",
'".mysql_real_escape_string($tracknummer)."',
'".mysql_real_escape_string($bitrate)."',
'".mysql_real_escape_string($duur)."',
'".mysql_real_escape_string($bestandslocatie_zonder_drive)."',
NOW())
");
}
?>
Kheb even wat gesloopt uit m'n script,
Ik weet niet of er hierdoor syntaxfouten in staan, want ik heb het niet getest.
Probeer maar even...
De velden moeten wel zo zijn:
Bestandsnaam,Titel,Artiest,Album,Genre,Jaar,Tracknummer,Bitrate,Duur,Bestandslocatie
dit houd in geen spatie tussen de komma's...
suc6!
Gewijzigd op 01/01/1970 01:00:00 door Leon Kunst
fgetcsv vermoed ik, maar de keuze is aan jou.
Persoonlijk zou ik liever niet met externe programmas werken omdat je dan handmatig allemaal acties moet gaan uitvoeren ipv dat je de boel lekker automatiseert.
Je kunt dan beter kijken naar Persoonlijk zou ik liever niet met externe programmas werken omdat je dan handmatig allemaal acties moet gaan uitvoeren ipv dat je de boel lekker automatiseert.
Ik ga dit alles even bekijken, mocht ik nog vragen hebben dan hoop ik ze hier te kunnen stellen.
Nogmaals bedankt!
EDIT: Je script werkt wel, alleen pakt ie alleen het laatste record van het csv bestand, de rest importeert het script niet in de database. Enig idee waar dit aan ligt?
Gewijzigd op 01/01/1970 01:00:00 door Jeroen van Rooij
kheb het script even aangepast.
Het sluithaakje moest onderaan...
mocht het nog niet werken, meld het dan even :)
Geweldig, nu kan ik verder, alleen zal ik dalijk waarschijnlijk tegen hetzelfde probleem aanlopen als ik eerder had.
Hoe krijg ik die files geopent met bijvoorbeeld WMP? Is hier een speciale code voor nodig?
hierin moet je de tabel uitlezen waarin de geselecteerde nummers staan.
Dit ziet er zo uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?
// Bestandsnaam genereren
$filename = 'Muziek_-_'.date("d-m-Y");
// Headers aanmaken
header("Content-Type: audio/mpegurl");
header("Content-Disposition: attachment; filename=".$filename.".m3u");
print '#EXTM3U'."\n";
// En dan hier zorgen dat je met behulp van bepaalde querie, het er zo uit komt te zien:
?>
// Bestandsnaam genereren
$filename = 'Muziek_-_'.date("d-m-Y");
// Headers aanmaken
header("Content-Type: audio/mpegurl");
header("Content-Disposition: attachment; filename=".$filename.".m3u");
print '#EXTM3U'."\n";
// En dan hier zorgen dat je met behulp van bepaalde querie, het er zo uit komt te zien:
?>
Like this dus:
#EXTINF:0,11 D-Block & S-Te-Fan - Kingdom.mp3
K:\Hardstyle Top 40 2007, 2008 en 2009\September 2008\FearFm Hardstyle Top 40 09 September\11 D-Block & S-Te-Fan - Kingdom.mp3
#EXTINF:0,07 Project One - Fantasy Or Reality.mp3
K:\Hardstyle Top 40 2007, 2008 en 2009\September 2008\FearFm Hardstyle Top 40 09 September\07 Project One - Fantasy Or Reality.mp3
#EXTINF:0,03 Davide Sonar - All Of Me.mp3
K:\Hardstyle Top 40 2007, 2008 en 2009\September 2008\FearFm Hardstyle Top 40 09 September\03 Davide Sonar - All Of Me.mp3
Ik ga weer even verder knutselen haha!
Beetje offtopic, maar is dit dan vervolgens ook mogelijk met dingen anders dan muziek, zoals filmpjes etc? Zou het fijner vinden om door mijn files te surfen in mijn eigen ontworpen UI. :)