Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Downloadscript liest nur Quelltext ein

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PiXeL1337
    hat ein Thema erstellt [Erledigt] Downloadscript liest nur Quelltext ein.

    [Erledigt] Downloadscript liest nur Quelltext ein

    Hallo,

    Ich möchte Datein zum downloaden anbieten. Das Downloadfenster kommt auch aber wenn ich die Datei dann downloade ist nur der Qeulltext der Webseite in der Datei und nicht der eigentliche Inhalt.

    PHP-Code:
    public function makeDownload($file$dir)
        {
            
    $dir str_replace("@""/"$dir);
            
    $dir .= "/";
            if(
    file_exists($dir.$file) && strstr($dir"downloads"))
            {
                
    $filesize filesize($dir.$file);
                
    $type $this->getType($file);
                
    header("Content-Type: $type");
                
    header("Content-Length: $filesize");
                
    //header("Content-type: application/octet-stream");  
                
    header("Content-Disposition: attachment; filename=\"$file\"");
                
    readfile($dir.$file);

            }        
        } 
    Der Pfad zur Datei stimmt auch.

    Ich hoffe mir kann hier einer helfen

  • eagle275
    antwortet
    schau mal ans ende der erzeugten Datei - ich hatte zuerst meine Fehlermeldung auch dort stehen . du verbiegst ja den Header ....

    Einen Kommentar schreiben:


  • PiXeL1337
    antwortet
    Ich hatte keine Fehlermeldungen. Das error_reporting steht auf E_ALL

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    Zitat von lstegelitz Beitrag anzeigen
    Das hätte mit einem "headers already sent" quittiert werden müssen...
    Nicht, wenn output_buffering aktiv ist.

    Einen Kommentar schreiben:


  • Wolla
    antwortet
    Den beschriebenen Effekt hatte ich neulich bei PHPmyadmin. Statt der Daten hatte ich HTML-Code des PMA in der runtergeladenen CSV-Datei.
    Bei einem zweiten Versuch hat es dann normal geklappt, und der Vorfall war auch von Kollegen nicht zu reproduzieren.

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Zitat von PiXeL1337 Beitrag anzeigen
    Ich hab den Fehler gefunden. Es lag daran das ich vorher doch schon ein include gemacht habe in dem HTML ausgegeben wurde.
    Das hätte mit einem "headers already sent" quittiert werden müssen...
    sieht so aus, als ob du das error_reporting höher schrauben musst (oder stand die Meldung in der heruntergeladenen Datei?).

    Einen Kommentar schreiben:


  • PiXeL1337
    antwortet
    Erstmal vielen Dank für die Hilfe!

    Ich hab den Fehler gefunden. Es lag daran das ich vorher doch schon ein include gemacht habe in dem HTML ausgegeben wurde.

    Einen erfolgreichen Montag noch !

    Einen Kommentar schreiben:


  • eagle275
    antwortet
    nun das Problem ist ziemlich offensichtlich ....


    nachdem du den Header verstellt hast, versucht dein script auch die Normalen Ausgaben in die Datei weiterzuleiten, die zum user downgeloaded wird ....

    daher hab ich ja als letzte Anweisung in der Funktion das die(); , damit an dieser Stelle mein Script beendet wird - und beim nächsten Bearbeitungsschritt wieder der richtige Header ausgegeben wird (der dann wieder für HTML im Browser sorgt) - das heißt deine eigentlich gewünschte Ausgabe ist "" und daran hängt das script seinen COde an ... was ja nicht so erbaulich ist ....

    mithin ist also IMMER noch der PFad in Readfile falsch ....

    und nimm das die() als letzte Anweisung in deine make_download-funktion auf

    Einen Kommentar schreiben:


  • PiXeL1337
    antwortet
    Da hat sich noch nicht viel geändert^^
    PHP-Code:
    public function makeDownload($file$dir)
        {
            
    $dir str_replace("@""/"$dir);
            if (
    substr($dir,strlen($dir)-1) != '/')
            {
                
    $dir .= "/";
            }
            
            if (
    file_exists($dir.$file))
             {
                if(
    file_exists($dir.$file) && strstr($dir"downloads"))
                {
                    echo 
    $dir.$file;
                    
    $filesize filesize($dir.$file);
                    
    $type $this->getType($file);
                    
    //header("Content-Type: $type");
                    
    header("Content-Length: $filesize");        
                    
    header("Content-Type: application/force-download");
                    
    header("Content-Type: application/octet-stream");
                    
    header("Content-Type: application/download");   
                    
    header("Content-Disposition: attachment; filename=\"$file\"");
                    
    readfile($dir.$file);
        
                }
            }        
        } 
    Mir ist aufgefallen das wenn ich readfile auskommentiere der Download (mit falschem inahlt) trozdem kommt.

    Einen Kommentar schreiben:


  • eagle275
    antwortet
    wie sieht denn mittlerweile dein Code aus - oder klappt es inzwischen "mit'm Nachbar'n"

    Einen Kommentar schreiben:


  • PiXeL1337
    antwortet
    Ja geht er und da liegt auch die Datei.

    Hab den 2ten slash gerade mal entfernt.

    Einen Kommentar schreiben:


  • eagle275
    antwortet
    und geht er in den Then-Zweig ? ... liegt dort tatsächlich auch die Datei ?

    der Doppelslash dort stört ..... bearbeite mal deine string-anweisungen für $dir ...

    $dir .='/' ; <-- das nur ausführen, wenn nicht schon ein slash dran hängt ...

    also
    PHP-Code:
    if (substr($dir,strlen($dir)-1)!='/')
       
    $dir.='/'
    oder so ähnlich

    Einen Kommentar schreiben:


  • PiXeL1337
    antwortet
    ja deine lösung habe ich probiert ( #3 ).

    in $dir.$file steht sowas wie: ./downloads/ordner1//test1.txt

    Einen Kommentar schreiben:


  • eagle275
    antwortet
    ja dann passt der Pfad nicht .. hast du es mal mit meiner Lösung über fopen ( ) .. versucht ?

    und lass dir vorher den $dir.$file nochmal ausgeben ..

    UND PRÜF BITTE , ob dein CODE auch in den THEN-Zweig deiner If Prüfung reingeht (Echo "Hier"; direkt nach if .. { reicht ja )

    Einen Kommentar schreiben:


  • PiXeL1337
    antwortet
    Ich will ja NICHT den Quelltext anbieten sondern text, doc oder pdf.

    Das problem ist das in den Datein nicht der eigentliche inhalt steht sondern das HTML der Seite.

    Einen Kommentar schreiben:

Lädt...
X