filedownload problem mit fgets()
Chris
- php
hallo,
wenn ich nen filedownload in php realsiere und fgets() verwende muss ich die file erst local speichern und kann sie erst danach öffnen. öffnet man die file direkt beim download passiert praktisch nix. als wenn die file nicht existiert oder ... ? hab keine idee wieso es zu diesem fehler kommt.
hat einer eine idee?
(( mit readfile() funktioniert es, aber wieso nicht mit fgets() ? ))
grüße Chris
if($fp = fopen($file,"rb")){
header("Content-Description: File Transfer");
header("Cache-Control: ", true);
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".basename($array["filename"].".".$array["fileextension"]));
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".@filesize($file));
set_time_limit(0);
while (!feof($fp)) {
echo fgets($fp, 4096);
}
fclose($fp);
} else {
die("Datei kann nicht gefunden/geöffnet werden!");
}
Hi,
wenn ich nen filedownload in php realsiere und fgets() verwende muss ich die file erst local speichern und kann sie erst danach öffnen. öffnet man die file direkt beim download passiert praktisch nix. als wenn die file nicht existiert oder ... ? hab keine idee wieso es zu diesem fehler kommt.
hat einer eine idee?
Also wenn ich das PHP Manual richtig deute, unterstützt fgets den Wrapper nicht, um entfernte Dateien zu lesen.
Ich tippe mal darauf, das es nicht möglich ist, beim Download einen Socked zum Server aufzubauen, den du ja für fgets brauchst. Wird dir nichts anderes übrigbleiben, als die Datei per readfile() zu holen und dann aus dem Array zu verarbeiten
MfG
Manuel
Hello,
fgets() und fopen($file,"rb")
passen klassisch betrachtet nicht zusammen.
der Öffnungsmodus 'rb' fordert eine Behandlung des Files als Byte-Stream an, fgets() will die Datei aber 'zeilenweise' lesen, also als Textdatei.
Nimm also entweder 'r' und fgets(), wenn Du Zeilen wünschst, oder aber fread() und 'rb', wenn Du nur die Datei haben willst und transparent weiterleiten willst.
Und bei fread() solltest Du die "Packete" etwas kleiner (256Byte) schnüren, das vermindert den Kummer.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
danke Tom,
ich weiss zwar net obs daran gelegen hat, aber in jeden fall scheint es jetzt keine probleme mehr zu machen. :D
grüße Chris
Hello,
ich weiss zwar net obs daran gelegen hat, aber in jeden fall scheint es jetzt keine probleme mehr zu machen. :D
Ich habe auch noch lange darüber nachgedacht, in wieweit diese Aussage für das heuteige PHP gilt. Aber alleine die klassische Entwicklung der Filezugriffe seit CP/M deutet auf diesen Konflikt hin. Der "Fehler" liegt eigentlich in der C-Schicht, im halbherzigen Versuch, eine Abstraktion einzuführen.
Bei Programmen/Entwicklungssystemen, die auf Pascal basieren, wäre dieser Fehler ausgeschlossen, da hier nicht die Funktion, sondern das Handle die Zugriffsart bestimmen würde. Und das ist mMn richtig!
Harzliche Grüße aus http://www.annerschbarrich.de
Tom