2008-09-22 10 views
5

Mam skrypt, który otrzymuje zaszyfrowany URL i od tego generuje download, najbardziej krytyk par skryptu jest następująca:Nie można pobrać pliku w IE7, ale nie ma żadnego problemu w Firefoksie, Chrome itp.?

$MimeType = new MimeType(); 
$mimetype = $MimeType->getType($filename); 
$basename = basename($filename); 
header("Content-type: $mimetype"); 
header("Content-Disposition: attachment; filename=\"$basename\""); 
header('Content-Length: '. filesize($filename)); 
if (@readfile($filename)===false) { 
    header("HTTP/1.0 500 Internal Server Error"); 
    loadErrorPage('500'); 
} 

pobrania działa jak uroku w każdej przeglądarce z wyjątkiem IE, widziałem problemów związanych do nagłówków "bez cache", ale nie wysyłam niczego takiego, mówią o znakach utf-8, ale nie ma żadnego utf-8 characters (a nazwa $ filename nie ma żadnych właściwości utf-8).

+0

"Działa z wyjątkiem IE" nie jest w ogóle pomocne. Jak to nie działa? Czy jest komunikat o błędzie? Limit czasu? Czy wyświetla zawartość pliku? Czy pobiera błędną rzecz? – Jim

+0

timeout w zasadzie wyskakuje okno pobierania, ale nigdy nie przesuwa się, po paru minutach przestaje mówić: "Internet Explorer nie może pobrać nazwy pliku z WebServera" – levhita

Odpowiedz

3

This site ma problem podobny do twojego w IE6. Podsumowując:

session_start() domyślnie wysyła nagłówek kontrolny pamięci podręcznej zawierający "no-store". Program Internet Explorer traktuje to nieco zbyt dosłownie, ale nie ma odpowiedniej obsługi błędów dla sprawy, a w wyniku tego rozbija się w tajemniczy sposób, gdy próbujesz zapisać stronę wyjściową na dysku.

Przed session_start(), dodać „session_cache_limiter («none»);”, albo patrzeć że funkcji i dostosować odpowiednio ogranicznik (prawdopodobnie „prywatny” jest bliżej stronie symbol).

Zdaję sobie sprawę, fragment kodu pisał nie zawierają wywołanie session_start();, ale pomyślałem, że podzielę to możliwe rozwiązanie w przypadku masz wezwanie do niego i po prostu nie pokazują nam.

+0

Tak, istnieje session_start() przede wszystkim, po prostu publikuję ten kod, ponieważ jest bardzo długi kod. – levhita

0

użytkowania tego

w IE7 Browser przejść do opcji Internet -> Bezpieczeństwo ---> Poziom niestandardowy ---> pliki do pobrania następnie włączony autotematyczny monit o pobranie pliku.

to rozwiąże problem.

nadzieję, że to pomoże

+0

Naprawdę nie można prosić wszystkich użytkowników, aby zrobili to samo :) – Luk

Powiązane problemy