Probleme mit dem Download von Dateien
Stefan Welscher
- php
0 ChrisB
Moin moin,
ich hab zwei Projekte (eines nur als Test) bei dem ich Dateien zum Download anbieten will. Irgendetwas scheine ich aber trotz relativ simplen Code komplett falsch zu machen.
Bestehendes Projekt:
Die Dateien werden zum Download angeboten und lassen sich auf der Festplatte speichern. Wähle ich bei dem Downloaddialog des IE6 nicht "Speichern" sondern "Öffnen" öffnet sich auch der Editor, kann aber die Datei zum öffnen nicht finden. Bei anderen Websites funktioniert der Download Problemlos.
Testprojekt:
Auch hier wird die Datei zum Download angeboten und lässt sich auf der Festplatte speichern. Wähle ich bei dem Downloaddialog des IE6 nicht "Speichern" sondern "Öffnen" erscheint die Abfrage zum Download erneut. Erst nach der zweiten Bestätigung öffnet sich die Datei im Editor.
Bei anderen Websites funktioniert der Download Problemlos.
Woran könnte das liegen?
Bestehendes Projekt:
<?
...
if (preg_match("/test\/get_download.php/",$url) || (preg_match("/\.(xls|doc|ppt|mdb|exe|com|bat)$/i",$url) && !preg_match("/\.(php[345]?|html?)\?/i",$url)))
{
$file=preg_replace("/^(.*file=)([^&]*)(.*?)$/","$2",$url);
$file_tail=preg_replace("%^(.*?/)([^/]*)$%","$2",$file);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$file_tail\"");
}
$output=popen("/srv/www/htdocs/test/testweb.pl get \"$url\" \"".$user_hash['username']."\" \"".$user_hash['password_ce']."\" \"".$user_hash['password_pe']."\" 2>&1", 'r');
while(!feof($output))
{
echo $line=fgets($output);
}
pclose($output);
?>
Testprojekt:
Lokale Site:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>TEST</title>
</head>
<body>
<br><br>
<form enctype="multipart/form-data" action="http://test.dyndns.org/test/api.php" target=_top method=post>
<input maxlength="2048" name="get_file" size="32" value=""><br>
<input type="Submit" name="Submit" value="Submit">
</form>
</center>
</body>
</html>
Script auf Server:
<?
if ($get_file)
{
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$get_file\"");
readfile ($get_file);
}
?>
Hi,
Woran könnte das liegen?
Reine Vermutung:
Der IE stellt sich des oefteren ziemlich an, wenn ihm die Angaben zum Caching nicht passen (bzw. ganz fehlen).
Dann laed er erst mal runter, versucht dann die Datei aus dem tmp-Verzeichnis mit einer anderen Applikation zu oeffnen - merkt dann, hups, die durfte ich ja eigentlich nicht cachen - also zeig ich sie mal lieber nicht an, oder lade sie erst mal erneut herunter (oder mache sonst einen Bloedsinn) ...
Neben den "gaengigen" Angaben zum Caching koennen je nach IE-Version (und ggf. Dateityp) auch noch Angaben bzgl. "pre-check" und "post-check" erforderlich sein.
MfG ChrisB