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
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
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
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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
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.... (IMG:http://forum.php.pl/style_emoticons/default/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
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
(IMG:http://forum.php.pl/style_emoticons/default/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;

(IMG:http://forum.php.pl/style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:33