Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rozmiar pliku wysyłany funkcją header, Problem z Content-Length i pobieraniem plików z serwera
Pilsener
post
Post #1





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Witajcie, jeśli używacie IE to przy ściąganiu jakiegoś pliku pojawia się komunikat, a w nim:
Cytat
Nazwa: xyz
Typ: Winamp media file, 2,15 MB
Od: xyz.pl
- do wysyłania plików używam takiego kodu:

  1. <?php
  2. header("Content-Type: $mime");//typ mime
  3. header("Content-Length: $wielkosc");
  4. header("Content-Disposition: attachment; filename=$nazwa");
  5. readfile($filename);
  6. ?>
- wszystkie zmienne są ok i ładnie plik się ściąga. Problem jest natomiast z rozmiarem - niezależnie od pliku w oknie pobierania zawsze pojawia się 2,69 KB. Ktoś może spotkał się z podobnym problemem i wie jak go rozwiązać?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
pyro
post
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


no a skąd się bierze zmienna $wielkosc?
Go to the top of the page
+Quote Post
Pilsener
post
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Tak jak pisałem, zmienne są ok - $wielkosc obliczam funkcją filesize i wszystko tu działa.

Edit: poradziłem sobie:
  1. <?php
  2. $plik = '03.mpg';
  3. $nazwa = 'cos_tam.mpg';
  4. header("Content-Type: application/force-download");
  5. header("Expires: ".gmdate('D, d M Y H:i:s')." GMT");
  6. //Dla IE:
  7. header("Content-Disposition: attachment; filename = $nazwa");
  8. header("Cache-Control: must-revalidate, post-check = 0, pre-check = 0");
  9. header("Pragma: public");
  10. // Dla reszty:
  11. header("Content-Disposition: attachment; filename = $nazwa");
  12. header("Pragma: no-cache");
  13. header("Content-Length:".filesize($plik));
  14. readfile($plik);
  15. exit();
  16. ?>


Edit: nie zwróciłem też uwagi, że folder z plikami jest "deny all", dlatego ścieżka ma być mniej więcej taka:
  1. <?php
  2. $_SERVER['DOCUMENT_ROOT'].'/pliki/'.$filename;
  3. ?>

Dobrze też wysyłać plik linia po linii funkcją fgets (aby nie obciążać pamięci) lub po kawałku funkcją fread:
  1. <?php
  2. $down_rate = 1024*50; //porcje po 50 kb
  3. $file = fopen($sciezka, "r");
  4.  while(!feof($file)){
  5. print fread($file,$down_rate);
  6.  }
  7. fclose($file);
  8. ?>


Ten post edytował Pilsener 2.09.2008, 11:23:58
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: 24.08.2025 - 23:17