Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie i wznawianie pliku z innego serwera.
diabel
post 23.02.2012, 15:16:11
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 12.12.2011

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


Witam,
mam problem dość błachy dla jednych dla mnie okazał sie za trudny (badz zmeczenie juz daje o sobie znac); chodzi mi o pobieranie pliku z innego serwera i wysyłanie go jednoczesnie. To juz rozwiazalem w banalny sposob problem pojawia sie w momencie kiedy zatrzyjmuje pobieranie, bo Babcia Stasia chce wysłać e-maila a ze internet jest na chomiki to wypadalo by zwolnic troche łącza.
  1. <?php
  2. 'http' => array(
  3. 'method' => 'GET',
  4. 'follow_location' => 1
  5. )
  6. ));
  7.  
  8. if (($fp = @fopen($link->url, 'r', FALSE, $context)) !== FALSE)
  9. {
  10. $range = 0;
  11. $size = $link->filesize;
  12. header( 'Content-Disposition: attachment; filename="' . $link->filename . '"' );
  13. header( 'Accept-Ranges: bytes' );
  14.  
  15. if(isset($_SERVER['HTTP_RANGE']))
  16. {
  17. list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2);
  18. list($range) = explode(',', $range, 2);
  19. list($range, $range_end) = explode('-', $range);
  20.  
  21. if (! $range_end)
  22. $range_end=$size-1;
  23. else
  24. $range_end=intval($range_end);
  25.  
  26. $new_length = $range_end-$range+1;
  27. header("HTTP/1.1 206 Partial Content");
  28. header("Content-Length: $new_length");
  29. header("Content-Range: bytes $range-$range_end/$size");
  30. }
  31. else
  32. {
  33. $new_length=$size;
  34. header("Content-Length: ".$size);
  35. }
  36. header( 'Content-type: application/force-download' );
  37. fseek($fp, $range);
  38. while (! feof($fp))
  39. {
  40. echo fread($fp, 1024); // nie bedziemy szalec
  41. flush();
  42. }
  43. fclose($fp);
  44. exit();
  45. }
  46. return FALSE;
  47. ?>

Tak czy siak fseek nie działa z http[s], czy znacie jakies alternatywy?

Pozdrawiam.
Go to the top of the page
+Quote Post
Sephirus
post 23.02.2012, 15:46:11
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


CURL powinien Ci pomóc - obsługuje w miarę dobrze Content-Range i HTTPS. Dodatkowo ma fajną opcję WRITEFUNCTION ustawianą w curl_setopt - poczytaj o tym wink.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
diabel
post 1.03.2012, 20:29:50
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 12.12.2011

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


Witam,
problem rozwiazałem bardziej na około. Dla mnie cURL jest zbyt "cięzki". Wystarczy zmusic powyzszy kod by wysyła tylko od range'a.
Nie mniej dziekuje za radę.
Pojawil się natomiast inny problem.
Podczas pobierania jest blokowana calkowicie przegladarka. Nie moge pobierac 2 plików naraz badz przegladac samej strony. Całość wraca do normalnosci po skonczeniu pobierania. Znacie sposob na obejscie tego?
Za rady dziekuję.
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 Wersja Lo-Fi Aktualny czas: 13.08.2025 - 23:28