Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Download pliku - nieznany błąd przerywający pobieranie pliku
Michael2318
post
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Witam!

Pobieram sobie plik z zewnętrznego serwera za pomocą:

  1. $context = stream_context_create($opts);
  2. $handle = fopen($dwn, "r", false, $context);
  3. if ($handle) {
  4. while (($buffer = fread($handle, 4096)) !== false)
  5. {
  6. echo $buffer;
  7. }
  8. fclose($handle);
  9. }


Oczywiście mógłbym to zrobić za pomocą file_get_contents(), ale gdy plik waży grubo ponad 1GB to skrypt się po prostu zakręci i dostaniemy mniej więcej coś takiego:

Cytat
Allowed memory size of 134217728 (..)


Skrypt powyżej zapobiega temu i w efekcie download dużych plików przebiega bezproblemowo, jednak do czasu. Przy ściągnięciu ponad 100MB danych, przeglądarka zwraca mi błąd: "Pobieranie pliku nie powiodło się". I tutaj właśnie nie potrafię znaleźć przyczyny tego zjawiska. Polecono mi użycie ob_fluch / flush, aby wyczyścić bufor, jednak to nic nie dało.

Dodatkowo w logach wyświetlane są takie błędy:
Cytat
[Sat Jan 17 12:54:09 2015] [warn] [client 178.] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Sat Jan 17 12:54:09 2015] [warn] [client 178.] (104)Connection reset by peer: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function
[Sat Jan 17 12:54:09 2015] [error] [client 178.] File does not exist: /home/name/domains/name.yyy.pl/public_html/500.shtml


Ma ktoś jakiś pomysł jak dostać się do jakiegoś komunikatu/błędu który powie coś więcej, abym wiedział gdzie szukać problemu?
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Dlaczego po prostu nie skorzystasz z readfile? Robi dokładnie to czego potrzebujesz.
Go to the top of the page
+Quote Post
Michael2318
post
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Tylko ja pobieram plik z zewnętrznego serwera. Pierw łączę się z curlem i loguję na moje konto w pewnym serwisie, a potem chcę pobrać plik na swój komputer, tyle że, aby pobrać ten plik - muszę być zalogowany. Tak więc pobieram ciastka i wtedy inicjuję download. No i nie chcę pobierać pliku na mój serwer hostingowy tylko bezpośrednio ze strony do mnie na komputer.
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Ale kiedy readfile podobnie jak fopen akceptuje coś takiego jak "kontekst" (4. parametr fopen) - na dobrą sprawę robi dokładnie to co Twój kod.
Go to the top of the page
+Quote Post
Michael2318
post
Post #5





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


Wypróbowałem to rozwiązanie z readfile. Kod wygląda tak:

  1. readfile($dwn, false, $context);

gdzie $dwn to link bezpośredni do pliku. Niestety skrypt się zamula i operacja trwa bardzo długo, a finalnie i tak dostaję plik z poprawną nazwą pliku, aczkolwiek waży on 20B i nic nie zawiera (pusty plik, który ma przypisaną nazwę i rozszerzenie, tyle).
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Możesz pokazać kompletny SSCCE
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: 23.12.2025 - 05:04