2012-06-13 13 views
6

Próbowałem wszystkich nagłówków. Z i bez długości treści.Pickup wymuszony przez 900 MB rzadko kończy się

Problem polega na tym, że dowload jest mniej więcej w połowie drogi. Ale tylko przez większość czasu.

Czasami działa dobrze.

Wykorzystanie zasobów serwera jest banalne. Wszystkie pliki konfiguracyjne są w porządku. Nie uruchamiam skryptu php podczas jego pracy.

Czy ktoś to widział wcześniej? Czy to nawet moja wina? Dlaczego czasami?

$file = "http://domain.com/files/".$item_number.".mov"; 
header('Pragma: no-cache'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Content-Description: File Download'); 
header('Content-Type: application/force-download'); 
//header ('Content-Type: video/quicktime');//doesnt seem to download at all here 
header('Content-Length: '.filesize($file)); 
header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
header('Content-Transfer-Encoding: binary'); 
readfile($file); 
exit(); 

Dziękuję, Przepraszam, to mój pierwszy raz.

+4

Czy pobieranie odbywa się za pomocą skryptu PHP? Czy możesz pokazać nam kod? –

+3

Przestań pytać o zamykanie pytań tylko dlatego, że zostały zadane przez początkującego. To jest w 100% prawdziwe pytanie. –

+0

Czy obejrzałeś swoje pliki dziennika? PS - Kod proszę. – xbonez

Odpowiedz

3

Może to wynikać z kilku powodów.

Mówisz, że zasoby serwera są w porządku, ale myślę, że PHP readfile() ładuje cały plik do pamięci przed wysłaniem go. Na szczęście jest dobry solution w dokumentach, których powinieneś zdecydowanie użyć, aby zapobiec problemom z wielokrotnym pobieraniem :)

Czy ustawiłeś czas wykonywania skryptu na nieskończony?

Następne ustawienia serwera. Być może zamykają połączenie z powodu błędu timeout/resource hog.

Użyj na przykład narzędzia dla programistów Google Chromes do dokładnego sprawdzenia wysyłanych nagłówków. PHP ustawia własne nagłówki. Powinieneś umieścić session_cache_limiter(false); na początku swojego skryptu. Jeśli dobrze pamiętam, nawet Expires: Thu, 19 Nov 1981 08:52:00 GMT ... Dlaczego to jest złe? Nadchodzący następny;)

Możesz wysłać nagłówek Etag i Last-Modified. Podsumowując, jest to unikalny identyfikator zasobu, który umożliwia wznawianie pobierania. Myślę, że szukanie dobrych artykułów na ten temat jest lepsze, niż podawanie tu zdań. W twoim przypadku możesz użyć funkcji PHPs stat(), aby utworzyć Etag.

Są ludzie borykają się z nagłówków i pliki do pobrania, można rozpocząć (lub naprawić swój przypadek) here

Podsumowanie:

  • Sprawdź ograniczenia ustawienia twoi PHP/server wygaśnięcia// zasobu
  • Pamiętaj, aby wysłać plik buforowany
  • Umożliwia wznawianie pobierania
  • Sprawdź wysyłane nagłówki

Po tym czasie powinno być dobrze. Po wznowieniu, nawet jeśli nadal powinno się zepsuć ...

Dobry postęp i sukces!

+1

Z instrukcji "readfile() nie będą zgłaszane problemy z pamięcią, nawet jeśli wysyłane są duże pliki, jeśli wystąpi błąd braku pamięci, upewnij się, że buforowanie wyjściowe jest wyłączone z ob_get_level()." – Matthew

+0

Może współdzielony host lub coś innego - właśnie podsumowałem wszystko, co wiem, może to być powód :) readfile() nie przedstawi problemu z pamięcią * IF * ... Jest to zdecydowanie jedna z list. –

+0

http://stackoverflow.com/questions/6627952/why-does-readfile-exhaust-php-memory server crap, wielu użytkowników, zasadniczo to, co powiedziałem - i najważniejsze jest wyeliminowanie świrusów zasobów, takich jak ten –

Powiązane problemy