-         
Ergebnis 1 bis 7 von 7

Thema: HTML/PHP: Download eines Datenblocks: Leerzeichen erscheint

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987

    HTML/PHP: Download eines Datenblocks: Leerzeichen erscheint

    Anzeige

    Moin.

    In einem Projekt sollen von einem Server Dateien herunterladbar sein. Problem: Der Ordner für die Dateien liegt "ausserhalb" des Document Root, also per http nicht zugreifbar.
    "Theoretisch" könnte man diese über file:// holen. Da aber die meisten Browser es nicht zulassen, file:// von http(s):// aus aufzurufen, hab ich eine andere Möglichkeit verwendet. (Den Link von Hand kopieren und in ein Browserfenster eingeben funktioniert zwar, ist aber zu aufwendig und für den ein odere anderen DAU ein Problem).

    Mit fopen kann ich problemlos auf die Dateien zugreifen und den Inhalt mit fread holen. Über einen Download-Header veranlass ich im Browser dann den Download des Datenblocks.

    Vereinfacht und mal ohne Prüfungen auf Dateiexistenz etc.:
    Code:
    $_fileWithPath = $_GET['file'];
    $filehandle = fopen($_fileWithPath, "r");
    $stream = fread($filehandle, filesize($_fileWithPath));
    fclose($filehandle);
    header("Content-type: application/force-download");
    header("Content-Disposition: filename=$_filename");
    header("Content-Description: Downloaded File");
    echo "$stream";
    Das funktioniert soweit auch, nur dass in der heruntergeladenen Datei dann ein Leerzeichen (0x20) an erster Stelle ist, das in $stream definitiv nicht drin ist.
    Ersetz ich das nämlich z.B. durch echo "ABC" steht in der Datei dann " ABC".
    Weiss jemand, wo dieses Leerzeichen herkommt bzw. wie man das loswird?

    mfG
    #ifndef MfG
    #define MfG

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    27
    Beiträge
    1.192
    Hallo Jaecko,
    das könnte u.U. mit dem verwendeten Zeichensatz zusammenhängen.
    Manche Dateien beginnen dann mit 
    Einfach mal mit einem Hex-Editor ansehen.
    Notfalls irgendwie mit substr oder trim arbeiten o.ä.
    Grüße, Bernhard

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Naja die Idee mit trim etc. hätt ich schon mal gehabt. In der Datei passts soweit auch.
    Mit trim komm ich da aber nicht weiter, da ja die Variable in der echo-Anweisung noch passt. Das Leerzeichen kommt danach erst irgendwo rein, wo mir trim/substr & co. nix mehr helfen. Wie schon gesagt, wenn ich echo "ABC" schreib, kommt eine Datei mit " ABC" raus.
    #ifndef MfG
    #define MfG

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    27
    Beiträge
    1.192
    Bei echo "$stream"; kannst du die Anführungszeichen weglassen, dürfte aber eigentlich nix ändern.
    Hast du noch mehr Code? Vielleicht liegt der Fehler an einer anderen Stelle?
    Oder muss man den Zeichensatz über header() auch irgendwie einstellen?
    Versuche auch mal eine andere Zeichenkodierung im Browser (Firefox: Webentwickler->Zeichenkodierung).
    Meist wird UTF8 oder ISO 8859 Westlich verwendet.
    Schon was mit dem Hex Editor rausgekriegt?
    Da könnte bereits vor dem <?php etwas drinstehen, dass dann als HTML interpretiert sofort dargestellt wird.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Mehr Code solls später schon mal sein, nur isses bei dieser Minimalanwendung auch schon.
    direkt davor und danach kommen noch <?php und ?>

    Leerzeichen davor hab ich auch schon geprüft; bzw. hier meckert PHP sogar, wenn nach einer Ausgabe eines Zeichens nochmal Headerdaten gesendet werden (so von wegen "Cannot modify header information - headers already sent").
    Zum Hex-Editor: die Dateien sind bis auf das Leerzeichen identisch. Also die heruntergeladene Datei ist genau 1 Byte länger; alle Datenbytes sind um 1 nach hinten gerutscht und das erste ist 0x20, quasi wie $x = " " + $x; stimmt auch, dass echo mit und ohne "" nix ändert. Ebenso bringt print das gleiche Ergebnis.

    Hab auch gerade mal mit nem Network Monitor auf den TCP-Verkehr geschaut, in der Hoffnung da rauszufinden, ob das Leerzeichen schon übertragen wird.
    Da das ganze aber https ist, steht da (leider) nix im Klartext drin.
    #ifndef MfG
    #define MfG

  6. #6
    Du kannst readfile($filename) nehmen, das erspart dir die dateioperationen und die Ausgabe per echo.

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    Inwiefern ist es htpps? Davon steht nichts in deinem Code. Könnte das die Ursache sein?

    Ich habe deinen Code getestet, bei mir geht das ohne Probleme sowohl mit ASCII als auch Unicode oder UTF-8. Keine führenden Leerzeichen.

    Gruesse

Ähnliche Themen

  1. Serielle Schnittstelle und Leerzeichen
    Von Dirk im Forum Robby RP6
    Antworten: 5
    Letzter Beitrag: 04.09.2009, 20:23
  2. HTML-Code (scripts)
    Von Technik =) im Forum Umfragen
    Antworten: 6
    Letzter Beitrag: 10.10.2008, 09:21
  3. if string = leerzeichen then ... Leerzeichen Abfrage?
    Von Karlja im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 02.09.2005, 17:59
  4. Antworten: 3
    Letzter Beitrag: 17.03.2005, 19:12
  5. Abgeschnittenes echo des Datenblocks
    Von UweMD im Forum Robby CCRP5
    Antworten: 1
    Letzter Beitrag: 19.08.2004, 19:29

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •