Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Headers - pobieranie pliku
Forum PHP.pl > Forum > Przedszkole
NeronRS
Witam.

Napisałem skrypt, który pobiera plik z jednego serwera i jako pośrednik wysyła go userowi.
Wszystko działa, poza tym, że serwer czeka, aż pobierze cały plik, dopiero potem zaczyna go wysyłać.
Użytkownicy tracą czas, a ja transfer serwera. Chciał bym, żeby plik był wysyłany już w trakcie pobierania z przez skrypt z pierwszego serwera.

Do pobierania używam proxy.

Umieszczam tylko fragmenty kodu:
  1. <?php
  2. header('Content-Description: File Transfer');
  3. header('Content-Disposition: attachment; filename=piosnka.mp3');
  4. header('Keep-Alive: timeout=1');
  5. header('Connection: Keep-Alive');
  6. header('Content-Type: audio/mpeg');
  7.  
  8. $proxy="86.110.5.106";
  9. $port="80";
  10.  
  11. (...)
  12.  
  13. $fp = fsockopen($proxy, $port) or die("Zapraszamy za chwile");
  14. fputs($fp, "GET $link HTTP/1.1\r\nHost: $proxy\r\n\r\n");
  15. while(!feof($fp)){
  16. $line = fgets($fp, 4000);
  17. echo $line;
  18. $pobierz .= $line;
  19. }
  20. fclose($fp);
  21.  
  22. (...)
  23.  
  24. ?>


Niestety nigdzie nie mogę znaleźć rozwiązania, a wiem, że jest to możliwe, ponieważ zastosowane jest to na innych stronach tego typu.
Usilnie proszę o pomoc. Pozdrawiam.
Sephirus
może wystarczy ob_flush() ?
NeronRS
Niestety nie, chyba, że źle to stosuję.
Ale myślę, że to duży krok na przód.

Wydaje mi się, że gdyby funkcja fsockopen mogła by powoli wypisywać plik, już w trakcie jego wczytywania z serwera nie było by problemu. Ale nie mam pojęcia jak to zrobić.
  1. $fp = fsockopen($proxy, $port) or die("Zapraszamy za chwile");
  2. fputs($fp, "GET $link HTTP/1.1\r\nHost: $proxy\r\n\r\n");


Stwierdziłem, że zrobię sobie diagnostykę skryptu i wyświetlę czas zamiast echo:

  1. echo $line;


zamieniłem na:

  1. echo time().'<br>';


Jest lepiej niż myślałem, ponieważ skrypt wypisuje fragmenty pliku na bieżąco.
Ale niestety generuje plik dopiero po obróceniu całej pętli.

Pomóżcie mi proszę, zrobić żeby wysyłał go do użytkownika (generował) również na bieżąco.
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.