Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP i pobieranie plików przez MS IE
Forum PHP.pl > Forum > Gotowe rozwiązania
lszota
Witam,
mam następujący problem.

Potrzebuję udostepniać pliki z poza struktury katalogowej serwera Apache.
Przygotowałęm następującą funkcję:

  1. <?php
  2.  
  3. function download($filepath)
  4. {
  5. $filetype = &#092;"Content-Type: application/octet-stream\";
  6. $filename = basename($filepath);
  7. $filesize = filesize($filepath);
  8. $attachment = preg_match(&#092;"MSIE\", $_SERVER[\"HTTP_USER_AGENT\"]) ? null : ' attachment;';
  9.  
  10. header(&#092;"Pragma: no-cache\");
  11. header(&#092;"Content-type: $filetype\");
  12. header(&#092;"Content-Length: $filesize\");
  13. header('Content-Transfer-Encoding: Binary');
  14. header(&#092;"Content-Disposition:$attachment filename=\"$filename\"\");
  15. $fh = readfile($filepath);
  16. fpassthru($fh);
  17. }
  18.  
  19. ?>


Mozilla pobiera pliki bez problemu, natomiast Internet Explorer próbuje pobrać plik
i przerywa prace z następującym komunikatem:
Internet Explorer nie może pobrać index.php z www.my-server.pl.
Program Internet Explorer nie może otworzyć tej witryny internetowej. Ządana witryna nie jest dostępna lub nie można jej znaleźć. Spróbuj ponownie później

Na czym może polegać problem?
silent
Po poprawkach działa:
  1. <?php
  2.  
  3. function download( $filepath )
  4. {
  5. $filetype = &#092;"application/octet-stream\";
  6. $filesize = filesize($filepath);
  7. $filename = basename($filepath);
  8.  
  9. header( &#092;"Pragma: no-cache\" );
  10. header( &#092;"Content-type: $filetype\" );
  11. header( &#092;"Content-Length: $filesize\" );
  12. header( &#092;"Content-Transfer-Encoding: Binary\" );
  13. header( &#092;"Content-Disposition: filename=\"$filename\"\" );
  14.  
  15. $fh = readfile( $filepath );
  16. fpassthru( $fh );
  17. }
  18.  
  19. ?>
lszota
Serdeczne dzięki za wykrycie błędów w moim kodzie.
Mimo korekty Internet Explorer ciągle generuje wymieniony wcześniej komunikat błedu.

Na pewno problem jest między Apachem (php) a przeglądarką.

Ponieważ transfer plików, do których jest link bezpośredni odbywa się bez zarzutów, to sądzę, że problem nie dotyczy serwera Apache a tylko nagłowków wysyłanych przez php.

Aby wykluczyć konflikt z innymi skryptami serwera, otrzymany kod umieściłem w osobnym pliku i dodałem linijkę wywołującą funkcję download() dla pliku znajdującego się (tak samo jak skrypt) w katalogu głównym serwera Apache.

Eksperymentowałem z różnymi nagłówkami, z "inline" i "attachment" i nic sad.gif
Brakło mi już pomysłów co jeszcze może być nie tak.
silent
Ja u siebie sprawdziłem (teraz nawet na innym serwerze) i działa zarówno na IE i na Firefoxie. Sprawdź czy u kogoś innego działa pod IE, bo może masz coś z systemem. Jeśli nie to, to nie wiem co może być przyczyną.
pan_panda
He, he... sprawa nie leży po strone skryptu... ani serwera.... biggrin.gif Zgadnijcie, kto znowu zawinił... tak .... panowie z Microsoftu... otórz:

Jeżeli otworzysz taki oto plik jako link ze strony, działa...

jeżeli otworzysz to jako popup (lub w okienku popup) lub z macromedii ... dupa....
sami sprawdzcie....

A poza tym to firefox i opera ściągają wszystko
smile.gif
guitar.gif



ale jeśli coś takiego wywoła się jako POST!!! nie get, to działa



plik=fopen($savepath,"r") or die ("Nie moge otworzya pliku");
$ciag=fread($plik,$wyn['rozmiar']);
fclose($plik);
header("Content-Type: application/octet-stream");
header("Content-Length: ".$wyn['rozmiar']);
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: must-revalidate");
$nazwa = strtr($wyn['tytul'].".pdf", "\xA1\xA6\xAC\xB1\xB6\xBC","\xA5\x8C\x8F\xB9\x9C\x9F");
header("Content-disposition: attachment; filename=\"$nazwa\"");
echo $ciag;

party.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.