Avatar billede tanzaweb Nybegynder
17. august 2005 - 11:42 Der er 27 kommentarer og
1 løsning

download af MP3 fil

Hejsa

Jeg har brugt følgende script med succes:

$result = mysql_query("SELECT * FROM Musik_data WHERE id = '$id'") or die(mysql_error);
$row = mysql_fetch_array($result);
$fil = $row['Musik_sti'];
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename='" . basename($fil) . "'");
header("Content-Length: " . filesize($fil));
readfile($fil);

Men har nu fået det problem, at efter jeg har flyttet server og ændret scriptet til at finde musik numret efter id så downloader den ikke musik numret som en mp3 fil, men som eksemplet viser her: 'saftsuseme æ op og flyv.mp3' den sætter enkelt kolon omkring og det er åbenbart ikke selve filen hvad kan problemet være?
Avatar billede delphinarious Nybegynder
17. august 2005 - 12:40 #1
Jeg ved det ikke præcist, men prøv at ændre denne linie:
header("Content-Disposition: attachment; filename='" . basename($fil) . "'");
Til dette:
header("Content-Disposition: attachment; filename=" . basename($fil));
Avatar billede tanzaweb Nybegynder
17. august 2005 - 13:07 #2
Ja, nu hiver den filen ned uden enkelt kolon, men den hente den kun som en 636 byte file selv om filen fylder omkring 2 Mb.

Du kan prøve at se siden her som er en jeg laver for en ven. www.tonnyaabo.dk

Hvis jeg vil afspille numret fra forsiden så er der ikke noget problem og her bruger jeg dette korte script:

$result = mysql_query("SELECT * FROM musik_data");
                    $row=mysql_fetch_array($result); ?>
                    <font size="1"><?php echo $row['Date']; ?></font><br />
                    <?php echo $row['Musik_nummer']; ?><br />
                    <a href="<?php echo $row['Musik_sti']; ?>">Lyt</a> /
                    <a href="download.php?id=<?php echo $row['id']; ?>">Download</a>
Avatar billede delphinarious Nybegynder
17. august 2005 - 13:20 #3
Jeg fandt denne her på php.net, prøv evt. at bruge den i stedet.

header("Content-Type: application/octet-stream" );
header("Content-Size: ".filesize($fil));
header("Content-Disposition: attachment; filename=\"".basename($fil)."\"");

Men sig mig lige, hvad indeholder feltet "fil" i databasen? Har du med i det felt, at den skal gå ned music-folderen?

Alternativet, kan du jo lige prøve det af, med en fil der hverken indeholder specialtegn eller mellemrum. Altså f.eks. "test.mp3". :-)
Avatar billede delphinarious Nybegynder
17. august 2005 - 13:21 #4
Undskyld, jeg mente naturligvis hvad indeholder feltet "Musik_sti" i databasen?
Avatar billede delphinarious Nybegynder
17. august 2005 - 13:24 #5
Og det er jo så ligemeget... jeg kan regne ud at den indeholder stien fra roden, når nu dit "Lyt"-link virker, jo... :-)
Avatar billede tanzaweb Nybegynder
17. august 2005 - 13:37 #6
feltet Musik_sti i databasen indeholder stien til musik numret som kan se således ud.
/music/saftsuseme æ op og flyv.mp3 men jeg vil da lige prøve en uden speciel tegn.
Avatar billede delphinarious Nybegynder
17. august 2005 - 13:37 #7
Altså, jeg prøver lige at samle trådene i alle min indlæg. :-)

Prøv at udkommentere al kode i download.php, og indsæt i stedet følgende:

header("Content-Type: application/octet-stream" );
header("Content-Size: ".filesize("test.mp3"));
header("Content-Disposition: attachment; filename=\"test.mp3\"");

Og så læg en mp3-fil der hedder "test.mp3" i roden af dit site - altså i samme mappe som download.php ligger i. Check lige om det virker.
Avatar billede tanzaweb Nybegynder
17. august 2005 - 13:54 #8
Hmm, den giver det samme, download en fil af navnetmed kun på 610byte og ikke andet. der er garanteret et eller andet jeg/vi overser.
Avatar billede delphinarious Nybegynder
17. august 2005 - 13:57 #9
Bruger du det eksempel jeg skrev lidt før, med Content-Size i stedet for Content-Length?
Avatar billede tanzaweb Nybegynder
17. august 2005 - 14:01 #10
Ja, det kommer ud med samme resultat
Avatar billede delphinarious Nybegynder
17. august 2005 - 14:03 #11
Hm... Hvad er det for en server, du kører på?
Avatar billede delphinarious Nybegynder
17. august 2005 - 14:07 #12
Prøv at udkommenter alt andet og udskriv filesize("test.mp3"). Altså:

echo filesize("test.mp3");
Avatar billede tanzaweb Nybegynder
17. august 2005 - 14:07 #13
microsoft iis server
Avatar billede delphinarious Nybegynder
17. august 2005 - 14:10 #14
microsoft iis server >> Roden til alt ondt. Hvorfor i alverden kører PHP på en sådan? Jeg tester lige om det virker på en Unix-server...
Avatar billede tanzaweb Nybegynder
17. august 2005 - 14:12 #15
Vel, server firmaet køre alle deres servere som iis, så kan der også køre aps.net på samme server.
Avatar billede delphinarious Nybegynder
17. august 2005 - 14:18 #16
Asp.net?? Hvad skal man med det? *G* Var sq da fornuftigere at investere i et hotel der understøttede PHP 5. Men vi skulle ikke diskuttere religion.

På Linux-server fik jeg følgende til at virke:

header("Content-Type: application/octet-stream" );
header("Content-Size: ".filesize("test.mp3"));
header("Content-Disposition: attachment; filename=\"test.mp3\"");
readfile("test.mp3");
exit();
Avatar billede tanzaweb Nybegynder
17. august 2005 - 14:26 #17
jeg får så denne fejl:

<br />
<b>Warning</b>:  filesize(): Stat failed for /music/1103204713.mp3 (errno=2 - No such file or directory) in <b>F:\web\tonnyaabo.dk\download.php</b> on line <b>12</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at F:\web\tonnyaabo.dk\download.php:12) in <b>F:\web\tonnyaabo.dk\download.php</b> on line <b>12</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at F:\web\tonnyaabo.dk\download.php:12) in <b>Fd:\web\tonnyaabo.dk\download.php</b> on line <b>13</b><br />
<br />
<b>Warning</b>:  readfile(/music/1103204713.mp3): failed to open stream: No such file or directory in <b>F:\web\tonnyaabo.dk\download.php</b> on line <b>15</b><br />
Avatar billede delphinarious Nybegynder
17. august 2005 - 14:29 #18
Har du prøvet med test.mp3? Altså læg en mp3-fil der hedder "test.mp3" i roden af dit site, og indsæt scriptet præcist som jeg har skrevet det herover i download.php? Få lige det til at virke først.
Avatar billede tanzaweb Nybegynder
17. august 2005 - 14:33 #19
Ja, det har jeg prøvet men den kommer med denne fejl lige meget hvad filnavn jeg bruger.
Avatar billede delphinarious Nybegynder
17. august 2005 - 14:36 #20
Jamen altså... Så har du ikke fået udkommenteret alt det andet i download.php. Der skal KUN stå:

header("Content-Type: application/octet-stream" );
header("Content-Size: ".filesize("test.mp3"));
header("Content-Disposition: attachment; filename=\"test.mp3\"");
readfile("test.mp3");
exit();

Resten skal enten udkommenteres eller slettes helt. Den melder først og fremmest om en fil, vi ikke nævner i scriptet, samt om en fejl på linie 12, hvilken slet ikke bør eksistere... Så prøv lige at slet eller udkommenter alt andet i download.php, og prøv så igen.
Avatar billede tanzaweb Nybegynder
17. august 2005 - 14:36 #21
hej, i Opera,ser det ud til den bare forsøger at downloade en htm side istedet for selve fyle, og de få linjer passer måske med fil størrelsen?
Avatar billede tanzaweb Nybegynder
17. august 2005 - 14:47 #22
Den downloader filen men ikke som en mp3 fil, den kalder den bare download uden noget andet.
Avatar billede tanzaweb Nybegynder
17. august 2005 - 14:47 #23
men hvis jeg sætter mp3 bagefter så virker den
Avatar billede delphinarious Nybegynder
17. august 2005 - 14:48 #24
Ikke hos mig. Prøv selv: http://www.hooratios.dk/test.php - Den indeholder de 5 liniers kode, jeg har skrevet ovenover - og det virker fint i både Opera, IE og Mozilla...
Avatar billede tanzaweb Nybegynder
17. august 2005 - 15:00 #25
Som du ser bliver den rigtig file hentet, men bare ikke med det rigtige navn og endelse.


header("Content-Type: application/octet-stream" );
header("Content-Size: ".filesize("music/1103204713.mp3"));
header("Content-Disposition: attachment; filename=\"music/1103204713.mp3\"");
readfile("music/1103204713.mp3");
exit();

Samme som din bare et andet navn.

måske IIS, som jeg skal have fundet ud af.

Det mærkelige er jo også lidt at det andet så ikke virker for det er jo faktisk det samme bare med et script til at hente de forskellige filer.
Avatar billede tanzaweb Nybegynder
17. august 2005 - 15:02 #26
I opera downloader den rigtig nok med dit nu, så er det måske en opsætning i IE
Avatar billede delphinarious Nybegynder
17. august 2005 - 15:06 #27
Sæt denne i toppen af scriptet - altså som den første header:

header("Content-Encoding: AnyTrash");

Det skulle efter sigende løse problemet. Men jeg mærker ingen forskel. Det virkede for mig før jeg indsatte den, og det virker også efter.

Vi har snart bevæget os langt væk fra det, spørgsmålet egentligt gik ud på; at fjerne situations-tegnene omkring filnavnet, har vi ikke?
Avatar billede delphinarious Nybegynder
17. august 2005 - 15:09 #28
Når du først har fået det til at virke korrekt, hvor du selv angiver filnavnet, kan du jo blot smække database-kaldet på igen... Men vær lige obs på, om det gør en forskel, at der er "/" i starten af stien i databasen, og ikke når du har skrevet den manuelt. Jeg gør dette til et svar, og ser dit problem som løst.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester