Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]wysyłanie pliku do przeglądarki, problem z bufferowaniem danych?
uzytkowicz1
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.10.2009

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


Przedstawie to tak:

nie chcę szaremu użytkownikowi dać adresu do pliku -> www.domena.pl/pliki/a.zip
więc wymyśliłem sposób aby zrobić to tak -> www.domena.pl/download?pliki=a.zip

i teraz moje pytanie, czy jeśli otworze ten plik fopen i oczywiście dodam odpowiedni header, że zacznie pobieranie się pliku, to nie nastąpi przepełnienie się bufforu PHP ?

zdaje sobie sprawę tego, że PHP za pomocą funkcji "echo fread" przygotuje cały plik w 3 sekundy, a przecież pobieranie tego pliku przy transferze 10 kb/s może potrwać nawet i godzinę smile.gif

czy użycie funkcji flush da mi coś na tej zasadzie, że wyśle 128kb danych, funkcja flush poczeka, aż przeglądarka odbierze dane i przesyłam kolejne 128kb i tak do końca pliku ? dobrze rozumiem zasade działania tej funkcji ? czy istnieje jakaś inna o takim działaniu ?

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
potreb
post
Post #2





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Hmm nigdy nie miałem okazji otwierać za pomocą fopen, ale przy moim skrypcje jest ob_flush:
  1. header('Content-Description: File Transfer');
  2. header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1
  3. header('Pragma: public');
  4. header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  5. header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
  6. // force download dialog
  7. header('Content-Type: application/force-download');
  8. header('Content-Type: application/octet-stream', false);
  9. header('Content-Type: application/download', false);
  10. header('Content-Type: '.$r->fmime.'', false);
  11. // use the Content-Disposition header to supply a recommended filename
  12. header('Content-Disposition: attachment; filename="'.basename($url).'";');
  13. header('Content-Transfer-Encoding: binary');
  14. header('Content-Length: '.filesize($url));
  15. flush();
  16. readfile($url);


Pobieranie wchodzi natychmiast, a może dlatego że mam szybsze łącze, przykład żywcem zdjęty z manuala.

Ten post edytował potreb 29.10.2009, 21:22:30


--------------------

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 Aktualny czas: 22.08.2025 - 09:29