Download per Header - Leerzeichen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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:

    Quellcode

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


    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?
  • Naja, doch irgendwie nicht :D

    MP3 wird in textform geladen und da drin steht

    Quellcode

    1. <br />
    2. <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 />
    3. <br />
    4. <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(
  • ist mir jetzt ein bisschen unverständlich

    wenn ich es so mache:

    Quellcode

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


    bekomme ich:

    Quellcode

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


    wenn ich es so mache:

    Quellcode

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


    bekomme ich:

    Quellcode

    1. Unable to access ZGF0YS9tcDMvMjAwOV8wMi9hIC0gYS5tcDM=


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


    wenn ich es so mache:

    Quellcode

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


    bekomme ich:

    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?
  • 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

    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()

    Quellcode

    1. readfile($downloadfile);


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

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Koljan777 ()

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

    Quellcode

    1. header("Content-Disposition: attachment; filename=DeinName.mp3");
    2. 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:
    pear.php.net/package/MP3_Id/docs

    Deshalb frage ich mich was hieran nicht funktioniert`?

    Quellcode

    1. $filename = '/pfad/zur/datei/sasd - sasd.mp3';
    2. header("Content-Disposition: attachment; filename=DeinName.mp3");
    3. header("Content-Type: application/octet-stream");
    4. 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.
    "../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.
  • Habs hinbekommen

    Quellcode

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


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

    Entschuldigung und Danke ;(