Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Skrypt do pobierania plików
Forum PHP.pl > Forum > Przedszkole
Asig
Witam!

Mam od dłuższego czasu problem z moim skryptem odpowiadającym za pobieranie plików z serwera, skrypt wygląda następująco:

  1. $szybkosc_pobierania['max'] = 316000;
  2. $plik = "$dir/$_POST[link]$rozszerzenie";
  3.  
  4. header("Content-type: application/force-download");
  5. header('Content-Disposition: attachment; filename="'.$fileinfo['nazwa'].'"');
  6. header("Content-Length: $fileinfo[rozmiar]");
  7.  
  8.  
  9. if($fp = @fopen($plik, 'rb')) {
  10. while((!feof($fp)) AND ($fileinfo['rozmiar'] > 8192)) {
  11. print(fread($fp, $szybkosc_pobierania['max']));
  12. flush();
  13. sleep(1);
  14. if(connection_status() != 0) { break; }
  15. }
  16. if($fileinfo['rozmiar'] < 8192) {
  17. readfile($plik);
  18. }
  19. @fclose($fp);
  20. }


Jeszcze dołączam php.ini:
http://wklejto.pl/202909

Oraz php-fpm.conf:
http://wklejto.pl/202910

Może w nich też coś trzeba zmienić.

Objawy - Po włączeniu serwera mam w sumie 5GB wolnego RAM'u na serwerze, z każdą minutą ramu ubywa jak picia które się non-stop pije, aż po kilkunastu minutach zostaje 0 wolnego RAM'u i serwer zaczyna jeść jeszcze SWAP.
Kilka dni diagnozowałem co może być nie tak, aż wpadłem na zakomentowanie skryptu od pobierania plików (na mojej stronie w jednym czasie ok. 400 osób pobiera pliki - ale najdziwniejsze w tym jest to, że gdy wyłączę apache i PHP5-FPM - RAM wcale nie wraca do normy, trzeba uruchomić ponownie cały serwer aby RAM się uwolnił - myślałem też, że to od przeciążenia łącza, ale dałem limit na pewien czas do testu 1kb/s i było to samo)

Prosiłbym więc o pomoc co może być tutaj nie tak, ewentualnie jakaś korekta/optymalizacja czy inne rozwiązanie.

Dziękuję z góry,
Pozdrawiam.
Pyton_000
Dodaj jeszcze ob_flush przy flush i na końcu ob_clean()
Asig
Zrobiłem tak:
  1. $plik = "$dir/$_POST[link]$rozszerzenie";
  2.  
  3. header("Content-type: application/force-download");
  4. header('Content-Disposition: attachment; filename="'.$fileinfo['nazwa'].'"');
  5. header("Content-Length: $fileinfo[rozmiar]");
  6.  
  7. flush();
  8.  
  9. if($fp = @fopen($plik, 'rb')) {
  10. while((!feof($fp)) AND ($fileinfo['rozmiar'] > 8192)) {
  11. print(fread($fp, $szybkosc_pobierania['max']));
  12. flush();
  13. sleep(1);
  14. if(connection_status() != 0) { break; }
  15. }
  16. if($fileinfo['rozmiar'] < 8192) {
  17. readfile($plik);
  18. }
  19. @fclose($fp);
  20. }

Ale niestety nie dało to żadnego rezultatu sad.gif
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.