Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] header Content-Length
Forum PHP.pl > Forum > Przedszkole
kefir1989
Witam,
na początku zaznaczam, że przejrzałem wiele tematów nt. i każdy skrypt jest podobny a nawet identyczny jak mój.
Mam problem, mianowicie mam skrypy do downloadu plików

Kod
$row = mysql_fetch_array($result, MYSQL_ASSOC);
  
  $length = filesize("./files/" .$row['src']);
  
  header("Content-type:" . $row['type']);
  header('Content-Disposition: attachment; filename="' . $row['name'] . '"');
  header("Content-Length: " . $length);
  readfile("./files/" . $row['src']);


Wszystko jest ok, skrypt wysyła plik do przeglądarki jednak nie rozponaje długości pliku, przez co użytkownik nie wie ile procent zostało ściągnięte. Z góry dziękuje za pomoc.

Działanie można zobaczyc na http://sendfile.eu/download.php?id=4aId4C
wookieb
Przejrzyj http://w-shadow.com/blog/2007/08/12/how-to...nload-with-php/
kefir1989
Cytat

niestety ta funkcja nie rozwiązała problemu. Ma ktoś jakieś inne pomysły?
Wydaje się to głupie, ale może to wina serwera?
ayeo
~kefir1989, popraw, proszę, tytuł tematu. Na Przedszkolu dodajemy tagi do tytułu określające jakiego języka/systemu pytanie dotyczy. Pozdrawiam!
wookieb
Wyświetl sobie $length. I spróbuj jeszcze dać przed tą funkcją http://pl.php.net/manual/en/function.clearstatcache.php
kefir1989
Niestety do tej pory nic nie pomogło sad.gif
Jest to dla mnie tym bardziej dziwne, że wszystkie kawałki kodów jakie znalazłem w sieci są podbone lub wręcz identyczne do mojego.


Problem leży chyba po stronie serwera. Na lokalnym serwerze właśnie ściągałem film (700mb) i można zauważyć, że na lokalu pojawia się wielkośc pliku).
Orkan
Nie wiem czy pomoze, ale czemu nie sprobowac?
Mialem troche inny problem, mianowicie nie keszowalo mi obrazkow wysylanych z PHP.
Po wielu stronach manuala i probach wkoncu doszedlem do takiego kodu:


  1. <?php
  2. ob_start('pgimage_output_handler');
  3. pgimage_output_headers($row['ph_id'], $row['ph_date'], $row['photoid'], $row['ph_file']);
  4. header('Content-type: image/jpeg');
  5.  
  6. @readfile($file_path);
  7. ?>


  1. <?php
  2. function pgimage_output_handler($img) {
  3.    header('Accept-Ranges: bytes');
  4.    header('Content-Length: '.strlen($img));
  5.    return $img;
  6. }
  7. ?>


funkcji pgimage_output_headers() nie podaje bo mysle ze nie ma nic do rzeczy.
EDIT: hmm, wlasciwie to tam jest jeden naglowek ktory moze sie tu przydac: header("Connection: close");
marq3d
nie jestem pewien czy włączałeś buforowanie, ale jeśli tak zdaje sie zę musisz zakodować content (sprawdź sobie jakie headery wysyłąne są do przeglądarki i czy zgadzają sie z wielkością pliku). i wted użyjesz ob_get_content() do pobrania zawartosci buforu, ob_clean() (czyszczenie), zakodujesz pobrany wcześniej do zmiennej ob_get_content() za pomoca gzcompress(), sprawdzisz mu strlen i wpiszesz go do content-length, na końcu echo zakodowanej zawartosci i zakończenie ob z wymyciem.
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.