PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Download Skript und IE7



bugmenot
19-01-2008, 22:10
Habe über PHP (genauer Punbb Forensoftware) ein Skript laufen, welches upload und download managet. So weit, so gut. Bisher alles bestens. Dachte ich jedenfalls.

Aber mit dem IE7 gibt es ein Problem. Er macht beim Download schlichtweg nix.

Das Skript ist so gestrickt, dass die User nicht direkt auf das Verzeichnis zugreifen sollen. Stattdessen sieht der Link etwa so aus:
http://domain.com/script.php?file=dateiname.pdf

Während IE6 und Moz/FF das wunderbar öffnen, bekommt es nur der IE7 nicht hin. Wenn man im IE7 dagegen den direkten Pfad zur gleichen Datei (also inkl. Verzeichnis) angibt, geht es.

Jetzt frage ich mich, warum der IE7 das mit dieser Parameterübergabe nicht hinbekommt. Habt Ihr eine Idee?

inge
21-01-2008, 21:10
überprüfe mal die header-angaben oder probiers mal modrewrite

hydee
24-01-2008, 22:53
Finde keinen Fehler in den headern :(

hydee
24-01-2008, 22:59
header('Content-Disposition: inline; filename='.$file_name);
header('Content-type: '.$type);
header('Pragma: no-cache');
header('Expires: 0');
header('Connection: close);
header('Content-Length: '.$file_size);

hydee
02-02-2008, 12:29
Keiner ne weitere Idee?

msi
02-02-2008, 14:22
Keiner ne weitere Idee?

musst schon den quelltext angeben, sonst wrid dir keiner helfen können..



welches upload und download managet.
managet was soll den das heißen?

hydee
02-02-2008, 20:43
Also zum Quelltext: Ich weiß jetzt nicht, was Du genau meinst.

Am Anfang überprüft das Script halt den MIME Type und legt den fest. Das klappt. Sonst würde es ja auch nicht in allen anderen Browsern einwandrei laufen (inkl. IE5/6).

Dann gibt es da oben erwähnte Header. Und zum Schluss wird das ganze über die PHP Funktion fpassthru($variable) weitergeleitet.

Hilft Dir das?

managet = mir fiel kein deutsches Wort ein, das to manage entspricht. Von mir aus übersetz es mit bewerkstelligt. ;)

msi
03-02-2008, 13:02
Also zum Quelltext: Ich weiß jetzt nicht, was Du genau meinst.

Am Anfang überprüft das Script halt den MIME Type und legt den fest. Das klappt. Sonst würde es ja auch nicht in allen anderen Browsern einwandrei laufen (inkl. IE5/6).

Dann gibt es da oben erwähnte Header. Und zum Schluss wird das ganze über die PHP Funktion fpassthru($variable) weitergeleitet.

Hilft Dir das?

managet = mir fiel kein deutsches Wort ein, das to manage entspricht. Von mir aus übersetz es mit bewerkstelligt. ;)

na damit mein ich natürlich den php quelltext. post ihn doch hier einfach mal.
dann sieht man ob noch fehler drin sind.
außerdem wäre es hilfreich zu wissen was der ie7 stattdessen macht (abstürzen, die datei im ie fenster anzeigen oder was?)

hydee
13-02-2008, 14:49
// send some headers
if (
preg_match('/.jpeg/', $file_name) ||
preg_match('/.jpg/', $file_name)
) {
$c_type = 'image/jpeg';
}
else if (preg_match('/.png/', $file_name))
$c_type = 'image/png';
else if (preg_match('/.gif/', $file_name))
$c_type = 'image/gif';
else if (preg_match('/.txt/', $file_name))
$c_type = 'text/plain';
else if (preg_match('/.rtf/', $file_name))
$c_type = 'text/rtf';
else if (preg_match('/.pdf/', $file_name))
$c_type = 'application/pdf';
else if (preg_match('/.doc/', $file_name))
$c_type = 'application/msword';
else if (preg_match('/.sxw/', $file_name))
$c_type = 'application/vnd.sun.xml.writer';
else if (preg_match('/.zip/', $file_name))
$c_type = 'application/zip';
else if (preg_match('/.gz/', $file_name))
$c_type = 'application/gzip';
else if (preg_match('/.eps/', $file_name))
$c_type = '';
else if (preg_match('/.tar/', $file_name))
$c_type = 'application/x-gtar';

header('Content-Disposition: inline; filename='.$file_name);
if ($c_type == '') {
$c_type = 'application/octet-stream';
}

header('Content-type: '.$c_type); // a default mime if nothing is defined for the file
header('Pragma: no-cache'); //hmm, I suppose this might be possible to skip, to save some bw, but I'm far from sure, so I let the 'no cache stuff' be...
header('Expires: 0');
header('Connection: close'); // Thanks to Dexus for figuring out this header (on some systems there was a delay for 5-7s for downloading)
if($file_size!=0)
header('Content-Length: '.$file_size);
// and finally send the file, fpassthru might be replaced later, rumors say fpassthru use alot of memory...


fpassthru($fp);
}


So, und der IE 7 öffnet dann einfach ein leeres, weißes Fenster. Dann passiert nix. Keine Fehlermeldung. Gar nix. :(

undefined
16-02-2008, 15:54
ich gehe mal davon aus weil wegen header('Connection: close'); ein Brocken Header ankommt.

hydee
23-02-2008, 00:34
Nee, wenn ich das raus nehme, ändert sich ja auch nix.

inge
25-02-2008, 07:25
if($file_size!=0)
header('Content-Length: '.$file_size);

wird $file_size vorher irgendwo gesetzt?

hydee
12-03-2008, 22:05
ja. wird gesetzt.

msi
19-03-2008, 19:58
ja. wird gesetzt.

schau wenn du nicht den gesamten code postest isses für uns nur schwer dir zu helfen. und wo file_size gesetzt wird ist in deinem code leider nicht enthalten.