HTML-Code und Warnings in Download

Bullet1990

Mitglied
Hi,

ich habe mir eine kleine Seite geschrieben, die es mir erlaubt diverse Files vom Server herunterzuladen.

Auf einer Seite "Filesharing" liest das PHP-Skript alle Dateien in einem Verzeichnis aus, und fügt diese in die Seite, als Link, ein, so dass man nur auf den Link klicken muss, um diese direkt herunterzuladen. Der Download-Manager des jeweiligen Browsers öffnet sich auch und es wird die korrekte Datei ausgewählt.

Mein Problem liegt darin, dass während des Download-Skripts diverser HTML-Code in die Dateien geschrieben wird. Das erkennt man natürlich nur in einer Textdatei. Alle anderen Daten sind dann "corrupted".
Zum Beispiel habe ich eine Textdatei "test.txt" auf dem Server liegen. Diese enthält nichts weiter als "asdasdasdas". Gebe ich die vollständige Adresse ein, wie z. B. "www.meineseite.de/filesharing/filedir/test.txt" wird mir die .txt korrekt im Browser dargestellt. Im Browser ist dann also ebenfalls "asdasdasdas" zu sehen. Auch wenn ich die Daten mit FileZilla prüfe, ist der Inhalt noch so, wie er es sein sollte.
Erst wenn ich die Textdatei herunterlade, wird dessen Inhalt manipuliert.

Ich konnte mit ob_clean und flush die Hälfte des HTML-Codes rausfiltern, doch das Warning ist immer noch vorhanden.

Hier ist der Inhalt, der mir in die Textdatei geschrieben wird:

<style>.bpe a:link, .bpe a:visited, .bpe a:active { color: #0b4c8e; text-decoration: none; } .bpe a:hover { color: #0D7CEC; }</style>
<span class="bpe" style="font: 11px/1.2em Verdana, sans-serif;"><br />
<b>

Warning</b>: readfile(/filedir/test.txt) [<a href='http://de.php.net/function.readfile'>function.readfile</a>]:
failed to open stream: No such file or directory in <b>/users/meineseite/www/filesharing/downloadFunctions.php</b>
on line <b>15</b><br />
</span>

Auf den ersten Blick sieht es eindeutig aus. Doch der Server verfügt über die Textdatei. Wenn diese nicht vorhanden wäre, wäre kein Link generiert worden und man den Download nicht ausführen können. Auch Prüfungen mit FileZilla und direkt über filesharing/filedir/ haben gezeigt, dass die Textdatei genau so dort vorhanden ist.

Mich verwirrt vor allem die Aussage "No such file or directory in <b>/users/meineseite/www/filesharing/downloadFunctions.php"

Ich habe, wie bereits erwähnt, den Ordner "filesharing". Dieser enthält den Ordner "filedir", der die Files enthält. In filesharing sind zudem meine index.php und eine downloadFunctions.php vorhanden.
Vom "filesharing"-Directory muss das "filedir"-Directory ja zu finden sein oder versucht mein Code die Textdatei irgendwie innerhalb der downloadFunctions.php zu finden?

Hier ist mein Code der downloadFunctions.php:

PHP:
<?php

function makeDownload($file, $dir, $type, $normalType)
{
  
    header("Content_Description: File Transfer");
    header("Content-Type: $type");
    header("Content-Disposition: attachment; filename=\"$file\"");
    header("Content-Transfer-Encoding: binary");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  
    ob_clean();
    flush();
    readfile($dir.$file.'.'.$normalType);
    exit;
}

?>

Erklärung der Variablen:
$file = Der Name des Files, ohne Typ-Endung
$dir = Das Directory des Files
$type = Der Mimetype
$normalType = die gewohnte Dateiendung

Die Fehlermeldung in meiner Textdatei deutet dann jedes Mal auf die Zeile hin, in der das readfile steht.
Google hat mir hier leider keine Hilfe geboten, da fast niemand ein solches Problem hatte.
 
Hallo,

werden denn überhaupt Teile von der originalen Datei beim Download ausgegeben? Oder besteht der Download komplett aus den Fehlermeldungen?

PHP hat einige Eigenarten, Pfade innerhalb von eingebetten (include/require) Skripten zu setzen. Deswegen versuche ich immer, absolute Pfade zu verwenden.
Ist denn $dir ein absoluter Pfad?

PS: Ich finde deinen Beitrag vorbildhaft für all jene, die auch Fehlermeldungen bekommen.
 
Hallo,

werden denn überhaupt Teile von der originalen Datei beim Download ausgegeben? Oder besteht der Download komplett aus den Fehlermeldungen?

PHP hat einige Eigenarten, Pfade innerhalb von eingebetten (include/require) Skripten zu setzen. Deswegen versuche ich immer, absolute Pfade zu verwenden.
Ist denn $dir ein absoluter Pfad?

PS: Ich finde deinen Beitrag vorbildhaft für all jene, die auch Fehlermeldungen bekommen.

Jetzt schon. Das Problem habe ich gestern Abend gelöst. Es lag tatsächlich daran, dass ich keinen absoluten Pfad verwendet habe. Bei den wenigen Leuten, die ein ähnliches Problem hatten, hat auch der absolute Pfad keine Abhilfe geschafft. Ich habe es dennoch versucht und es hat funktioniert.

Das verwirrende hierbei war, dass die Fehlermeldung mir meinen Pfad auf eine Weise angezeigt hat, bei der man nie vermuten würde, dass der Pfad falsch sei. Insbesondere da ich vorher auch keine absoluten Pfade verwendet habe und alles reibungslos läuft.

Ein kleiner Tipp, für alle die den oberen Code betrachten, weil sie Hilfe suchen: In Zeile 8 solltet ihr bei filename auch einen Dateitypen (z.B. ".txt") anhängen, sonst werden typenlose Files heruntergeladen (ist mir erst später aufgefallen).
 

Neue Beiträge

Zurück