Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyswietlanie zawartości pliku
Forum PHP.pl > Forum > Przedszkole
laqula
Mam taki pliczek:
$sciezka jest przesyłana jako parametr
  1. <?php
  2.  
  3.   $plik = stripslashes($sciezka);
  4.   if (!file_exists($plik)){
  5.     die('Podany plik nie istnieje !!!'. $sciezka);
  6.   };
  7.   $typ= substr($plik, strrpos($plik, &#092;".\")+1);
  8.   switch($typ){
  9.     case &#092;"pdf\":
  10.       header('Content-Type: application/pdf');
  11.       break;
  12.     case &#092;"doc\":
  13.     case &#092;"dot\":
  14.       header('Content-Type: application/msword');
  15.       break;
  16.     
  17.     default:
  18.       header('Content-Type: application/octet-stream');
  19.       header('Content-Disposition: attachment; filename=' . basename($plik));
  20.       break;
  21.   };
  22.   header(&#092;"Pragma: public\");
  23.   header(&#092;"Cache-Control: must-revalidate, post-check=0, pre-check=0\");
  24.   readfile($plik);
  25.   die;
  26.  
  27. ?>


Z założenia ma to otwierać pliki dot, doc i pdf w oknie przeglądarki a dla pozostałych wyświetlać okno zapisu na dysk.

I prawie wszystko jest OK. Tylko że po otworzeniu pliku wyświetla się pusty obraz.
CZEMU? Aha. Kliknięcie prawym przyciskiem na linku i wybranie "Zapisz ..." zapisuje PDFa tak jak trzeba (i można go potem otworzyć bez problemu).

Otwieranie DOT i DOC działa OK.

Do otwierania używam linku:
  1. <a href='pliki.php?sciezka=$plik'>


Próbowałem już chyba wszystkich sposobów umieszczonych na tym forum, ale nadal nie mogę sobie z tym poradzić.
SongoQ
Wydaje mi sie ze brakuje jeszcze kilku naglowkow.

W klasie do generowania PDFa znalazlem jeszcze takie naglowki.

Moze to Ci pomoze.

Header('Content-Type: application/octet-stream');
Header('Content-Length: '.strlen($this->buffer));
Header('Content-disposition: inline; filename='.$name);
Header('Content-Type: application/force-download');
Header('Content-Type: application/octet-stream');
laqula
Niestety to samo. Otwiera się pusty.

Już próbowałem chyba wszystkich kombinacji tych nagłówków i albo błąd albo pusty.

sadsmiley02.gif


biggrin.gif

Udało się. Po długich kombinacjach z nagłówkami
  1. <?php
  2. header('Content-Length: ' . filesize($plik));
  3. ?>

rozwiązało sprawę.

Ciekawe dlaczego potrzebne jest to tylko w przypadku PDFów? (tzn. nie wiem czy tylko, ale przy DOC i XLS nie było potrzebne.
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-2025 Invision Power Services, Inc.