You are not logged in.

  • Login

1

Monday, February 23rd 2009, 6:40pm

Download per Header - Leerzeichen

Hallo

Ich habe Download funktion mit Counter geschrieben
Problem ist, wenn ich die Leerzeichen nicht durch %20 ersetze, lade ich immer was anderes runter, nämlich mein php file

mein Code ist:

PHP Quellcode

1
2
3
4
5
6
7
8
include '../functions/connection.php';
include '../functions/php/doc1.php';
if($_GET['mp3id']){
	$downloadfile=sendquery("SELECT Downloadlink FROM mp3 WHERE ID=".$_GET['mp3id'], 3, 0);
	header("Content-Disposition: attachment; filename=".str_replace(" ", "%20", basename($downloadfile)));
	header("Content-Type: application/octet-stream");
	readfile(str_replace(" ", "%20", $downloadfile));
}


wenn ich str_replace weglasse, kommt das mp3 nicht an

wie kann ich es austricksen, damit es später in der datei nicht anstatt jeden leerzeichen %20 steht?

2

Monday, February 23rd 2009, 6:51pm

Propiers mal mit:

PHP Quellcode

1
header("Content-Disposition: attachment; filename=\"$downloadfile\"");

3

Monday, February 23rd 2009, 6:55pm

check

funktioniert

Danke Dir ^^

Moderator: Bitte keine Direktzitate!

4

Monday, February 23rd 2009, 8:58pm

Naja, doch irgendwie nicht :D

MP3 wird in textform geladen und da drin steht

HTML Code

1
2
3
4
<br />
<b>Warning</b>:  readfile() [<a href='function.readfile'>function.readfile</a>]: Unable to access data/mp3/2009_02/sds - sds.mp3 in <b>/var/www/web1/html/Rusicc/content/download.php</b> on line <b>8</b><br />
<br />
<b>Warning</b>:  readfile(data/mp3/2009_02/sds - sds.mp3) [<a href='function.readfile'>function.readfile</a>]: failed to open stream: No such file or directory in <b>/var/www/web1/html/Rusicc/content/download.php</b> on line <b>8</b><br />


die leerzeichen sind schuld X(

5

Monday, February 23rd 2009, 10:07pm

Speicher die MP3s doch einfach nicht unter ihrem richtigen Namen, sondern ihrem Hash o.ä. - Dann sollte er auch keine Probleme mit den Leerzeichen haben...

6

Tuesday, February 24th 2009, 12:23am

Schau dir mal ein paar URL Funktionen an.
http://de2.php.net/url


Wie BennyBunny geschrieben hat, könntest du base64 nutzen, dass könntest du dann auch wieder dekodieren, oder eben urlencode.

7

Tuesday, February 24th 2009, 12:06pm

ist mir jetzt ein bisschen unverständlich

wenn ich es so mache:

PHP Quellcode

1
2
3
header("Content-Disposition: attachment; filename=\"$downloadfile\"");
header("Content-Type: application/octet-stream");
readfile(urlencode($downloadfile));


bekomme ich:

PHP Quellcode

1
Unable to access data%2Fmp3%2F2009_02%2Fsds+-+sds.mp3


wenn ich es so mache:

PHP Quellcode

1
2
3
header("Content-Disposition: attachment; filename=\"$downloadfile\"");
header("Content-Type: application/octet-stream");
readfile(base64_encode($downloadfile));


bekomme ich:

PHP Quellcode

1
Unable to access ZGF0YS9tcDMvMjAwOV8wMi9hIC0gYS5tcDM=


irgendwas mache ich grundlegend falsch habe ich so das Gefühl :D

8

Tuesday, February 24th 2009, 12:27pm

versuchs mal so

PHP Quellcode

1
2
3
4
<?php 
$filename = "data/mp3/2009_02/".urlencode('sds - sds.mp3');
header("Content-Type: application/octetstream");
header("Content-Disposition: attachment; filename=".$filename."");


Der Artikel ist auch ganz interessant:
http://reeg.junetz.de/DSP/node16.html#SE…000000000000000

9

Tuesday, February 24th 2009, 12:51pm


wenn ich es so mache:

PHP Quellcode

1
2
3
header("Content-Disposition: attachment; filename=\"$downloadfile\"");
header("Content-Type: application/octet-stream");
readfile(base64_encode($downloadfile));


bekomme ich:

PHP Quellcode

1
Unable to access ZGF0YS9tcDMvMjAwOV8wMi9hIC0gYS5tcDM=


irgendwas mache ich grundlegend falsch habe ich so das Gefühl :D


Wenn du die Daten base64 codiert auslesen willst, musst du die Titel natürlich auch so abspeichern. Bisher sind die Daten ja unter ihrem eigentlichen Titel abgespeichert.
Hast du überhaupt Einfluss auf die Speicherung oder kannst du die Daten nur (aus)lesen?

10

Tuesday, February 24th 2009, 12:59pm

ne

Also, ich mache es mal ganz ausführlich. Vielleicht liegt der Fehler wo anders.

Ich habe folgende Ordnerstruktur:

root folder
---index.php
---data
------mp3
---------[Y_m] <- Ordner auf Datum basierend
------------mp3 Dateien
---content
------mp3_head.php (wird in index.php includet)
------download.php (wird nicht in index.php includet)

in der Datenbank liegt der Pfad in folgender Form vor: "data/mp3/####_##/*.mp3" (# = 1 Zahl, * = viele Zeichen)

ich habe schon grade versucht vorm Pfad ../ einzufügen, auch sinnlos

ich will dass beim Dialog, der angezeigt wird, nur "Interpret - Titel.mp3" angezeigt wird

dann muss ich wohl in

PHP Quellcode

1
header("Content-Disposition: attachment; filename=".substr($downloadfile,strrpos($downloadfile, "/")+1)."");

$downloadfile wie oben zuschneiden. Hat soweit ich verstehe keine Auswirkung.

Auswirkung hat die Funktion readfile()

PHP Quellcode

1
readfile($downloadfile);


die komischerweise alle / in _ umwandelt und dann die Datei runterlädt, die nur Fehlermeldung enthält....

This post has been edited 2 times, last edit by "Koljan777" (Feb 24th 2009, 1:13pm)


11

Tuesday, February 24th 2009, 1:24pm

Was du als filename angibst ist vollkommen egal. Das ist der Name, der dann beim Download steht, so wie du ihn haben möchtest.

PHP Quellcode

1
2
header("Content-Disposition: attachment; filename=DeinName.mp3");
header("Content-Type: application/octet-stream");


Bei der Funktion readfile musst du natürlich den korrekten Pfad zu deiner Datei angeben.


Wenn du deinen Dateinamen trennen möchtest kannst du dafür auch explode() nutzen.
Oder falls du PEAR Pakete installieren kannst, gibt es MP3 Paket womit du die MetaDaten auslesen kannst um an den Interpreten heranzukommen:
http://pear.php.net/package/MP3_Id/docs

Deshalb frage ich mich was hieran nicht funktioniert`?

PHP Quellcode

1
2
3
4
$filename = '/pfad/zur/datei/sasd - sasd.mp3';
header("Content-Disposition: attachment; filename=DeinName.mp3");
header("Content-Type: application/octet-stream");
readfile($filename);


Wenn du mit relativen Pfadangaben arbeitest, musst du das ganze natürlich in Abhängigkeit von deiner php Datei gestalten.
In deinem Beispiel müsstes du noch ein Verzeichnis zurück, da data im rootfolder liegt.

Quoted

"../data/mp3/####_##/*.mp3"


Ausser data würde wirklich im root Folder des Servers liegen bzw. gemountet sein, was ich mal nicht hoffe und stark bezweifel. Sonst wäre das eine absolute Pfadangabe und du bräuchtest nicht ein Verzeichnis hochzuspringen.

12

Tuesday, February 24th 2009, 2:00pm

Habs hinbekommen

PHP Quellcode

1
2
3
4
5
6
7
if($_GET['mp3id']){
	$downloadfile=sendquery("SELECT Downloadlink FROM mp3 WHERE ID=".$_GET['mp3id'], 3, 0);
	$filename=substr($downloadfile,strrpos($downloadfile, "/")+1);
	header("Content-Disposition: attachment; filename=\"$filename\"");
	header("Content-Type: application/octet-stream");
	readfile("../".$downloadfile);
}


brauche keine Codierung :wacko: :wacko: :wacko: :wacko: :wacko: :wacko: :wacko: :wacko:

Entschuldigung und Danke ;(

Social bookmarks