Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php zliczanie transferu w locie
Forum PHP.pl > Forum > PHP
p-avel
Witam,

mam skrypt za pomocą którego klient pobiera dane do siebie i chcę zliczać jego transfer przesyłany w locie

idea jest taka

  1. $licznik = 0;
  2. $mb = 1024 * 1024;
  3. while (! feof($fp))
  4. {
  5. $content = fread($fp, 1024*4);
  6.  
  7. $licznik += strlen($content);
  8. if ($licznik >= ($mb))
  9. {
  10. //wywołanie funkcji
  11. dolicz ($user, $licznik);
  12. $licznik = 0;
  13. }
  14. echo $content;
  15. flush();
  16. }
  17. //wywołanie funkcji
  18. dolicz ($user, $licznik);
  19. fclose($fp);
  20.  
  21. break;
  22. }


wszystko by było ok gdyby nie dzielenie pliku na cześci gdyż wtedy zapisywanie pobranych kawałków następuje tak szybko że w pewnych momentach zapis do pliku się wywala tzn nie zapisuje nic, macie jakąś podpowiedź jak to rozwiązać tak aby nie wywalało pliku, wiadomo przed zapisem nowej wartości, stara wartość pobranych danych z pliku jest zapisana do zmiennej następuje dodanie potem ponowny zapis do tego pliku, ale tak jak mówie przy szybkim łączu np 30 MB/s nastepuje tak wiele operacji pod rząd że się wywala, macie jakiś pomyśł questionmark.gif

Pozdr
marcio
Spruboj uzyc flock() albo zmiejsz transfer z jakim ma byc wysylany plik.
Ewentualnie sprawdz czy plik zostal poprawnie wyslany jesli tak dodaj do transferu cala wielkosc pliku.
Ostatnio na forum byl podobny temat w ktorym bylo rozwiazanie poszukaj.

Ewentualnie przed koncem petli while() dodaj jakis sleep(1).
p-avel
Witam,

transferu nie zmniejszę bo nie mam możliwości aby użyć narzędzi takich jak cband, w kodzie już używam flock();

  1.  
  2. function dolicz($user_name, $delta)
  3. {
  4. $plik_usera = '/sciezka/log/' . $user_name . '.log';
  5. if (!file_exists($plik_usera)) {
  6. touch($plik_usera);
  7. chmod($plik_usera,0604);
  8. }
  9. $fp = fopen($plik_usera, 'r+');
  10. flock($fp, LOCK_EX);
  11. $upload = fread($fp, 1000);
  12. $new_upload = $upload + $delta;
  13. fseek($fp, 0);
  14. ftruncate($fp, 0);
  15. fwrite($fp, $new_upload);
  16. flock($fp, LOCK_UN);
  17. fclose($fp);
  18. }
  19.  


Oczywiście to nie pomaga, ze sleep(); też próbowałem i nic worriedsmiley.gif , pamiętasz jak sie nazywał temat z forum w którym ktoś rozwiązał swój problem questionmark.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.