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