Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP i pobieranie plików przez MS IE, IE nie pobiera plików ze skryptu PHP
lszota
post 15.11.2004, 23:42:11
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 15.11.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
silent
post 16.11.2004, 00:17:50
Post #2





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 18.08.2004
Skąd: Jastrzębie Zdrój

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
lszota
post 16.11.2004, 22:50:03
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 15.11.2004
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
silent
post 16.11.2004, 23:52:51
Post #4





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 18.08.2004
Skąd: Jastrzębie Zdrój

Ostrzeżenie: (0%)
-----


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ą.
Go to the top of the page
+Quote Post
pan_panda
post 26.11.2004, 15:37:17
Post #5





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 26.11.2004

Ostrzeżenie: (0%)
-----


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

Ten post edytował pan_panda 26.11.2004, 17:37:36
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.07.2025 - 04:15